blob: 2c4c98ae64963896d543d0e78b1b2f96494b7eb6 [file] [log] [blame]
#include "third_party/blink/renderer/platform/graphics/dark_mode_lab_color_space.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace blink {
namespace lab {
static constexpr SkV3 kSRGBReferenceWhite = {1.0f, 1.0f, 1.0f};
static constexpr SkV3 kLABReferenceWhite = {100.0f, 0.0f, 0.0f};
static constexpr float kEpsilon = 0.0001;
class DarkModeLABColorSpaceTest : public testing::Test {
public:
void AssertColorsEqual(const SkV3& color1, const SkV3& color2) {
EXPECT_NEAR(color1.x, color2.x, kEpsilon);
EXPECT_NEAR(color1.y, color2.y, kEpsilon);
EXPECT_NEAR(color1.z, color2.z, kEpsilon);
}
};
TEST_F(DarkModeLABColorSpaceTest, XYZTranslation) {
DarkModeSRGBColorSpace color_space = DarkModeSRGBColorSpace();
// Check whether white transformation is correct.
SkV3 xyz_white = color_space.ToXYZ(kSRGBReferenceWhite);
AssertColorsEqual(xyz_white, kIlluminantD50);
SkV3 rgb_white = color_space.FromXYZ(kIlluminantD50);
AssertColorsEqual(rgb_white, kSRGBReferenceWhite);
// Check whether transforming sRGB to XYZ and back gives the same RGB values
// for some random colors with different r, g, b components.
for (unsigned r = 0; r <= 255; r += 40) {
for (unsigned g = 0; r <= 255; r += 50) {
for (unsigned b = 0; r <= 255; r += 60) {
SkV3 rgb = {r / 255.0f, g / 255.0f, b / 255.0f};
SkV3 xyz = color_space.ToXYZ(rgb);
AssertColorsEqual(rgb, color_space.FromXYZ(xyz));
}
}
}
}
TEST_F(DarkModeLABColorSpaceTest, LABTranslation) {
DarkModeSRGBLABTransformer transformer = DarkModeSRGBLABTransformer();
// Check whether white transformation is correct.
SkV3 lab_white = transformer.SRGBToLAB(kSRGBReferenceWhite);
AssertColorsEqual(lab_white, kLABReferenceWhite);
SkV3 rgb_white = transformer.LABToSRGB(kLABReferenceWhite);
AssertColorsEqual(rgb_white, kSRGBReferenceWhite);
// Check whether transforming sRGB to Lab and back gives the same RGB values
// for some random colors with different r, g, b components.
for (unsigned r = 0; r <= 255; r += 40) {
for (unsigned g = 0; r <= 255; r += 50) {
for (unsigned b = 0; r <= 255; r += 60) {
SkV3 rgb = {r / 255.0f, g / 255.0f, b / 255.0f};
SkV3 lab = transformer.SRGBToLAB(rgb);
AssertColorsEqual(rgb, transformer.LABToSRGB(lab));
}
}
}
}
} // namespace lab
} // namespace blink