harfang3d/harfang/tests/engine/picture.cpp
2023-06-08 22:17:16 +02:00

83 lines
2.2 KiB
C++

// HARFANG(R) Copyright (C) 2022 NWNC. Released under GPL/LGPL/Commercial Licence, see licence.txt for details.
#define TEST_NO_MAIN
#include "acutest.h"
#include "engine/picture.h"
#include "foundation/path_tools.h"
#include "foundation/file.h"
#include "../utils.h"
using namespace hg;
static void test_LoadSave() {
const std::string tmp = test::GetTempDirectoryName();
const std::string filename[3] = {
PathJoin(tmp, "stb_save.png"),
PathJoin(tmp, "stb_save.bmp"),
PathJoin(tmp, "stb_save.tga"),
};
Picture pic;
TEST_CHECK(LoadPicture(pic, "./data/pic/owl.jpg") == true);
TEST_CHECK(SavePNG(pic, filename[0].c_str()) == true);
TEST_CHECK(SaveBMP(pic, filename[1].c_str()) == true);
TEST_CHECK(SaveTGA(pic, filename[2].c_str()) == true);
for (int i = 0; i < 3; i++) {
Unlink(filename[i].c_str());
}
}
static void test_SetGetPixels() {
Picture rgb(2, 2, PF_RGB24);
Picture rgba(2, 2, PF_RGBA32);
Picture rgbaf(2, 2, PF_RGBA32F);
Color pal[4] = {{1.f, 1.f, 1.f, 1.f}, {1.f, 0.f, 0.f, 0.f}, {0.f, 1.f, 0.f, 1.f}, {0.f, 0.f, 1.f, 0.f}};
for (int j = 0; j < 2; j++) {
for (int i = 0; i < 2; i++) {
Color in = pal[i + j * 2];
SetPixelRGBA(rgb, i, j, in);
SetPixelRGBA(rgba, i, j, in);
SetPixelRGBA(rgbaf, i, j, in);
// test if it doesn't crash
SetPixelRGBA(rgb, i + 4, j, in);
SetPixelRGBA(rgba, i + 4, j, in);
SetPixelRGBA(rgbaf, i + 4, j, in);
SetPixelRGBA(rgb, i, j + 4, in);
SetPixelRGBA(rgba, i, j + 4, in);
SetPixelRGBA(rgbaf, i, j + 4, in);
}
}
for (int j = 0; j < 2; j++) {
for (int i = 0; i < 2; i++) {
Color expected = pal[i + j * 2];
TEST_CHECK(GetPixelRGBA(rgb, i, j) == Color(expected.r, expected.g, expected.b, 0.f));
TEST_CHECK(GetPixelRGBA(rgba, i, j) == expected);
TEST_CHECK(GetPixelRGBA(rgbaf, i, j) == expected);
TEST_CHECK(GetPixelRGBA(rgb, i + 10, j) == Color::Zero);
TEST_CHECK(GetPixelRGBA(rgba, i + 10, j) == Color::Zero);
TEST_CHECK(GetPixelRGBA(rgbaf, i + 10, j) == Color::Zero);
TEST_CHECK(GetPixelRGBA(rgb, i, j + 10) == Color::Zero);
TEST_CHECK(GetPixelRGBA(rgba, i, j + 10) == Color::Zero);
TEST_CHECK(GetPixelRGBA(rgbaf, i, j + 10) == Color::Zero);
}
}
}
void test_picture() {
test_LoadSave();
test_SetGetPixels();
}