1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414
|
//------------------------------------------------------------------------
//
// Eureka DOOM Editor
//
// Copyright (C) 2022 Ioan Chera
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
//------------------------------------------------------------------------
#include "im_img.h"
#include "m_game.h"
#include "w_wad.h"
#include "testUtils/Palette.hpp"
#include "gtest/gtest.h"
#include <FL/Fl_RGB_Image.H>
//
// Development helper function to generate the code for the expected image.
// Do NOT make static: we don't want "unused function" errors.
//
void outputPixels(const Img_c &image)
{
for(int y = 0; y < image.height(); ++y)
{
for(int x = 0; x < image.width(); ++x)
{
printf("%u, ", image.buf()[y * image.width() + x]);
}
puts("");
}
}
//==================================================================================================
TEST(ImageBasic, PixelMakeRGB)
{
img_pixel_t pixel = pixelMakeRGB(23, 15, 27);
ASSERT_EQ(pixel, img_pixel_t(IS_RGB_PIXEL | 23 << 10 | 15 << 5 | 27));
pixel = pixelMakeRGB(0, 0, 0);
ASSERT_EQ(pixel, img_pixel_t(IS_RGB_PIXEL));
}
TEST(ImageBasic, ConvertRGBImageNoAlpha)
{
std::vector<uchar> bits = {
12, 34, 56, 0, 80, 0, 56, 77, 22,
98, 0, 98, 22, 255, 200, 0, 99, 255
};
Fl_RGB_Image flImage(bits.data(), 3, 2, 3);
auto image = IM_ConvertRGBImage(flImage);
ASSERT_FALSE(image->is_null());
ASSERT_EQ(image->width(), 3);
ASSERT_EQ(image->height(), 2);
ASSERT_FALSE(image->has_transparent());
const img_pixel_t *buf = image->buf();
ASSERT_EQ(buf[0], pixelMakeRGB(1, 4, 7));
ASSERT_EQ(buf[1], pixelMakeRGB(0, 10, 0));
ASSERT_EQ(buf[2], pixelMakeRGB(7, 9, 2));
ASSERT_EQ(buf[3], pixelMakeRGB(12, 0, 12));
ASSERT_EQ(buf[4], pixelMakeRGB(2, 31, 25));
ASSERT_EQ(buf[5], pixelMakeRGB(0, 12, 31));
}
TEST(ImageBasic, ConvertRGBImageWithAlpha)
{
std::vector<uchar> bits = {
12, 34, 56, 255, 0, 80, 0, 64, 56, 77, 22, 192,
98, 0, 98, 200, 22, 255, 200, 255, 0, 99, 255, 32
};
Fl_RGB_Image flImage(bits.data(), 3, 2, 4);
auto image = IM_ConvertRGBImage(flImage);
ASSERT_FALSE(image->is_null());
ASSERT_EQ(image->width(), 3);
ASSERT_EQ(image->height(), 2);
ASSERT_TRUE(image->has_transparent());
const img_pixel_t *buf = image->buf();
ASSERT_EQ(buf[0], pixelMakeRGB(1, 4, 7));
ASSERT_EQ(buf[1], TRANS_PIXEL);
ASSERT_EQ(buf[2], pixelMakeRGB(7, 9, 2));
ASSERT_EQ(buf[3], pixelMakeRGB(12, 0, 12));
ASSERT_EQ(buf[4], pixelMakeRGB(2, 31, 25));
ASSERT_EQ(buf[5], TRANS_PIXEL);
}
TEST(ImageBasic, ConvertRGBImageInvalidDepth1)
{
std::vector<uchar> bits = {
12, 34, 56,
98, 0, 98,
};
Fl_RGB_Image flImage(bits.data(), 3, 2, 1);
auto image = IM_ConvertRGBImage(flImage);
ASSERT_FALSE(image);
}
TEST(ImageBasic, ConvertRGBImageInvalidDepth2)
{
std::vector<uchar> bits = {
12, 255, 34, 255, 56, 255,
98, 255, 0, 0, 98, 255
};
Fl_RGB_Image flImage(bits.data(), 3, 2, 2);
auto image = IM_ConvertRGBImage(flImage);
ASSERT_FALSE(image);
}
TEST(ImageBasic, ConvertTGAImage)
{
static const rgba_color_t rgba[] = {
0xff0080ff, 0x7799aa22, 0x337744ff, 0x12469911,
0xffffffff, 0x00000000, 0x246732ff, 0x12345678,
};
auto image = IM_ConvertTGAImage(rgba, 4, 2);
ASSERT_FALSE(image.is_null());
ASSERT_TRUE(image.has_transparent());
ASSERT_EQ(image.width(), 4);
ASSERT_EQ(image.height(), 2);
const auto buf = image.buf();
ASSERT_NE(buf[0], TRANS_PIXEL);
ASSERT_EQ(buf[1], TRANS_PIXEL);
ASSERT_NE(buf[2], TRANS_PIXEL);
ASSERT_EQ(buf[3], TRANS_PIXEL);
ASSERT_NE(buf[4], TRANS_PIXEL);
ASSERT_EQ(buf[5], TRANS_PIXEL);
ASSERT_NE(buf[6], TRANS_PIXEL);
ASSERT_EQ(buf[7], TRANS_PIXEL);
}
static Img_c getCrossImage()
{
Img_c image(3, 3);
img_pixel_t *buf = image.wbuf();
buf[1] = buf[3] = buf[4] = buf[5] = buf[7] = 200; // +
EXPECT_TRUE(image.has_transparent());
return image;
}
TEST(ImageBasic, Spectrify)
{
ConfigData config = {};
config.miscInfo.invis_colors[0] = 2;
config.miscInfo.invis_colors[1] = 10;
Img_c image = getCrossImage();
Img_c specter = image.spectrify(config);
ASSERT_FALSE(specter.is_null());
ASSERT_TRUE(specter.has_transparent());
ASSERT_EQ(specter.width(), 3);
ASSERT_EQ(specter.height(), 3);
const img_pixel_t *sbuf = specter.buf();
ASSERT_EQ(sbuf[0], TRANS_PIXEL);
ASSERT_GE(sbuf[1], 2);
ASSERT_LE(sbuf[1], 10);
ASSERT_EQ(sbuf[2], TRANS_PIXEL);
ASSERT_GE(sbuf[3], 2);
ASSERT_LE(sbuf[3], 10);
ASSERT_GE(sbuf[4], 2);
ASSERT_LE(sbuf[4], 10);
ASSERT_GE(sbuf[5], 2);
ASSERT_LE(sbuf[5], 10);
ASSERT_EQ(sbuf[6], TRANS_PIXEL);
ASSERT_GE(sbuf[7], 2);
ASSERT_LE(sbuf[7], 10);
ASSERT_EQ(sbuf[8], TRANS_PIXEL);
}
TEST(ImageBasic, SpectrifySingleColor)
{
ConfigData config = {};
config.miscInfo.invis_colors[0] = 2;
config.miscInfo.invis_colors[1] = 0;
Img_c image = getCrossImage();
Img_c specter = image.spectrify(config);
ASSERT_FALSE(specter.is_null());
ASSERT_TRUE(specter.has_transparent());
ASSERT_EQ(specter.width(), 3);
ASSERT_EQ(specter.height(), 3);
const img_pixel_t *sbuf = specter.buf();
ASSERT_EQ(sbuf[0], TRANS_PIXEL);
ASSERT_EQ(sbuf[1], 2);
ASSERT_EQ(sbuf[2], TRANS_PIXEL);
ASSERT_EQ(sbuf[3], 2);
ASSERT_EQ(sbuf[4], 2);
ASSERT_EQ(sbuf[5], 2);
ASSERT_EQ(sbuf[6], TRANS_PIXEL);
ASSERT_EQ(sbuf[7], 2);
ASSERT_EQ(sbuf[8], TRANS_PIXEL);
}
//==================================================================================================
//
// Fixture with a palette
//
class ImageFixture : public ::testing::Test
{
protected:
void SetUp() override;
Palette palette;
};
//
// Setup the palette
//
void ImageFixture::SetUp()
{
makeCommonPalette(palette);
}
TEST_F(ImageFixture, CreateLightSprite)
{
Img_c image = Img_c::createLightSprite(palette);
ASSERT_EQ(image.width(), 11);
ASSERT_EQ(image.height(), 11);
static const img_pixel_t expected[11 * 11] = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x2d, 0x32, 0x32, 0x2d, 0xff, 0xff, 0xff,
0xff, 0xff, 0x2d, 0x5a, 0x88, 0x8d, 0x8d, 0x88, 0x5a, 0x2d, 0xff,
0xff, 0xff, 0x5a, 0x8d, 0xe7, 0xed, 0xed, 0xe7, 0x8d, 0x5a, 0xff,
0xff, 0x2d, 0x88, 0xe7, 0xed, 0xee, 0xee, 0xed, 0xe7, 0x88, 0x2d,
0xff, 0x32, 0x8d, 0xed, 0xee, 0xef, 0xef, 0xee, 0xed, 0x8d, 0x32,
0xff, 0x32, 0x8d, 0xed, 0xee, 0xef, 0xef, 0xee, 0xed, 0x8d, 0x32,
0xff, 0x2d, 0x88, 0xe7, 0xed, 0xee, 0xee, 0xed, 0xe7, 0x88, 0x2d,
0xff, 0xff, 0x5a, 0x8d, 0xe7, 0xed, 0xed, 0xe7, 0x8d, 0x5a, 0xff,
0xff, 0xff, 0x2d, 0x5a, 0x88, 0x8d, 0x8d, 0x88, 0x5a, 0x2d, 0xff,
0xff, 0xff, 0xff, 0xff, 0x2d, 0x32, 0x32, 0x2d, 0xff, 0xff, 0xff,
};
ASSERT_EQ(memcmp(image.buf(), expected, sizeof(expected)), 0);
}
TEST_F(ImageFixture, CreateMapSpotSprite)
{
struct Case
{
int r, g, b;
const img_pixel_t data[32 * 32];
};
static const Case cases[] = {
{255, 0, 0, {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x28, 0x50, 0x50, 0x78, 0x78, 0x78, 0xa0, 0xa0, 0xa0, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xa0, 0xa0, 0xa0, 0x78, 0x78, 0x78, 0x50, 0x50, 0x28, 0xff,
0xff, 0xff, 0x28, 0x50, 0x50, 0x78, 0x78, 0x78, 0xa0, 0xa0, 0xa0, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xa0, 0xa0, 0xa0, 0x78, 0x78, 0x78, 0x50, 0x50, 0x28, 0xff,
0xff, 0xff, 0xff, 0x28, 0x50, 0x50, 0x78, 0x78, 0x78, 0xa0, 0xa0, 0xa0, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xa0, 0xa0, 0xa0, 0x78, 0x78, 0x78, 0x50, 0x50, 0x28, 0xff, 0xff,
0xff, 0xff, 0xff, 0x28, 0x50, 0x50, 0x78, 0x78, 0x78, 0xa0, 0xa0, 0xa0, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xa0, 0xa0, 0xa0, 0x78, 0x78, 0x78, 0x50, 0x50, 0x28, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x28, 0x50, 0x50, 0x78, 0x78, 0x78, 0xa0, 0xa0, 0xa0, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xa0, 0xa0, 0xa0, 0x78, 0x78, 0x78, 0x50, 0x50, 0x28, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x28, 0x50, 0x50, 0x78, 0x78, 0x78, 0xa0, 0xa0, 0xa0, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xa0, 0xa0, 0xa0, 0x78, 0x78, 0x78, 0x50, 0x50, 0x28, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x50, 0x50, 0x78, 0x78, 0x78, 0xa0, 0xa0, 0xa0, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xa0, 0xa0, 0xa0, 0x78, 0x78, 0x78, 0x50, 0x50, 0x28, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x50, 0x50, 0x78, 0x78, 0x78, 0xa0, 0xa0, 0xa0, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xa0, 0xa0, 0xa0, 0x78, 0x78, 0x78, 0x50, 0x50, 0x28, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x50, 0x50, 0x78, 0x78, 0x78, 0xa0, 0xa0, 0xa0, 0xc8, 0xc8, 0xc8, 0xa0, 0xa0, 0xa0, 0x78, 0x78, 0x78, 0x50, 0x50, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x50, 0x50, 0x78, 0x78, 0x78, 0xa0, 0xa0, 0xa0, 0xc8, 0xc8, 0xc8, 0xa0, 0xa0, 0xa0, 0x78, 0x78, 0x78, 0x50, 0x50, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x50, 0x50, 0x78, 0x78, 0x78, 0xa0, 0xa0, 0xa0, 0xc8, 0xa0, 0xa0, 0xa0, 0x78, 0x78, 0x78, 0x50, 0x50, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x50, 0x50, 0x78, 0x78, 0x78, 0xa0, 0xa0, 0xa0, 0xc8, 0xa0, 0xa0, 0xa0, 0x78, 0x78, 0x78, 0x50, 0x50, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x50, 0x50, 0x78, 0x78, 0x78, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0x78, 0x78, 0x78, 0x50, 0x50, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x50, 0x50, 0x78, 0x78, 0x78, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0x78, 0x78, 0x78, 0x50, 0x50, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x50, 0x50, 0x78, 0x78, 0x78, 0xa0, 0xa0, 0xa0, 0x78, 0x78, 0x78, 0x50, 0x50, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x50, 0x50, 0x78, 0x78, 0x78, 0xa0, 0xa0, 0xa0, 0x78, 0x78, 0x78, 0x50, 0x50, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x50, 0x50, 0x78, 0x78, 0x78, 0xa0, 0x78, 0x78, 0x78, 0x50, 0x50, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x50, 0x50, 0x78, 0x78, 0x78, 0xa0, 0x78, 0x78, 0x78, 0x50, 0x50, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x50, 0x50, 0x78, 0x78, 0x78, 0x78, 0x78, 0x50, 0x50, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x50, 0x50, 0x78, 0x78, 0x78, 0x78, 0x78, 0x50, 0x50, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x50, 0x50, 0x78, 0x78, 0x78, 0x50, 0x50, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x50, 0x50, 0x78, 0x78, 0x78, 0x50, 0x50, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x50, 0x50, 0x78, 0x50, 0x50, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x50, 0x50, 0x78, 0x50, 0x50, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x50, 0x50, 0x50, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x50, 0x50, 0x50, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x50, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x50, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
}},
{0, 255, 0, {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x0a, 0x0f, 0x0f, 0x14, 0x14, 0x19, 0x19, 0x1e, 0x1e, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x1e, 0x1e, 0x19, 0x19, 0x14, 0x14, 0x0f, 0x0f, 0x0a, 0xff,
0xff, 0xff, 0x0a, 0x0f, 0x0f, 0x14, 0x14, 0x19, 0x19, 0x1e, 0x1e, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x1e, 0x1e, 0x19, 0x19, 0x14, 0x14, 0x0f, 0x0f, 0x0a, 0xff,
0xff, 0xff, 0xff, 0x0a, 0x0f, 0x0f, 0x14, 0x14, 0x19, 0x19, 0x1e, 0x1e, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x1e, 0x1e, 0x19, 0x19, 0x14, 0x14, 0x0f, 0x0f, 0x0a, 0xff, 0xff,
0xff, 0xff, 0xff, 0x0a, 0x0f, 0x0f, 0x14, 0x14, 0x19, 0x19, 0x1e, 0x1e, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x1e, 0x1e, 0x19, 0x19, 0x14, 0x14, 0x0f, 0x0f, 0x0a, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x0a, 0x0f, 0x0f, 0x14, 0x14, 0x19, 0x19, 0x1e, 0x1e, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x1e, 0x1e, 0x19, 0x19, 0x14, 0x14, 0x0f, 0x0f, 0x0a, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x0a, 0x0f, 0x0f, 0x14, 0x14, 0x19, 0x19, 0x1e, 0x1e, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x1e, 0x1e, 0x19, 0x19, 0x14, 0x14, 0x0f, 0x0f, 0x0a, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x0f, 0x0f, 0x14, 0x14, 0x19, 0x19, 0x1e, 0x1e, 0x23, 0x23, 0x23, 0x23, 0x23, 0x1e, 0x1e, 0x19, 0x19, 0x14, 0x14, 0x0f, 0x0f, 0x0a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x0f, 0x0f, 0x14, 0x14, 0x19, 0x19, 0x1e, 0x1e, 0x23, 0x23, 0x23, 0x23, 0x23, 0x1e, 0x1e, 0x19, 0x19, 0x14, 0x14, 0x0f, 0x0f, 0x0a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x0f, 0x0f, 0x14, 0x14, 0x19, 0x19, 0x1e, 0x1e, 0x23, 0x23, 0x23, 0x1e, 0x1e, 0x19, 0x19, 0x14, 0x14, 0x0f, 0x0f, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x0f, 0x0f, 0x14, 0x14, 0x19, 0x19, 0x1e, 0x1e, 0x23, 0x23, 0x23, 0x1e, 0x1e, 0x19, 0x19, 0x14, 0x14, 0x0f, 0x0f, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x0f, 0x0f, 0x14, 0x14, 0x19, 0x19, 0x1e, 0x1e, 0x23, 0x1e, 0x1e, 0x19, 0x19, 0x14, 0x14, 0x0f, 0x0f, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x0f, 0x0f, 0x14, 0x14, 0x19, 0x19, 0x1e, 0x1e, 0x23, 0x1e, 0x1e, 0x19, 0x19, 0x14, 0x14, 0x0f, 0x0f, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x0f, 0x0f, 0x14, 0x14, 0x19, 0x19, 0x1e, 0x1e, 0x1e, 0x19, 0x19, 0x14, 0x14, 0x0f, 0x0f, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x0f, 0x0f, 0x14, 0x14, 0x19, 0x19, 0x1e, 0x1e, 0x1e, 0x19, 0x19, 0x14, 0x14, 0x0f, 0x0f, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x0f, 0x0f, 0x14, 0x14, 0x19, 0x19, 0x1e, 0x19, 0x19, 0x14, 0x14, 0x0f, 0x0f, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x0f, 0x0f, 0x14, 0x14, 0x19, 0x19, 0x1e, 0x19, 0x19, 0x14, 0x14, 0x0f, 0x0f, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x0f, 0x0f, 0x14, 0x14, 0x19, 0x19, 0x19, 0x14, 0x14, 0x0f, 0x0f, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x0f, 0x0f, 0x14, 0x14, 0x19, 0x19, 0x19, 0x14, 0x14, 0x0f, 0x0f, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x0f, 0x0f, 0x14, 0x14, 0x19, 0x14, 0x14, 0x0f, 0x0f, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x0f, 0x0f, 0x14, 0x14, 0x19, 0x14, 0x14, 0x0f, 0x0f, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x0f, 0x0f, 0x14, 0x14, 0x14, 0x0f, 0x0f, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x0f, 0x0f, 0x14, 0x14, 0x14, 0x0f, 0x0f, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x0f, 0x0f, 0x14, 0x0f, 0x0f, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x0f, 0x0f, 0x14, 0x0f, 0x0f, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x0f, 0x0f, 0x0f, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x0f, 0x0f, 0x0f, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x0f, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x0f, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
}},
{0, 0, 255, {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0xff,
0xff, 0xff, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0xff,
0xff, 0xff, 0xff, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0xff, 0xff,
0xff, 0xff, 0xff, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x04, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x04, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x01, 0x02, 0x01, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x01, 0x02, 0x01, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
}},
};
for(const Case &caze : cases)
{
Img_c image = Img_c::createMapSpotSprite(palette, caze.r, caze.g, caze.b);
ASSERT_EQ(image.width(), 32);
ASSERT_EQ(image.height(), 32);
ASSERT_EQ(memcmp(image.buf(), caze.data, sizeof(caze.data)), 0);
}
}
TEST_F(ImageFixture, CreateDogSprite)
{
Img_c image = Img_c::createDogSprite(palette);
ASSERT_EQ(image.width(), 44);
ASSERT_EQ(image.height(), 26);
static const img_pixel_t expected[44 * 26] = {
255, 255, 255, 255, 255, 255, 255, 242, 242, 242, 242, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 242, 131, 131, 131, 131, 242, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 242, 131, 131, 131, 131, 131, 131, 242, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 242, 242, 242, 242, 131, 0, 131, 131, 131, 131, 131, 130, 242, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
242, 45, 45, 130, 131, 131, 131, 45, 131, 131, 131, 131, 130, 242, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
242, 45, 85, 130, 130, 130, 131, 131, 130, 131, 131, 130, 131, 131, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 242, 255,
242, 45, 45, 85, 85, 130, 130, 131, 85, 130, 130, 85, 131, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 242, 242, 255, 255, 255, 255, 255, 255, 255, 255, 242, 131, 242,
255, 242, 45, 45, 85, 85, 85, 130, 45, 85, 85, 45, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 85, 242, 242, 242, 255, 255, 255, 242, 242, 131, 242, 255,
255, 255, 242, 45, 45, 45, 242, 242, 45, 85, 45, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 85, 85, 85, 85, 130, 130, 242, 242, 242, 131, 131, 131, 242, 255,
255, 255, 255, 242, 242, 242, 255, 255, 242, 45, 45, 0, 0, 85, 85, 85, 85, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 85, 85, 130, 130, 130, 130, 131, 131, 131, 131, 131, 242, 242, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 242, 0, 0, 131, 130, 130, 130, 85, 85, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 85, 85, 130, 131, 131, 131, 131, 131, 131, 131, 242, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 242, 242, 131, 131, 130, 131, 130, 130, 85, 45, 45, 45, 45, 45, 45, 45, 45, 45, 85, 85, 130, 130, 131, 242, 242, 242, 242, 242, 242, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 242, 131, 131, 131, 131, 130, 130, 130, 45, 45, 45, 45, 45, 45, 45, 85, 85, 130, 131, 131, 131, 242, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 242, 131, 131, 131, 131, 131, 131, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, 242, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 242, 45, 45, 131, 131, 131, 131, 131, 131, 131, 131, 242, 242, 242, 242, 131, 131, 131, 131, 131, 131, 131, 131, 242, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 242, 45, 45, 131, 131, 131, 131, 131, 242, 242, 242, 255, 255, 255, 255, 242, 45, 45, 131, 131, 131, 131, 131, 131, 242, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 242, 45, 45, 131, 131, 131, 131, 242, 242, 255, 255, 255, 255, 255, 255, 255, 242, 45, 45, 45, 45, 131, 131, 131, 131, 242, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 242, 85, 45, 131, 131, 131, 242, 242, 255, 255, 255, 255, 255, 255, 255, 255, 255, 242, 85, 85, 45, 45, 242, 131, 131, 131, 131, 242, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 242, 85, 45, 45, 131, 131, 242, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 242, 85, 85, 85, 85, 242, 242, 131, 131, 131, 242, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 242, 242, 130, 85, 45, 242, 131, 131, 242, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 242, 130, 130, 130, 242, 255, 242, 131, 131, 242, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 242, 131, 131, 130, 130, 242, 242, 131, 131, 131, 242, 242, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 242, 130, 130, 130, 242, 242, 131, 131, 242, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 242, 131, 131, 131, 131, 242, 255, 255, 242, 131, 131, 131, 131, 242, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 242, 130, 131, 131, 242, 242, 131, 131, 242, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 242, 242, 242, 242, 255, 255, 255, 255, 242, 131, 131, 131, 242, 255, 255, 255, 255, 255, 255, 255, 255, 255, 242, 131, 131, 131, 242, 255, 255, 242, 131, 131, 242, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 242, 242, 242, 255, 255, 255, 255, 255, 255, 255, 255, 255, 242, 131, 131, 131, 242, 255, 255, 255, 242, 131, 131, 242, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 242, 131, 131, 131, 242, 255, 255, 255, 242, 131, 131, 131, 242, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 242, 242, 242, 255, 255, 255, 255, 255, 242, 242, 242, 255, 255, 255, 255, 255, 255, 255,
};
ASSERT_EQ(memcmp(image.buf(), expected, sizeof(expected)), 0);
}
|