15
15
#include < modm/debug/logger.hpp>
16
16
#include < algorithm>
17
17
18
+ using namespace modm ;
18
19
using namespace modm ::color;
19
20
20
- void ColorTest::testRgbCopyConstructors () {
21
- RgbT<uint8_t > rgb8 (html::Orchid);
22
- RgbT<uint8_t > rgb8_b (rgb8);
21
+ void ColorTest::testGrayConstructors () {
22
+ Gray8 gray8 (127 );
23
+ Gray8 gray8_b (gray8);
24
+ TEST_ASSERT_EQUALS (gray8, gray8_b);
25
+
26
+ Gray4 gray4 (7 );
27
+ gray4 += 3 ;
28
+ TEST_ASSERT_EQUALS (gray4.getValue (), 10 );
29
+ gray4 -= 1 ;
30
+ TEST_ASSERT_EQUALS (gray4.getValue (), 9 );
31
+ gray4 -= 42 ; // under-saturation
32
+ TEST_ASSERT_EQUALS (gray4.getValue (), 0 );
33
+ gray4 += 66 ; // over-saturation
34
+ TEST_ASSERT_EQUALS (gray4.getValue (), 0b00001111 );
35
+ gray4 -= 3 ;
36
+ TEST_ASSERT_EQUALS (gray4.getValue (), 0b00001100 );
37
+
38
+ // not supported
39
+ // gray4 -= -6; // another over-saturation
40
+ // TEST_ASSERT_EQUALS(gray4.getValue(), 0b00001111);
41
+
42
+
43
+ gray8 = gray4; // upscaling
44
+ TEST_ASSERT_EQUALS (gray8.getValue (), 0b11001100 );
45
+ GrayD<13 > gray13 = gray4; // more upscaling
46
+ TEST_ASSERT_EQUALS (gray13.getValue (), 0b0001100110011000 ); // last digit rounds down for odd D
47
+ gray4 = gray13; // downscaling
48
+ TEST_ASSERT_EQUALS (gray4.getValue (), 0b00001100 );
49
+ }
50
+
51
+ void ColorTest::testRgbConstructors () {
52
+ Rgb888 rgb8 (html::Orchid);
53
+ Rgb888 rgb8_b (rgb8);
23
54
TEST_ASSERT_EQUALS (rgb8, rgb8_b);
24
55
25
- RgbT<uint16_t > rgb16 (rgb8);
26
- TEST_ASSERT_EQUALS (uint16_t (rgb8.red ) << 8 , rgb16.red );
27
- TEST_ASSERT_EQUALS (uint16_t (rgb8.green ) << 8 , rgb16.green );
28
- TEST_ASSERT_EQUALS (uint16_t (rgb8.blue ) << 8 , rgb16.blue );
56
+ Rgb161616 rgb16 (rgb8);
29
57
30
- RgbT< uint8_t > rgb8_c (rgb16);
58
+ Rgb888 rgb8_c (rgb16);
31
59
TEST_ASSERT_EQUALS (rgb8, rgb8_c);
32
60
}
33
61
34
- void ColorTest::testHsvCopyConstructors () {
35
- HsvT< uint8_t > hsv8 (html::Orchid);
36
- HsvT< uint8_t > hsv8_b (hsv8);
62
+ void ColorTest::testHsvConstructors () {
63
+ Hsv888 hsv8 (html::Orchid);
64
+ Hsv888 hsv8_b (hsv8);
37
65
TEST_ASSERT_EQUALS (hsv8, hsv8_b);
38
66
39
- HsvT<uint16_t > hsv16 (hsv8);
40
- TEST_ASSERT_EQUALS (uint16_t (hsv8.hue ) << 8 , hsv16.hue );
41
- TEST_ASSERT_EQUALS (uint16_t (hsv8.saturation ) << 8 , hsv16.saturation );
42
- TEST_ASSERT_EQUALS (uint16_t (hsv8.value ) << 8 , hsv16.value );
67
+ Hsv161616 hsv16 (hsv8);
43
68
44
- HsvT< uint8_t > hsv8_c (hsv16);
69
+ Hsv888 hsv8_c (hsv16);
45
70
TEST_ASSERT_EQUALS (hsv8, hsv8_c);
46
71
}
47
72
48
- void ColorTest::testBrightnessCopyConstructors () {
49
- BrightnessT<uint8_t > brightness8 (127 );
50
- BrightnessT<uint8_t > brightness8_b (brightness8);
51
- TEST_ASSERT_EQUALS (brightness8.value , brightness8_b.value );
52
-
53
- BrightnessT<uint16_t > brightness16 (brightness8);
54
- TEST_ASSERT_EQUALS (uint16_t (brightness8.value ) << 8 , brightness16.value );
55
-
56
- BrightnessT<uint8_t > brightness8_c (brightness16);
57
- TEST_ASSERT_EQUALS (brightness8.value , brightness8_c.value );
58
- }
59
-
60
73
void ColorTest::testConvertion_8bit ()
61
74
{
62
- RgbT< uint8_t > rgb (124 , 128 , 10 );
75
+ Rgb888 rgb (124 , 128 , 10 );
63
76
64
- HsvT< uint8_t > hsv (rgb);
65
- TEST_ASSERT_EQUALS (hsv.hue , 43 );
66
- TEST_ASSERT_EQUALS (hsv.saturation , 235 );
67
- TEST_ASSERT_EQUALS (hsv.value , 128 );
77
+ Hsv888 hsv (rgb);
78
+ TEST_ASSERT_EQUALS (hsv.getHue () , 43 );
79
+ TEST_ASSERT_EQUALS (hsv.getSaturation () , 235 );
80
+ TEST_ASSERT_EQUALS (hsv.getValue () , 128 );
68
81
69
- BrightnessT< uint8_t > brightness (rgb);
70
- TEST_ASSERT_EQUALS (brightness. value , 118 );
82
+ Gray8 gray (rgb);
83
+ TEST_ASSERT_EQUALS (gray. getValue () , 118 );
71
84
}
72
85
73
- // TODO 16bit convertion not yet working
74
- // see hsv_impl.hpp and rgb_impl.hpp
75
- // void ColorTest::testConvertion_16bit()
76
- // {
77
- // RgbT<uint8_t> rgb8(html::Orchid);
78
- // HsvT<uint8_t> hsv8(rgb8);
79
- // HsvT<uint16_t> hsv16(hsv8);
80
86
81
- // RgbT<uint16_t> rgb16(rgb8);
82
- // HsvT<uint16_t> hsv16_b(rgb16);
87
+ void ColorTest::testConvertion_16bit ()
88
+ {
89
+ Rgb888 rgb8 (html::Orchid);
90
+ Hsv888 hsv8 (rgb8);
91
+ Hsv161616 hsv16 (hsv8);
83
92
84
- // // Test, if rgb->hsv conversion produces the same result for 8 and 16bits
85
- // TEST_ASSERT_EQUALS(hsv16, hsv16_b);
86
- // }
93
+ Rgb161616 rgb16 (rgb8);
94
+ Hsv161616 hsv16_b (rgb16);
95
+
96
+ // Test, if rgb->hsv conversion produces the same result for 8 and 16bits
97
+ // FIXME test fails
98
+ // TEST_ASSERT_EQUALS(hsv16, hsv16_b);
99
+ }
87
100
88
101
void ColorTest::testRgbHsvPingPongConvertion_8bit ()
89
102
{
90
- RgbT<uint8_t > rgb8 (html::Orchid);
91
- HsvT<uint8_t > hsv8 (rgb8);
92
- RgbT<uint8_t > rgb8_b (hsv8);
93
-
94
- // Can't prevent some conversion-loss. Tolerate it or use more digits for your target type
95
- using namespace modm ;
96
- TEST_ASSERT_TRUE (modm::Tolerance::isValueInTolerance (rgb8.red , rgb8_b.red , 1_pct));
97
- TEST_ASSERT_TRUE (modm::Tolerance::isValueInTolerance (rgb8.green , rgb8_b.green , 1_pct));
98
- TEST_ASSERT_TRUE (modm::Tolerance::isValueInTolerance (rgb8.blue , rgb8_b.blue , 1_pct));
103
+ Rgb888 rgb8 (html::Orchid);
104
+ Hsv888 hsv8 (rgb8);
105
+ Rgb888 rgb8_b (hsv8);
106
+
107
+ // Convertion may distort - allow some tolerance.
108
+ TEST_ASSERT_TRUE (modm::Tolerance::isValueInTolerance (rgb8.getRed ().getValue (), rgb8_b.getRed ().getValue (), 1_pct));
109
+ TEST_ASSERT_TRUE (modm::Tolerance::isValueInTolerance (rgb8.getGreen ().getValue (), rgb8_b.getGreen ().getValue (), 1_pct));
110
+ TEST_ASSERT_TRUE (modm::Tolerance::isValueInTolerance (rgb8.getBlue ().getValue (), rgb8_b.getBlue ().getValue (), 1_pct));
99
111
}
100
112
101
- // TODO 16bit convertion not yet working
102
- // see hsv_impl.hpp and rgb_impl.hpp
103
- // void ColorTest::testRgbHsvPingPongConvertion_16bit()
104
- // {
105
- // // Rgb->Hsv->Rgb, both 16 bit
106
- // RgbT<uint16_t> rgb16(html::Orchid);
107
- // HsvT<uint16_t> hsv16(rgb16);
108
- // RgbT<T> rgb16_b(hsv16);
109
-
110
- // // Convertion can distort - allow some tolerance.
111
- // using namespace modm;
112
- // TEST_ASSERT_TRUE(modm::Tolerance::isValueInTolerance(rgb.red, rgb16_b.red, 1_pct));
113
- // TEST_ASSERT_TRUE(modm::Tolerance::isValueInTolerance(rgb.green, rgb16_b.green, 1_pct));
114
- // TEST_ASSERT_TRUE(modm::Tolerance::isValueInTolerance(rgb.blue, rgb16_b.blue, 1_pct));
115
- // }
113
+ void ColorTest::testRgbHsvPingPongConvertion_16bit ()
114
+ {
115
+ // Rgb->Hsv->Rgb, both 16 bit
116
+ Rgb161616 rgb16 (html::Orchid);
117
+ Hsv161616 hsv16 (rgb16);
118
+ Rgb161616 rgb16_b (hsv16);
119
+
120
+ // Convertion may distort - allow some tolerance.
121
+ TEST_ASSERT_TRUE (modm::Tolerance::isValueInTolerance (rgb16.getRed ().getValue (), rgb16_b.getRed ().getValue (), 1_pct));
122
+ TEST_ASSERT_TRUE (modm::Tolerance::isValueInTolerance (rgb16.getGreen ().getValue (), rgb16_b.getGreen ().getValue (), 1_pct));
123
+ TEST_ASSERT_TRUE (modm::Tolerance::isValueInTolerance (rgb16.getBlue ().getValue (), rgb16_b.getBlue ().getValue (), 1_pct));
124
+ }
0 commit comments