]> git.localhorst.tv Git - blobs.git/blobdiff - tst/graphics/ColorTest.cpp
color conversion tests
[blobs.git] / tst / graphics / ColorTest.cpp
diff --git a/tst/graphics/ColorTest.cpp b/tst/graphics/ColorTest.cpp
new file mode 100644 (file)
index 0000000..250b902
--- /dev/null
@@ -0,0 +1,124 @@
+#include "ColorTest.hpp"
+
+#include "../assert.hpp"
+
+#include "graphics/color.hpp"
+
+#include <limits>
+
+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
+       );
+}
+
+}
+}
+}