1 // Aseprite Document Library
2 // Copyright (c) 2001-2015 David Capello
3 //
4 // This file is released under the terms of the MIT license.
5 // Read LICENSE.txt for more information.
6
7 #ifdef HAVE_CONFIG_H
8 #include "config.h"
9 #endif
10
11 #include <gtest/gtest.h>
12
13 #include "doc/remap.h"
14 #include "doc/palette.h"
15 #include "doc/palette_picks.h"
16
17 using namespace doc;
18
TEST(Remap,ToMovePicks)19 TEST(Remap, ToMovePicks)
20 {
21 PalettePicks entries(20);
22 std::fill(entries.begin(), entries.end(), false);
23 entries[6] =
24 entries[7] =
25 entries[14] = true;
26
27 Remap map = create_remap_to_move_picks(entries, 1);
28
29 EXPECT_EQ(0, map[0]);
30 EXPECT_EQ(4, map[1]);
31 EXPECT_EQ(5, map[2]);
32 EXPECT_EQ(6, map[3]);
33 EXPECT_EQ(7, map[4]);
34 EXPECT_EQ(8, map[5]);
35 EXPECT_EQ(1, map[6]);
36 EXPECT_EQ(2, map[7]);
37 EXPECT_EQ(9, map[8]);
38 EXPECT_EQ(10, map[9]);
39 EXPECT_EQ(11, map[10]);
40 EXPECT_EQ(12, map[11]);
41 EXPECT_EQ(13, map[12]);
42 EXPECT_EQ(14, map[13]);
43 EXPECT_EQ(3, map[14]);
44 EXPECT_EQ(15, map[15]);
45 EXPECT_EQ(16, map[16]);
46 EXPECT_EQ(17, map[17]);
47 EXPECT_EQ(18, map[18]);
48 EXPECT_EQ(19, map[19]);
49
50 map = create_remap_to_move_picks(entries, 18);
51
52 EXPECT_EQ(0, map[0]);
53 EXPECT_EQ(1, map[1]);
54 EXPECT_EQ(2, map[2]);
55 EXPECT_EQ(3, map[3]);
56 EXPECT_EQ(4, map[4]);
57 EXPECT_EQ(5, map[5]);
58 EXPECT_EQ(15, map[6]);
59 EXPECT_EQ(16, map[7]);
60 EXPECT_EQ(6, map[8]);
61 EXPECT_EQ(7, map[9]);
62 EXPECT_EQ(8, map[10]);
63 EXPECT_EQ(9, map[11]);
64 EXPECT_EQ(10, map[12]);
65 EXPECT_EQ(11, map[13]);
66 EXPECT_EQ(17, map[14]);
67 EXPECT_EQ(12, map[15]);
68 EXPECT_EQ(13, map[16]);
69 EXPECT_EQ(14, map[17]);
70 EXPECT_EQ(18, map[18]);
71 EXPECT_EQ(19, map[19]);
72
73 PalettePicks all(map.size());
74 all.all();
75 EXPECT_TRUE(map.isInvertible(all));
76 }
77
TEST(Remap,ToExpandPalette)78 TEST(Remap, ToExpandPalette)
79 {
80 Remap map = create_remap_to_expand_palette(10, 3, 1);
81
82 EXPECT_EQ(0, map[0]);
83 EXPECT_EQ(4, map[1]);
84 EXPECT_EQ(5, map[2]);
85 EXPECT_EQ(6, map[3]);
86 EXPECT_EQ(7, map[4]);
87 EXPECT_EQ(8, map[5]);
88 EXPECT_EQ(9, map[6]);
89 EXPECT_EQ(1, map[7]);
90 EXPECT_EQ(2, map[8]);
91 EXPECT_EQ(3, map[9]);
92
93 map = create_remap_to_expand_palette(10, 3, 8);
94
95 EXPECT_EQ(0, map[0]);
96 EXPECT_EQ(1, map[1]);
97 EXPECT_EQ(2, map[2]);
98 EXPECT_EQ(3, map[3]);
99 EXPECT_EQ(4, map[4]);
100 EXPECT_EQ(5, map[5]);
101 EXPECT_EQ(6, map[6]);
102 EXPECT_EQ(7, map[7]);
103 EXPECT_EQ(8, map[8]);
104 EXPECT_EQ(9, map[9]);
105
106 PalettePicks all(map.size());
107 all.all();
108 EXPECT_TRUE(map.isInvertible(all));
109 }
110
TEST(Remap,BetweenPalettesChangeMask)111 TEST(Remap, BetweenPalettesChangeMask)
112 {
113 Palette a(frame_t(0), 4);
114 Palette b(frame_t(0), 4);
115
116 a.setEntry(0, rgba(255, 0, 0, 255));
117 a.setEntry(1, rgba(0, 255, 0, 255));
118 a.setEntry(2, rgba(0, 0, 255, 255));
119 a.setEntry(3, rgba(255, 255, 255, 255));
120
121 b.setEntry(0, rgba(255, 255, 255, 255));
122 b.setEntry(1, rgba(0, 255, 0, 255));
123 b.setEntry(2, rgba(0, 0, 255, 255));
124 b.setEntry(3, rgba(255, 0, 0, 255));
125
126 Remap map = create_remap_to_change_palette(&a, &b, 0, true);
127
128 EXPECT_EQ(3, map[0]);
129 EXPECT_EQ(1, map[1]);
130 EXPECT_EQ(2, map[2]);
131 EXPECT_EQ(0, map[3]);
132
133 PalettePicks all(map.size());
134 all.all();
135 EXPECT_TRUE(map.isInvertible(all));
136 }
137
TEST(Remap,BetweenPalettesDontChangeMask)138 TEST(Remap, BetweenPalettesDontChangeMask)
139 {
140 Palette a(frame_t(0), 4);
141 Palette b(frame_t(0), 4);
142
143 a.setEntry(0, rgba(0, 0, 0, 255));
144 a.setEntry(1, rgba(0, 255, 255, 255));
145 a.setEntry(2, rgba(0, 0, 0, 255));
146 a.setEntry(3, rgba(255, 0, 0, 255));
147
148 b.setEntry(0, rgba(255, 0, 0, 255));
149 b.setEntry(1, rgba(0, 255, 255, 255));
150 b.setEntry(2, rgba(0, 0, 0, 255));
151 b.setEntry(3, rgba(0, 0, 0, 255));
152
153 Remap map = create_remap_to_change_palette(&a, &b, 2, true);
154
155 EXPECT_EQ(3, map[0]);
156 EXPECT_EQ(1, map[1]);
157 EXPECT_EQ(2, map[2]);
158 EXPECT_EQ(0, map[3]);
159
160 PalettePicks all(map.size());
161 all.all();
162 EXPECT_TRUE(map.isInvertible(all));
163 }
164
TEST(Remap,BetweenPalettesDontChangeMaskForced)165 TEST(Remap, BetweenPalettesDontChangeMaskForced)
166 {
167 Palette a(frame_t(0), 4);
168 Palette b(frame_t(0), 4);
169
170 a.setEntry(0, rgba(0, 0, 0, 255));
171 a.setEntry(1, rgba(0, 255, 255, 255));
172 a.setEntry(2, rgba(0, 0, 0, 255));
173 a.setEntry(3, rgba(255, 0, 0, 255));
174
175 b.setEntry(0, rgba(255, 0, 0, 255));
176 b.setEntry(1, rgba(0, 255, 255, 255));
177 b.setEntry(2, rgba(0, 0, 0, 255));
178 b.setEntry(3, rgba(0, 0, 0, 255));
179
180 Remap map = create_remap_to_change_palette(&a, &b, 2, false);
181
182 EXPECT_EQ(3, map[0]);
183 EXPECT_EQ(1, map[1]);
184 EXPECT_EQ(2, map[2]);
185 EXPECT_EQ(0, map[3]);
186
187 PalettePicks all(map.size());
188 all.all();
189 EXPECT_TRUE(map.isInvertible(all));
190 }
191
TEST(Remap,BetweenPalettesNonInvertible)192 TEST(Remap, BetweenPalettesNonInvertible)
193 {
194 Palette a(frame_t(0), 4);
195 Palette b(frame_t(0), 3);
196
197 a.setEntry(0, rgba(0, 0, 0, 255));
198 a.setEntry(1, rgba(64, 0, 0, 255));
199 a.setEntry(2, rgba(0, 255, 0, 255));
200 a.setEntry(3, rgba(0, 0, 128, 255));
201
202 b.setEntry(0, rgba(0, 255, 0, 255));
203 b.setEntry(1, rgba(0, 0, 0, 255));
204 b.setEntry(2, rgba(64, 0, 0, 255));
205
206 Remap map = create_remap_to_change_palette(&a, &b, 0, true);
207
208 EXPECT_EQ(1, map[0]);
209 EXPECT_EQ(2, map[1]);
210 EXPECT_EQ(0, map[2]);
211 EXPECT_EQ(2, map[3]);
212
213 PalettePicks all(map.size());
214 all.all();
215 EXPECT_FALSE(map.isInvertible(all));
216 }
217
main(int argc,char ** argv)218 int main(int argc, char** argv)
219 {
220 ::testing::InitGoogleTest(&argc, argv);
221 return RUN_ALL_TESTS();
222 }
223