1 #include "third_party/blink/renderer/platform/graphics/dark_mode_lab_color_space.h"
2 #include "testing/gtest/include/gtest/gtest.h"
3
4 namespace blink {
5
6 namespace lab {
7
8 static constexpr SkV3 kSRGBReferenceWhite = {1.0f, 1.0f, 1.0f};
9 static constexpr SkV3 kLABReferenceWhite = {100.0f, 0.0f, 0.0f};
10 static constexpr float kEpsilon = 0.0001;
11
12 class DarkModeLABColorSpaceTest : public testing::Test {
13 public:
AssertColorsEqual(const SkV3 & color1,const SkV3 & color2)14 void AssertColorsEqual(const SkV3& color1, const SkV3& color2) {
15 EXPECT_NEAR(color1.x, color2.x, kEpsilon);
16 EXPECT_NEAR(color1.y, color2.y, kEpsilon);
17 EXPECT_NEAR(color1.z, color2.z, kEpsilon);
18 }
19 };
20
TEST_F(DarkModeLABColorSpaceTest,XYZTranslation)21 TEST_F(DarkModeLABColorSpaceTest, XYZTranslation) {
22 DarkModeSRGBColorSpace color_space = DarkModeSRGBColorSpace();
23
24 // Check whether white transformation is correct.
25 SkV3 xyz_white = color_space.ToXYZ(kSRGBReferenceWhite);
26 AssertColorsEqual(xyz_white, kIlluminantD50);
27
28 SkV3 rgb_white = color_space.FromXYZ(kIlluminantD50);
29 AssertColorsEqual(rgb_white, kSRGBReferenceWhite);
30
31 // Check whether transforming sRGB to XYZ and back gives the same RGB values
32 // for some random colors with different r, g, b components.
33 for (unsigned r = 0; r <= 255; r += 40) {
34 for (unsigned g = 0; r <= 255; r += 50) {
35 for (unsigned b = 0; r <= 255; r += 60) {
36 SkV3 rgb = {r / 255.0f, g / 255.0f, b / 255.0f};
37 SkV3 xyz = color_space.ToXYZ(rgb);
38 AssertColorsEqual(rgb, color_space.FromXYZ(xyz));
39 }
40 }
41 }
42 }
43
TEST_F(DarkModeLABColorSpaceTest,LABTranslation)44 TEST_F(DarkModeLABColorSpaceTest, LABTranslation) {
45 DarkModeSRGBLABTransformer transformer = DarkModeSRGBLABTransformer();
46
47 // Check whether white transformation is correct.
48 SkV3 lab_white = transformer.SRGBToLAB(kSRGBReferenceWhite);
49 AssertColorsEqual(lab_white, kLABReferenceWhite);
50
51 SkV3 rgb_white = transformer.LABToSRGB(kLABReferenceWhite);
52 AssertColorsEqual(rgb_white, kSRGBReferenceWhite);
53
54 // Check whether transforming sRGB to Lab and back gives the same RGB values
55 // for some random colors with different r, g, b components.
56 for (unsigned r = 0; r <= 255; r += 40) {
57 for (unsigned g = 0; r <= 255; r += 50) {
58 for (unsigned b = 0; r <= 255; r += 60) {
59 SkV3 rgb = {r / 255.0f, g / 255.0f, b / 255.0f};
60 SkV3 lab = transformer.SRGBToLAB(rgb);
61 AssertColorsEqual(rgb, transformer.LABToSRGB(lab));
62 }
63 }
64 }
65 }
66
67 } // namespace lab
68
69 } // namespace blink
70