X-Git-Url: http://git.localhorst.tv/?p=blobs.git;a=blobdiff_plain;f=tst%2Fgraphics%2FColorTest.cpp;fp=tst%2Fgraphics%2FColorTest.cpp;h=250b902ece75d999924cdea91854ea070b05e4a2;hp=0000000000000000000000000000000000000000;hb=01cc65097f27ad657130fb58a10813e8d5c09fe7;hpb=99bac662c454fcf3680fa9c080c90e24319d8d3d diff --git a/tst/graphics/ColorTest.cpp b/tst/graphics/ColorTest.cpp new file mode 100644 index 0000000..250b902 --- /dev/null +++ b/tst/graphics/ColorTest.cpp @@ -0,0 +1,124 @@ +#include "ColorTest.hpp" + +#include "../assert.hpp" + +#include "graphics/color.hpp" + +#include + +CPPUNIT_TEST_SUITE_REGISTRATION(blobs::graphics::test::ColorTest); + +using blobs::test::AssertEqual; + + +namespace blobs { +namespace graphics { +namespace test { + +void ColorTest::setUp() { + +} + +void ColorTest::tearDown() { + +} + +void ColorTest::testConversion() { + const double epsilon = 1.0e-9; + const glm::dvec3 rgb_black(0.0); + const glm::dvec3 rgb_white(1.0); + const glm::dvec3 rgb_red(1.0, 0.0, 0.0); + const glm::dvec3 rgb_green(0.0, 1.0, 0.0); + const glm::dvec3 rgb_blue(0.0, 0.0, 1.0); + + glm::dvec3 hsl_result(rgb2hsl(rgb_black)); + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( + "wrong saturation for black", + 0.0, hsl_result.y, epsilon + ); + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( + "wrong lightness for black", + 0.0, hsl_result.z, epsilon + ); + glm::dvec3 rgb_result(hsl2rgb(hsl_result)); + AssertEqual( + "bad HSL to RGB conversion for black", + rgb_black, rgb_result, epsilon + ); + + hsl_result = rgb2hsl(rgb_white); + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( + "wrong saturation for white", + 0.0, hsl_result.y, epsilon + ); + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( + "wrong lightness for white", + 1.0, hsl_result.z, epsilon + ); + rgb_result = hsl2rgb(hsl_result); + AssertEqual( + "bad HSL to RGB conversion for white", + rgb_white, rgb_result, epsilon + ); + + hsl_result = rgb2hsl(rgb_red); + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( + "wrong hue for red", + 0.0, hsl_result.x, epsilon + ); + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( + "wrong saturation for red", + 1.0, hsl_result.y, epsilon + ); + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( + "wrong lightness for red", + 1.0, hsl_result.z, epsilon + ); + rgb_result = hsl2rgb(hsl_result); + AssertEqual( + "bad HSL to RGB conversion for red", + rgb_red, rgb_result, epsilon + ); + + hsl_result = rgb2hsl(rgb_green); + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( + "wrong hue for green", + (1.0 / 3.0), hsl_result.x, epsilon + ); + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( + "wrong saturation for green", + 1.0, hsl_result.y, epsilon + ); + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( + "wrong lightness for green", + 1.0, hsl_result.z, epsilon + ); + rgb_result = hsl2rgb(hsl_result); + AssertEqual( + "bad HSL to RGB conversion for green", + rgb_green, rgb_result, epsilon + ); + + hsl_result = rgb2hsl(rgb_blue); + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( + "wrong hue for blue", + (2.0 / 3.0), hsl_result.x, epsilon + ); + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( + "wrong saturation for blue", + 1.0, hsl_result.y, epsilon + ); + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( + "wrong lightness for blue", + 1.0, hsl_result.z, epsilon + ); + rgb_result = hsl2rgb(hsl_result); + AssertEqual( + "bad HSL to RGB conversion for blue", + rgb_blue, rgb_result, epsilon + ); +} + +} +} +}