yaze 0.2.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
snes_palette_test.cc
Go to the documentation of this file.
2
3#include <gmock/gmock.h>
4#include <gtest/gtest.h>
5
7
8namespace yaze {
9namespace test {
10
11using ::testing::ElementsAreArray;
15
16namespace {
17unsigned int test_convert(snes_color col) {
18 unsigned int toret;
19 toret = col.red << 16;
20 toret += col.green << 8;
21 toret += col.blue;
22 return toret;
23}
24} // namespace
25
26// SnesColor Tests
27TEST(SnesColorTest, DefaultConstructor) {
29 EXPECT_EQ(color.rgb().x, 0.0f);
30 EXPECT_EQ(color.rgb().y, 0.0f);
31 EXPECT_EQ(color.rgb().z, 0.0f);
32 EXPECT_EQ(color.rgb().w, 0.0f);
33 EXPECT_EQ(color.snes(), 0);
34}
35
36TEST(SnesColorTest, RGBConstructor) {
37 ImVec4 rgb(1.0f, 0.5f, 0.25f, 1.0f);
38 yaze::gfx::SnesColor color(rgb);
39 EXPECT_EQ(color.rgb().x, rgb.x);
40 EXPECT_EQ(color.rgb().y, rgb.y);
41 EXPECT_EQ(color.rgb().z, rgb.z);
42 EXPECT_EQ(color.rgb().w, rgb.w);
43}
44
45TEST(SnesColorTest, SNESConstructor) {
46 uint16_t snes = 0x4210;
47 yaze::gfx::SnesColor color(snes);
48 EXPECT_EQ(color.snes(), snes);
49}
50
51TEST(SnesColorTest, ConvertRgbToSnes) {
52 snes_color color = {132, 132, 132};
53 uint16_t snes = ConvertRgbToSnes(color);
54 ASSERT_EQ(snes, 0x4210);
55}
56
57TEST(SnesColorTest, ConvertSnestoRGB) {
58 uint16_t snes = 0x4210;
59 snes_color color = ConvertSnesToRgb(snes);
60 ASSERT_EQ(color.red, 132);
61 ASSERT_EQ(color.green, 132);
62 ASSERT_EQ(color.blue, 132);
63}
64
65TEST(SnesColorTest, ConvertSnesToRGB_Binary) {
66 uint16_t red = 0b0000000000011111;
67 uint16_t blue = 0b0111110000000000;
68 uint16_t green = 0b0000001111100000;
69 uint16_t purple = 0b0111110000011111;
70 snes_color testcolor;
71
72 testcolor = ConvertSnesToRgb(red);
73 ASSERT_EQ(0xFF0000, test_convert(testcolor));
74 testcolor = ConvertSnesToRgb(green);
75 ASSERT_EQ(0x00FF00, test_convert(testcolor));
76 testcolor = ConvertSnesToRgb(blue);
77 ASSERT_EQ(0x0000FF, test_convert(testcolor));
78 testcolor = ConvertSnesToRgb(purple);
79 ASSERT_EQ(0xFF00FF, test_convert(testcolor));
80}
81
82TEST(SnesColorTest, Extraction) {
83 // red, blue, green, purple
84 char data[8] = {0x1F, 0x00, 0x00, 0x7C, static_cast<char>(0xE0),
85 0x03, 0x1F, 0x7C};
86 auto pal = Extract(data, 0, 4);
87 ASSERT_EQ(4, pal.size());
88 ASSERT_EQ(0xFF0000, test_convert(pal[0]));
89 ASSERT_EQ(0x0000FF, test_convert(pal[1]));
90 ASSERT_EQ(0x00FF00, test_convert(pal[2]));
91 ASSERT_EQ(0xFF00FF, test_convert(pal[3]));
92}
93
94TEST(SnesColorTest, Convert) {
95 // red, blue, green, purple white
96 char data[10] = {0x1F,
97 0x00,
98 0x00,
99 0x7C,
100 static_cast<char>(0xE0),
101 0x03,
102 0x1F,
103 0x7C,
104 static_cast<char>(0xFF),
105 0x1F};
106 auto pal = Extract(data, 0, 5);
107 auto snes_string = yaze::gfx::Convert(pal);
108 EXPECT_EQ(10, snes_string.size());
109 EXPECT_THAT(data, ElementsAreArray(snes_string.data(), 10));
110}
111
112// SnesPalette Tests
113TEST(SnesPaletteTest, DefaultConstructor) {
115 EXPECT_TRUE(palette.empty());
116 EXPECT_EQ(palette.size(), 0);
117}
118
119TEST(SnesPaletteTest, AddColor) {
122 palette.AddColor(color);
123 ASSERT_EQ(palette.size(), 1);
124}
125
126TEST(SnesPaletteTest, AddMultipleColors) {
128 yaze::gfx::SnesColor color1(0x4210);
129 yaze::gfx::SnesColor color2(0x7FFF);
130 palette.AddColor(color1);
131 palette.AddColor(color2);
132 ASSERT_EQ(palette.size(), 2);
133}
134
135TEST(SnesPaletteTest, UpdateColor) {
137 yaze::gfx::SnesColor color1(0x4210);
138 yaze::gfx::SnesColor color2(0x7FFF);
139 palette.AddColor(color1);
140 palette.UpdateColor(0, color2);
141 auto result = palette[0];
142 ASSERT_EQ(result.snes(), 0x7FFF);
143}
144
145TEST(SnesPaletteTest, SubPalette) {
147 yaze::gfx::SnesColor color1(0x4210);
148 yaze::gfx::SnesColor color2(0x7FFF);
149 yaze::gfx::SnesColor color3(0x1F1F);
150 palette.AddColor(color1);
151 palette.AddColor(color2);
152 palette.AddColor(color3);
153
154 auto sub = palette.sub_palette(1, 3);
155 ASSERT_EQ(sub.size(), 2);
156 auto result = sub[0];
157 ASSERT_EQ(result.snes(), 0x7FFF);
158}
159
160TEST(SnesPaletteTest, VectorConstructor) {
161 std::vector<yaze::gfx::SnesColor> colors = {yaze::gfx::SnesColor(0x4210),
162 yaze::gfx::SnesColor(0x7FFF)};
163 yaze::gfx::SnesPalette palette(colors);
164 ASSERT_EQ(palette.size(), 2);
165}
166
167TEST(SnesPaletteTest, Clear) {
169 yaze::gfx::SnesColor color(0x4210);
170 palette.AddColor(color);
171 ASSERT_EQ(palette.size(), 1);
172 palette.clear();
173 ASSERT_TRUE(palette.empty());
174}
175
176TEST(SnesPaletteTest, Iterator) {
178 yaze::gfx::SnesColor color1(0x4210);
179 yaze::gfx::SnesColor color2(0x7FFF);
180 palette.AddColor(color1);
181 palette.AddColor(color2);
182
183 int count = 0;
184 for (const auto& color : palette) {
185 EXPECT_TRUE(color.snes() == 0x4210 || color.snes() == 0x7FFF);
186 count++;
187 }
188 EXPECT_EQ(count, 2);
189}
190
191TEST(SnesPaletteTest, OperatorAccess) {
193 yaze::gfx::SnesColor color(0x4210);
194 palette.AddColor(color);
195 EXPECT_EQ(palette[0].snes(), 0x4210);
196}
197
198} // namespace test
199} // namespace yaze
SNES Color container.
Definition snes_color.h:38
constexpr ImVec4 rgb() const
Definition snes_color.h:74
constexpr uint16_t snes() const
Definition snes_color.h:76
Represents a palette of colors for the Super Nintendo Entertainment System (SNES).
void AddColor(const SnesColor &color)
SnesPalette sub_palette(size_t start, size_t length) const
void UpdateColor(size_t index, const SnesColor &color)
std::vector< snes_color > Extract(const char *data, unsigned int offset, unsigned int palette_size)
Definition snes_color.cc:58
uint16_t ConvertRgbToSnes(const snes_color &color)
Definition snes_color.cc:33
std::vector< char > Convert(const std::vector< snes_color > &palette)
Definition snes_color.cc:69
snes_color ConvertSnesToRgb(uint16_t color_snes)
Definition snes_color.cc:19
std::vector< snes_color > Extract(const char *data, unsigned int offset, unsigned int palette_size)
Definition snes_color.cc:58
uint16_t ConvertRgbToSnes(const snes_color &color)
Definition snes_color.cc:33
snes_color ConvertSnesToRgb(uint16_t color_snes)
Definition snes_color.cc:19
TEST(LC_LZ2_CompressionTest, TrivialRepeatedBytes)
Main namespace for the application.
Definition controller.cc:18
Primitive of 16-bit RGB SNES color.
Definition snes.h:14
uint16_t green
Definition snes.h:17
uint16_t red
Definition snes.h:15
uint16_t blue
Definition snes.h:16