From 904a50fbf2c1af5628b8ffcdc16b706b6c88bf67 Mon Sep 17 00:00:00 2001 From: Romain Menke Date: Sat, 16 Mar 2024 23:55:52 +0100 Subject: [PATCH 1/3] [css-color] test conversion lossiness --- .../color-computed-relative-color.html | 257 ++++++++++++++++++ 1 file changed, 257 insertions(+) diff --git a/css/css-color/parsing/color-computed-relative-color.html b/css/css-color/parsing/color-computed-relative-color.html index 95c8eee226b6c2..6487745834e843 100644 --- a/css/css-color/parsing/color-computed-relative-color.html +++ b/css/css-color/parsing/color-computed-relative-color.html @@ -744,6 +744,263 @@ fuzzy_test_computed_color(`oklch(from color(srgb 0.25 0.5 0.75) l c h)`, `oklch(0.585502 0.118254 250.546)`, 0.02); // Larger values means larger epsilon. fuzzy_test_computed_color(`color(from oklch(72.322% 0.12403 247.996) srgb r g b)`, `color(srgb 0.382631 0.672756 0.938904)`, 0.001); + // Test that conversion are relatively lossless. + fuzzy_test_computed_color( + `color( + from + color( + from + color(rec2020 0.99 0.88 0.77) + srgb + r g b + ) + rec2020 r g b + )`, + `color(rec2020 0.99 0.88 0.77)`, + 0.0001 + ); + fuzzy_test_computed_color( + `color( + from + rgb( + from + color(rec2020 0.99 0.88 0.77) + r g b + ) + rec2020 r g b + )`, + `color(rec2020 0.99 0.88 0.77)`, + 0.0001 + ); + fuzzy_test_computed_color( + `color( + from + rgb( + from + hsl( + from + hwb( + from + color(rec2020 0.99 0.88 0.77) + h w b + ) + h s l + ) + r g b + ) + rec2020 r g b + )`, + `color(rec2020 0.99 0.88 0.77)`, + 0.0001 + ); + fuzzy_test_computed_color( + `color( + from + lab( + from + lch( + from + oklab( + from + oklch( + from + color(rec2020 0.99 0.88 0.77) + l c h + ) + l a b + ) + l c h + ) + l a b + ) + rec2020 r g b + )`, + `color(rec2020 0.99 0.88 0.77)`, + 0.0001 + ); + + fuzzy_test_computed_color( + `color( + from + rgb( + from + hsl( + from + hwb( + from + lab( + from + lch( + from + oklab( + from + oklch( + from + color( + from + color( + from + color( + from + color(rec2020 0.99 0.88 0.77) + display-p3 + r g b + ) + xyz-d50 + x y z + ) + xyz-d65 + x y z + ) + l c h + ) + l a b + ) + l c h + ) + l a b + ) + h w b + ) + h s l + ) + r g b + ) + rec2020 r g b + )`, + `color(rec2020 0.99 0.88 0.77)`, + 0.0001 + ); + + fuzzy_test_computed_color( + `oklch( + from + rgb( + from + hsl( + from + hwb( + from + lab( + from + lch( + from + oklab( + from + oklch( + from + color( + from + color( + from + color( + from + oklch(0.5 0.1 50) + display-p3 + r g b + ) + xyz-d50 + x y z + ) + xyz-d65 + x y z + ) + l c h + ) + l a b + ) + l c h + ) + l a b + ) + h w b + ) + h s l + ) + r g b + ) + l c h + )`, + `oklch(0.5 0.1 50)`, + 0.00001 + ); + + fuzzy_test_computed_color( + `oklch( + from + rgb( + from + oklch( + from + rgb( + from + oklch( + from + rgb( + from + oklch( + from + rgb( + from + oklch(0.5 0.1 50) + r g b + ) + l c h + ) + r g b + ) + l c h + ) + r g b + ) + l c h + ) + r g b + ) + l c h + )`, + `oklch(0.5 0.1 50)`, + 0.00001 + ); + + fuzzy_test_computed_color( + `oklch( + from + lab( + from + oklch( + from + lab( + from + oklch( + from + lab( + from + oklch( + from + lab( + from + oklch(0.5 0.1 50) + l a b + ) + l c h + ) + l a b + ) + l c h + ) + l a b + ) + l c h + ) + l a b + ) + l c h + )`, + `oklch(0.5 0.1 50)`, + 0.00001 + ); + // Spec Examples: https://www.w3.org/TR/css-color-5/#relative-colors // All examples here have multiple stages of calculations so minor disagreements in the values of keyword colors and other constants can compound. // These tests require a wider epsilon of 0.02. From c30598de6d3f6e86e53a732fea4f77c571f79b2b Mon Sep 17 00:00:00 2001 From: Romain Menke Date: Sun, 17 Mar 2024 10:39:49 +0100 Subject: [PATCH 2/3] more succinct test --- .../color-computed-relative-color.html | 280 ++---------------- 1 file changed, 24 insertions(+), 256 deletions(-) diff --git a/css/css-color/parsing/color-computed-relative-color.html b/css/css-color/parsing/color-computed-relative-color.html index 6487745834e843..6e298c1402e39b 100644 --- a/css/css-color/parsing/color-computed-relative-color.html +++ b/css/css-color/parsing/color-computed-relative-color.html @@ -744,262 +744,30 @@ fuzzy_test_computed_color(`oklch(from color(srgb 0.25 0.5 0.75) l c h)`, `oklch(0.585502 0.118254 250.546)`, 0.02); // Larger values means larger epsilon. fuzzy_test_computed_color(`color(from oklch(72.322% 0.12403 247.996) srgb r g b)`, `color(srgb 0.382631 0.672756 0.938904)`, 0.001); - // Test that conversion are relatively lossless. - fuzzy_test_computed_color( - `color( - from - color( - from - color(rec2020 0.99 0.88 0.77) - srgb - r g b - ) - rec2020 r g b - )`, - `color(rec2020 0.99 0.88 0.77)`, - 0.0001 - ); - fuzzy_test_computed_color( - `color( - from - rgb( - from - color(rec2020 0.99 0.88 0.77) - r g b - ) - rec2020 r g b - )`, - `color(rec2020 0.99 0.88 0.77)`, - 0.0001 - ); - fuzzy_test_computed_color( - `color( - from - rgb( - from - hsl( - from - hwb( - from - color(rec2020 0.99 0.88 0.77) - h w b - ) - h s l - ) - r g b - ) - rec2020 r g b - )`, - `color(rec2020 0.99 0.88 0.77)`, - 0.0001 - ); - fuzzy_test_computed_color( - `color( - from - lab( - from - lch( - from - oklab( - from - oklch( - from - color(rec2020 0.99 0.88 0.77) - l c h - ) - l a b - ) - l c h - ) - l a b - ) - rec2020 r g b - )`, - `color(rec2020 0.99 0.88 0.77)`, - 0.0001 - ); - - fuzzy_test_computed_color( - `color( - from - rgb( - from - hsl( - from - hwb( - from - lab( - from - lch( - from - oklab( - from - oklch( - from - color( - from - color( - from - color( - from - color(rec2020 0.99 0.88 0.77) - display-p3 - r g b - ) - xyz-d50 - x y z - ) - xyz-d65 - x y z - ) - l c h - ) - l a b - ) - l c h - ) - l a b - ) - h w b - ) - h s l - ) - r g b - ) - rec2020 r g b - )`, - `color(rec2020 0.99 0.88 0.77)`, - 0.0001 - ); - - fuzzy_test_computed_color( - `oklch( - from - rgb( - from - hsl( - from - hwb( - from - lab( - from - lch( - from - oklab( - from - oklch( - from - color( - from - color( - from - color( - from - oklch(0.5 0.1 50) - display-p3 - r g b - ) - xyz-d50 - x y z - ) - xyz-d65 - x y z - ) - l c h - ) - l a b - ) - l c h - ) - l a b - ) - h w b - ) - h s l - ) - r g b - ) - l c h - )`, - `oklch(0.5 0.1 50)`, - 0.00001 - ); - - fuzzy_test_computed_color( - `oklch( - from - rgb( - from - oklch( - from - rgb( - from - oklch( - from - rgb( - from - oklch( - from - rgb( - from - oklch(0.5 0.1 50) - r g b - ) - l c h - ) - r g b - ) - l c h - ) - r g b - ) - l c h - ) - r g b - ) - l c h - )`, - `oklch(0.5 0.1 50)`, - 0.00001 - ); - - fuzzy_test_computed_color( - `oklch( - from - lab( - from - oklch( - from - lab( - from - oklch( - from - lab( - from - oklch( - from - lab( - from - oklch(0.5 0.1 50) - l a b - ) - l c h - ) - l a b - ) - l c h - ) - l a b - ) - l c h - ) - l a b - ) - l c h - )`, - `oklch(0.5 0.1 50)`, - 0.00001 - ); + // Test that conversions are relatively lossless. + for (const colorSpace of ["xyz-d50", "xyz-d65"]) { + // minimum 10 bits when serializing + fuzzy_test_computed_color(`color(from rgb(from color(${colorSpace} 0.99 0.88 0.77) r g b) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.001); + fuzzy_test_computed_color(`color(from hsl(from color(${colorSpace} 0.99 0.88 0.77) h s l) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.001); + fuzzy_test_computed_color(`color(from hwb(from color(${colorSpace} 0.99 0.88 0.77) h w b) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.001); + fuzzy_test_computed_color(`color(from color(from color(${colorSpace} 0.99 0.88 0.77) srgb r g b) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.001); + fuzzy_test_computed_color(`color(from color(from color(${colorSpace} 0.99 0.88 0.77) display-p3 r g b) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.001); + fuzzy_test_computed_color(`color(from color(from color(${colorSpace} 0.99 0.88 0.77) a98-rgb r g b) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.001); + + // minimum 12 bits when serializing + fuzzy_test_computed_color(`color(from color(from color(${colorSpace} 0.99 0.88 0.77) srgb-linear r g b) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.001); + fuzzy_test_computed_color(`color(from color(from color(${colorSpace} 0.99 0.88 0.77) prophoto-rgb r g b) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.001); + fuzzy_test_computed_color(`color(from color(from color(${colorSpace} 0.99 0.88 0.77) rec2020 r g b) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.001); + + // minimum 16 bits when serializing + fuzzy_test_computed_color(`color(from lab(from color(${colorSpace} 0.99 0.88 0.77) l a b) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.0001); + fuzzy_test_computed_color(`color(from lch(from color(${colorSpace} 0.99 0.88 0.77) l c h) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.0001); + fuzzy_test_computed_color(`color(from oklab(from color(${colorSpace} 0.99 0.88 0.77) l a b) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.0001); + fuzzy_test_computed_color(`color(from oklch(from color(${colorSpace} 0.99 0.88 0.77) l c h) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.0001); + fuzzy_test_computed_color(`color(from color(from color(${colorSpace} 0.99 0.88 0.77) xyz x y z) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.0001); + fuzzy_test_computed_color(`color(from color(from color(${colorSpace} 0.99 0.88 0.77) xyz-d50 x y z) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.0001); + fuzzy_test_computed_color(`color(from color(from color(${colorSpace} 0.99 0.88 0.77) xyz-d65 x y z) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.0001); + } // Spec Examples: https://www.w3.org/TR/css-color-5/#relative-colors // All examples here have multiple stages of calculations so minor disagreements in the values of keyword colors and other constants can compound. From d8c9608f05965fdfaa866feaa8536c0a83b3d0a8 Mon Sep 17 00:00:00 2001 From: Romain Menke Date: Sun, 17 Mar 2024 10:49:16 +0100 Subject: [PATCH 3/3] always expect 16 bits precision --- .../color-computed-relative-color.html | 25 ++++++++----------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/css/css-color/parsing/color-computed-relative-color.html b/css/css-color/parsing/color-computed-relative-color.html index 6e298c1402e39b..ba5dc9efbcb84b 100644 --- a/css/css-color/parsing/color-computed-relative-color.html +++ b/css/css-color/parsing/color-computed-relative-color.html @@ -744,26 +744,21 @@ fuzzy_test_computed_color(`oklch(from color(srgb 0.25 0.5 0.75) l c h)`, `oklch(0.585502 0.118254 250.546)`, 0.02); // Larger values means larger epsilon. fuzzy_test_computed_color(`color(from oklch(72.322% 0.12403 247.996) srgb r g b)`, `color(srgb 0.382631 0.672756 0.938904)`, 0.001); - // Test that conversions are relatively lossless. + // Test that conversion are relatively lossless. for (const colorSpace of ["xyz-d50", "xyz-d65"]) { - // minimum 10 bits when serializing - fuzzy_test_computed_color(`color(from rgb(from color(${colorSpace} 0.99 0.88 0.77) r g b) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.001); - fuzzy_test_computed_color(`color(from hsl(from color(${colorSpace} 0.99 0.88 0.77) h s l) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.001); - fuzzy_test_computed_color(`color(from hwb(from color(${colorSpace} 0.99 0.88 0.77) h w b) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.001); - fuzzy_test_computed_color(`color(from color(from color(${colorSpace} 0.99 0.88 0.77) srgb r g b) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.001); - fuzzy_test_computed_color(`color(from color(from color(${colorSpace} 0.99 0.88 0.77) display-p3 r g b) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.001); - fuzzy_test_computed_color(`color(from color(from color(${colorSpace} 0.99 0.88 0.77) a98-rgb r g b) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.001); - - // minimum 12 bits when serializing - fuzzy_test_computed_color(`color(from color(from color(${colorSpace} 0.99 0.88 0.77) srgb-linear r g b) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.001); - fuzzy_test_computed_color(`color(from color(from color(${colorSpace} 0.99 0.88 0.77) prophoto-rgb r g b) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.001); - fuzzy_test_computed_color(`color(from color(from color(${colorSpace} 0.99 0.88 0.77) rec2020 r g b) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.001); - - // minimum 16 bits when serializing + fuzzy_test_computed_color(`color(from rgb(from color(${colorSpace} 0.99 0.88 0.77) r g b) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.0001); + fuzzy_test_computed_color(`color(from hsl(from color(${colorSpace} 0.99 0.88 0.77) h s l) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.0001); + fuzzy_test_computed_color(`color(from hwb(from color(${colorSpace} 0.99 0.88 0.77) h w b) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.0001); fuzzy_test_computed_color(`color(from lab(from color(${colorSpace} 0.99 0.88 0.77) l a b) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.0001); fuzzy_test_computed_color(`color(from lch(from color(${colorSpace} 0.99 0.88 0.77) l c h) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.0001); fuzzy_test_computed_color(`color(from oklab(from color(${colorSpace} 0.99 0.88 0.77) l a b) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.0001); fuzzy_test_computed_color(`color(from oklch(from color(${colorSpace} 0.99 0.88 0.77) l c h) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.0001); + fuzzy_test_computed_color(`color(from color(from color(${colorSpace} 0.99 0.88 0.77) srgb r g b) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.0001); + fuzzy_test_computed_color(`color(from color(from color(${colorSpace} 0.99 0.88 0.77) srgb-linear r g b) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.0001); + fuzzy_test_computed_color(`color(from color(from color(${colorSpace} 0.99 0.88 0.77) display-p3 r g b) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.0001); + fuzzy_test_computed_color(`color(from color(from color(${colorSpace} 0.99 0.88 0.77) a98-rgb r g b) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.0001); + fuzzy_test_computed_color(`color(from color(from color(${colorSpace} 0.99 0.88 0.77) prophoto-rgb r g b) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.0001); + fuzzy_test_computed_color(`color(from color(from color(${colorSpace} 0.99 0.88 0.77) rec2020 r g b) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.0001); fuzzy_test_computed_color(`color(from color(from color(${colorSpace} 0.99 0.88 0.77) xyz x y z) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.0001); fuzzy_test_computed_color(`color(from color(from color(${colorSpace} 0.99 0.88 0.77) xyz-d50 x y z) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.0001); fuzzy_test_computed_color(`color(from color(from color(${colorSpace} 0.99 0.88 0.77) xyz-d65 x y z) ${colorSpace} x y z)`, `color(${colorSpace} 0.99 0.88 0.77)`, 0.0001);