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