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