]> git.localhorst.tv Git - blobs.git/blob - tst/graphics/ColorTest.cpp
color conversion tests
[blobs.git] / tst / graphics / ColorTest.cpp
1 #include "ColorTest.hpp"
2
3 #include "../assert.hpp"
4
5 #include "graphics/color.hpp"
6
7 #include <limits>
8
9 CPPUNIT_TEST_SUITE_REGISTRATION(blobs::graphics::test::ColorTest);
10
11 using blobs::test::AssertEqual;
12
13
14 namespace blobs {
15 namespace graphics {
16 namespace test {
17
18 void ColorTest::setUp() {
19
20 }
21
22 void ColorTest::tearDown() {
23
24 }
25
26 void ColorTest::testConversion() {
27         const double epsilon = 1.0e-9;
28         const glm::dvec3 rgb_black(0.0);
29         const glm::dvec3 rgb_white(1.0);
30         const glm::dvec3 rgb_red(1.0, 0.0, 0.0);
31         const glm::dvec3 rgb_green(0.0, 1.0, 0.0);
32         const glm::dvec3 rgb_blue(0.0, 0.0, 1.0);
33
34         glm::dvec3 hsl_result(rgb2hsl(rgb_black));
35         CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
36                 "wrong saturation for black",
37                 0.0, hsl_result.y, epsilon
38         );
39         CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
40                 "wrong lightness for black",
41                 0.0, hsl_result.z, epsilon
42         );
43         glm::dvec3 rgb_result(hsl2rgb(hsl_result));
44         AssertEqual(
45                 "bad HSL to RGB conversion for black",
46                 rgb_black, rgb_result, epsilon
47         );
48
49         hsl_result = rgb2hsl(rgb_white);
50         CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
51                 "wrong saturation for white",
52                 0.0, hsl_result.y, epsilon
53         );
54         CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
55                 "wrong lightness for white",
56                 1.0, hsl_result.z, epsilon
57         );
58         rgb_result = hsl2rgb(hsl_result);
59         AssertEqual(
60                 "bad HSL to RGB conversion for white",
61                 rgb_white, rgb_result, epsilon
62         );
63
64         hsl_result = rgb2hsl(rgb_red);
65         CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
66                 "wrong hue for red",
67                 0.0, hsl_result.x, epsilon
68         );
69         CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
70                 "wrong saturation for red",
71                 1.0, hsl_result.y, epsilon
72         );
73         CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
74                 "wrong lightness for red",
75                 1.0, hsl_result.z, epsilon
76         );
77         rgb_result = hsl2rgb(hsl_result);
78         AssertEqual(
79                 "bad HSL to RGB conversion for red",
80                 rgb_red, rgb_result, epsilon
81         );
82
83         hsl_result = rgb2hsl(rgb_green);
84         CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
85                 "wrong hue for green",
86                 (1.0 / 3.0), hsl_result.x, epsilon
87         );
88         CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
89                 "wrong saturation for green",
90                 1.0, hsl_result.y, epsilon
91         );
92         CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
93                 "wrong lightness for green",
94                 1.0, hsl_result.z, epsilon
95         );
96         rgb_result = hsl2rgb(hsl_result);
97         AssertEqual(
98                 "bad HSL to RGB conversion for green",
99                 rgb_green, rgb_result, epsilon
100         );
101
102         hsl_result = rgb2hsl(rgb_blue);
103         CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
104                 "wrong hue for blue",
105                 (2.0 / 3.0), hsl_result.x, epsilon
106         );
107         CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
108                 "wrong saturation for blue",
109                 1.0, hsl_result.y, epsilon
110         );
111         CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
112                 "wrong lightness for blue",
113                 1.0, hsl_result.z, epsilon
114         );
115         rgb_result = hsl2rgb(hsl_result);
116         AssertEqual(
117                 "bad HSL to RGB conversion for blue",
118                 rgb_blue, rgb_result, epsilon
119         );
120 }
121
122 }
123 }
124 }