diff options
Diffstat (limited to 'testing/web-platform/tests/css/css-color/parsing')
37 files changed, 8879 insertions, 0 deletions
diff --git a/testing/web-platform/tests/css/css-color/parsing/color-computed-color-contrast-function.html b/testing/web-platform/tests/css/css-color/parsing/color-computed-color-contrast-function.html new file mode 100644 index 0000000000..74be5ced37 --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/color-computed-color-contrast-function.html @@ -0,0 +1,51 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 6: Computation of colors using color-contrast() function syntax</title> +<link rel="author" title="Sam Weinig" href="mailto:weinig@apple.com"> +<link rel="help" href="https://drafts.csswg.org/css-color-6/#colorcontrast"> +<link rel="help" href="https://drafts.csswg.org/css-color-6/#resolving-contrast"> +<link rel="help" href="https://drafts.csswg.org/css-color-6/#serial-color-contrast"> +<meta name="assert" content="computed value of color-contrast() matches expected values"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/computed-testcommon.js"></script> +</head> +<body> +<div id="target"></div> +<script> + // Test with no specified target contrast + test_computed_value(`color`, `color-contrast(white vs red, blue)`, `rgb(0, 0, 255)`); + test_computed_value(`color`, `color-contrast(white vs blue, red)`, `rgb(0, 0, 255)`); + test_computed_value(`color`, `color-contrast(white vs red, blue, green)`, `rgb(0, 0, 255)`); + test_computed_value(`color`, `color-contrast(white vs white, white)`, `rgb(255, 255, 255)`); + test_computed_value(`color`, `color-contrast(blue vs red, white)`, `rgb(255, 255, 255)`); + test_computed_value(`color`, `color-contrast(red vs blue, white, red)`, `rgb(255, 255, 255)`); + test_computed_value(`color`, `color-contrast(black vs red, blue)`, `rgb(255, 0, 0)`); + test_computed_value(`color`, `color-contrast(black vs blue, red)`, `rgb(255, 0, 0)`); + test_computed_value(`color`, `color-contrast(black vs white, white)`, `rgb(255, 255, 255)`); + test_computed_value(`color`, `color-contrast(red vs blue, rgb(255, 255, 255, .5))`, `rgba(255, 255, 255, 0.5)`); + + // Test with specified target contrast. + test_computed_value(`color`, `color-contrast(wheat vs bisque, darkgoldenrod, olive, sienna, darkgreen, maroon to AA)`, `rgb(0, 100, 0)`); // darkgreen + test_computed_value(`color`, `color-contrast(wheat vs bisque, darkgoldenrod, olive, sienna, darkgreen, maroon to AA-large)`, `rgb(128, 128, 0)`); // olive + test_computed_value(`color`, `color-contrast(wheat vs bisque, darkgoldenrod, olive, sienna, darkgreen, maroon to AAA)`, `rgb(128, 0, 0)`); // maroon + test_computed_value(`color`, `color-contrast(wheat vs bisque, darkgoldenrod, olive, sienna, darkgreen, maroon to AAA-large)`, `rgb(0, 100, 0)`); // darkgreen + test_computed_value(`color`, `color-contrast(wheat vs bisque, darkgoldenrod, olive, sienna, darkgreen, maroon to 5.8)`, `rgb(128, 0, 0)`); // maroon + + // Test with specified target contrast that none meet. + test_computed_value(`color`, `color-contrast(wheat vs bisque, darkgoldenrod, olive to 100)`, `rgb(0, 0, 0)`); // black + test_computed_value(`color`, `color-contrast(green vs bisque, darkgoldenrod, olive to 100)`, `rgb(255, 255, 255)`); // white + + // Test non-sRGB colors. + test_computed_value(`color`, `color-contrast(green vs color(display-p3 0 1 0), color(display-p3 0 0 1))`, `color(display-p3 0 1 0)`); + test_computed_value(`color`, `color-contrast(color(display-p3 1 1 0) vs color(display-p3 0 1 0), color(display-p3 0 0 1))`, `color(display-p3 0 0 1)`); + test_computed_value(`color`, `color-contrast(green vs lab(50% -160 160), lch(0.2 50 20deg))`, `lch(0.2 50 20)`); + test_computed_value(`color`, `color-contrast(lab(50% -160 160) vs green, lch(0.2 50 20deg))`, `lch(0.2 50 20)`); + + // Test with extra whitespace + test_computed_value(`color`, `color-contrast( white vs red, blue )`, `rgb(0, 0, 255)`); +</script> +</body> +</html> diff --git a/testing/web-platform/tests/css/css-color/parsing/color-computed-color-function.html b/testing/web-platform/tests/css/css-color/parsing/color-computed-color-function.html new file mode 100644 index 0000000000..cafa79a1e1 --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/color-computed-color-function.html @@ -0,0 +1,282 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Color Level 4: Computation of colors using color() function syntax</title> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#color-function"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#resolving-color-function-values"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#serializing-color-function-values"> +<link rel="author" title="Chris Lilley" href="mailto:chris@w3.org"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/computed-testcommon.js"></script> +<div id="container"> + <div id="target"></div> +</div> +<style> + #container { + color: rgb(255, 0, 0); + } +</style> +<script> +for (const colorSpace of [ "srgb", "srgb-linear", "a98-rgb", "rec2020", "prophoto-rgb", "display-p3" ]) { + test_computed_value("color", `color(${colorSpace} 0% 0% 0%)`, `color(${colorSpace} 0 0 0)`); + test_computed_value("color", `color(${colorSpace} 10% 10% 10%)`, `color(${colorSpace} 0.1 0.1 0.1)`); + test_computed_value("color", `color(${colorSpace} .2 .2 25%)`, `color(${colorSpace} 0.2 0.2 0.25)`); + test_computed_value("color", `color(${colorSpace} 0 0 0 / 1)`, `color(${colorSpace} 0 0 0)`); + test_computed_value("color", `color(${colorSpace} 0% 0 0 / 0.5)`, `color(${colorSpace} 0 0 0 / 0.5)`); + test_computed_value("color", `color(${colorSpace} 20% 0 10/0.5)`, `color(${colorSpace} 0.2 0 10 / 0.5)`); + test_computed_value("color", `color(${colorSpace} 20% 0 10/50%)`, `color(${colorSpace} 0.2 0 10 / 0.5)`); + test_computed_value("color", `color(${colorSpace} 400% 0 10/50%)`, `color(${colorSpace} 4 0 10 / 0.5)`); + test_computed_value("color", `color(${colorSpace} 50% -160 160)`, `color(${colorSpace} 0.5 -160 160)`); + test_computed_value("color", `color(${colorSpace} 50% -200 200)`, `color(${colorSpace} 0.5 -200 200)`); + test_computed_value("color", `color(${colorSpace} 0 0 0 / -10%)`, `color(${colorSpace} 0 0 0 / 0)`); + test_computed_value("color", `color(${colorSpace} 0 0 0 / 110%)`, `color(${colorSpace} 0 0 0)`); + test_computed_value("color", `color(${colorSpace} 0 0 0 / 300%)`, `color(${colorSpace} 0 0 0)`); + test_computed_value("color", `color(${colorSpace} 200 200 200)`, `color(${colorSpace} 200 200 200)`); + test_computed_value("color", `color(${colorSpace} 200 200 200 / 200)`, `color(${colorSpace} 200 200 200)`); + test_computed_value("color", `color(${colorSpace} -200 -200 -200)`, `color(${colorSpace} -200 -200 -200)`); + test_computed_value("color", `color(${colorSpace} -200 -200 -200 / -200)`, `color(${colorSpace} -200 -200 -200 / 0)`); + test_computed_value("color", `color(${colorSpace} 200% 200% 200%)`, `color(${colorSpace} 2 2 2)`); + test_computed_value("color", `color(${colorSpace} 200% 200% 200% / 200%)`, `color(${colorSpace} 2 2 2)`); + test_computed_value("color", `color(${colorSpace} -200% -200% -200% / -200%)`, `color(${colorSpace} -2 -2 -2 / 0)`); + test_computed_value("color", `color(${colorSpace} calc(0.5 + 1) calc(0.5 - 1) calc(0.5) / calc(-0.5 + 1))`, `color(${colorSpace} 1.5 -0.5 0.5 / 0.5)`); + test_computed_value("color", `color(${colorSpace} calc(50% * 3) calc(-150% / 3) calc(50%) / calc(-50% * 3))`, `color(${colorSpace} 1.5 -0.5 0.5 / 0)`); + + test_computed_value("color", `color(${colorSpace} none none none / none)`, `color(${colorSpace} none none none / none)`); + test_computed_value("color", `color(${colorSpace} none none none)`, `color(${colorSpace} none none none)`); + test_computed_value("color", `color(${colorSpace} 10% none none / none)`, `color(${colorSpace} 0.1 none none / none)`); + test_computed_value("color", `color(${colorSpace} none none none / 0.5)`, `color(${colorSpace} none none none / 0.5)`); + test_computed_value("color", `color(${colorSpace} 0 0 0 / none)`, `color(${colorSpace} 0 0 0 / none)`); + + test_computed_value("color", `color(${colorSpace} calc(NaN) 0 0)`, `color(${colorSpace} 0 0 0)`); + test_computed_value("color", `color(${colorSpace} calc(0 / 0) 0 0)`, `color(${colorSpace} 0 0 0)`); +} + +for (const colorSpace of [ "xyz", "xyz-d50", "xyz-d65" ]) { + const resultColorSpace = colorSpace == "xyz" ? "xyz-d65" : colorSpace; + + test_computed_value("color", `color(${colorSpace} 0 0 0)`, `color(${resultColorSpace} 0 0 0)`); + test_computed_value("color", `color(${colorSpace} 0 0 0 / 1)`, `color(${resultColorSpace} 0 0 0)`); + test_computed_value("color", `color(${colorSpace} 1 1 1)`, `color(${resultColorSpace} 1 1 1)`); + test_computed_value("color", `color(${colorSpace} 1 1 1 / 1)`, `color(${resultColorSpace} 1 1 1)`); + test_computed_value("color", `color(${colorSpace} -1 -1 -1)`, `color(${resultColorSpace} -1 -1 -1)`); + test_computed_value("color", `color(${colorSpace} 0.1 0.1 0.1)`, `color(${resultColorSpace} 0.1 0.1 0.1)`); + test_computed_value("color", `color(${colorSpace} 10 10 10)`, `color(${resultColorSpace} 10 10 10)`); + test_computed_value("color", `color(${colorSpace} .2 .2 .25)`, `color(${resultColorSpace} 0.2 0.2 0.25)`); + test_computed_value("color", `color(${colorSpace} 0 0 0 / 0.5)`, `color(${resultColorSpace} 0 0 0 / 0.5)`); + test_computed_value("color", `color(${colorSpace} .20 0 10/0.5)`, `color(${resultColorSpace} 0.2 0 10 / 0.5)`); + test_computed_value("color", `color(${colorSpace} .20 0 10/50%)`, `color(${resultColorSpace} 0.2 0 10 / 0.5)`); + test_computed_value("color", `color(${colorSpace} 0 0 0 / -10%)`, `color(${resultColorSpace} 0 0 0 / 0)`); + test_computed_value("color", `color(${colorSpace} 0 0 0 / 110%)`, `color(${resultColorSpace} 0 0 0)`); + test_computed_value("color", `color(${colorSpace} 0 0 0 / 300%)`, `color(${resultColorSpace} 0 0 0)`); + test_computed_value("color", `color(${colorSpace} calc(0.5 + 1) calc(0.5 - 1) calc(0.5) / calc(-0.5 + 1))`, `color(${resultColorSpace} 1.5 -0.5 0.5 / 0.5)`); + + test_computed_value("color", `color(${colorSpace} none none none / none)`, `color(${resultColorSpace} none none none / none)`); + test_computed_value("color", `color(${colorSpace} none none none)`, `color(${resultColorSpace} none none none)`); + test_computed_value("color", `color(${colorSpace} 0.2 none none / none)`, `color(${resultColorSpace} 0.2 none none / none)`); + test_computed_value("color", `color(${colorSpace} none none none / 0.5)`, `color(${resultColorSpace} none none none / 0.5)`); + test_computed_value("color", `color(${colorSpace} 0 0 0 / none)`, `color(${resultColorSpace} 0 0 0 / none)`); + + test_computed_value("color", `color(${colorSpace} calc(NaN) 0 0)`, `color(${resultColorSpace} 0 0 0)`); + test_computed_value("color", `color(${colorSpace} calc(0 / 0) 0 0)`, `color(${resultColorSpace} 0 0 0)`); +} + +// Opaque sRGB in color() +test_computed_value("color", "color(srgb 1.00 0.50 0.200)", "color(srgb 1 0.5 0.2)", "[sRGB all numbers]"); +test_computed_value("color", "color(srgb 100% 50% 20%)", "color(srgb 1 0.5 0.2)", "[sRGB all percent]"); +test_computed_value("color", "color(srgb 100% 0.5 20%)", "color(srgb 1 0.5 0.2)", "[sRGB mixed number and percent]"); +test_computed_value("color", "color(srgb 1.00 50% 0.2)", "color(srgb 1 0.5 0.2)", "[sRGB mixed number and percent 2]"); +test_computed_value("color", "color(srgb none none none)", "color(srgb none none none)", "[sRGB all none]"); +test_computed_value("color", "color(srgb 1.00 none 0.2)", "color(srgb 1 none 0.2)", "[sRGB number and none]"); +test_computed_value("color", "color(srgb 100% none 20%)", "color(srgb 1 none 0.2)", "[sRGB percent and none]"); +test_computed_value("color", "color(srgb 100% none 0.2)", "color(srgb 1 none 0.2)", "[sRGB number, percent and none]"); + +// non-unity alpha, sRGB in color() +test_computed_value("color", "color(srgb 1.00 0.50 0.200 / 0.6)", "color(srgb 1 0.5 0.2 / 0.6)", "[sRGB with alpha, all numbers]"); +test_computed_value("color", "color(srgb 100% 50% 20% / 60%)", "color(srgb 1 0.5 0.2 / 0.6)", "[sRGB with alpha, all percent]"); +test_computed_value("color", "color(srgb 100% 0.5 20% / 0.6)", "color(srgb 1 0.5 0.2 / 0.6)", "[sRGB with alpha, mixed number and percent]"); +test_computed_value("color", "color(srgb 1.00 50% 0.2 / 60%)", "color(srgb 1 0.5 0.2 / 0.6)", "[sRGB with alpha, mixed number and percent 2]"); +test_computed_value("color", "color(srgb none none none / none)", "color(srgb none none none / none)", "[sRGB with alpha, all none]"); +test_computed_value("color", "color(srgb 1.00 none 0.2 / none)", "color(srgb 1 none 0.2 / none)", "[sRGB with alpha, number and none]"); +test_computed_value("color", "color(srgb 100% none 20% / 30%)", "color(srgb 1 none 0.2 / 0.3)", "[sRGB with alpha, percent and none]"); +test_computed_value("color", "color(srgb 100% none 0.2 / 23.7%)", "color(srgb 1 none 0.2 / 0.237)", "[sRGB with alpha, number, percent and none]"); + +// Opaque linear-light sRGB in color() +test_computed_value("color", "color(srgb-linear 1.00 0.50 0.200)", "color(srgb-linear 1 0.5 0.2)", "[Linear-light sRGB all numbers]"); +test_computed_value("color", "color(srgb-linear 100% 50% 20%)", "color(srgb-linear 1 0.5 0.2)", "[Linear-light sRGB all percent]"); +test_computed_value("color", "color(srgb-linear 100% 0.5 20%)", "color(srgb-linear 1 0.5 0.2)", "[Linear-light sRGB mixed number and percent]"); +test_computed_value("color", "color(srgb-linear 1.00 50% 0.2)", "color(srgb-linear 1 0.5 0.2)", "[Linear-light sRGB mixed number and percent 2]"); +test_computed_value("color", "color(srgb-linear none none none)", "color(srgb-linear none none none)", "[Linear-light sRGB all none]"); +test_computed_value("color", "color(srgb-linear 1.00 none 0.2)", "color(srgb-linear 1 none 0.2)", "[Linear-light sRGB number and none]"); +test_computed_value("color", "color(srgb-linear 100% none 20%)", "color(srgb-linear 1 none 0.2)", "[Linear-light sRGB percent and none]"); +test_computed_value("color", "color(srgb-linear 100% none 0.2)", "color(srgb-linear 1 none 0.2)", "[Linear-light sRGB number, percent and none]"); + +// non-unity alpha, linear-light sRGB in color() +test_computed_value("color", "color(srgb-linear 1.00 0.50 0.200 / 0.6)", "color(srgb-linear 1 0.5 0.2 / 0.6)", "[Linear-light sRGB with alpha, all numbers]"); +test_computed_value("color", "color(srgb-linear 100% 50% 20% / 60%)", "color(srgb-linear 1 0.5 0.2 / 0.6)", "[Linear-light sRGB with alpha, all percent]"); +test_computed_value("color", "color(srgb-linear 100% 0.5 20% / 0.6)", "color(srgb-linear 1 0.5 0.2 / 0.6)", "[Linear-light sRGB with alpha, mixed number and percent]"); +test_computed_value("color", "color(srgb-linear 1.00 50% 0.2 / 60%)", "color(srgb-linear 1 0.5 0.2 / 0.6)", "[Linear-light sRGB with alpha, mixed number and percent 2]"); +test_computed_value("color", "color(srgb-linear none none none / none)", "color(srgb-linear none none none / none)", "[Linear-light sRGB with alpha, all none]"); +test_computed_value("color", "color(srgb-linear 1.00 none 0.2 / none)", "color(srgb-linear 1 none 0.2 / none)", "[Linear-light sRGB with alpha, number and none]"); +test_computed_value("color", "color(srgb-linear 100% none 20% / 30%)", "color(srgb-linear 1 none 0.2 / 0.3)", "[Linear-light sRGB with alpha, percent and none]"); +test_computed_value("color", "color(srgb-linear 100% none 0.2 / 23.7%)", "color(srgb-linear 1 none 0.2 / 0.237)", "[Linear-light sRGB with alpha, number, percent and none]"); + +// Opaque Display P3 in color() +test_computed_value("color", "color(display-p3 1.00 0.50 0.200)", "color(display-p3 1 0.5 0.2)", "[Display P3 all numbers]"); +test_computed_value("color", "color(display-p3 100% 50% 20%)", "color(display-p3 1 0.5 0.2)", "[Display P3 all percent]"); +test_computed_value("color", "color(display-p3 100% 0.5 20%)", "color(display-p3 1 0.5 0.2)", "[Display P3 mixed number and percent]"); +test_computed_value("color", "color(display-p3 1.00 50% 0.2)", "color(display-p3 1 0.5 0.2)", "[Display P3 mixed number and percent 2]"); +test_computed_value("color", "color(display-p3 none none none)", "color(display-p3 none none none)", "[Display P3 all none]"); +test_computed_value("color", "color(display-p3 1.00 none 0.2)", "color(display-p3 1 none 0.2)", "[Display P3 number and none]"); +test_computed_value("color", "color(display-p3 100% none 20%)", "color(display-p3 1 none 0.2)", "[Display P3 percent and none]"); +test_computed_value("color", "color(display-p3 100% none 0.2)", "color(display-p3 1 none 0.2)", "[Display P3 number, percent and none]"); + +// non-unity alpha, Display P3 in color() +test_computed_value("color", "color(display-p3 1.00 0.50 0.200 / 0.6)", "color(display-p3 1 0.5 0.2 / 0.6)", "[Display P3 with alpha, all numbers]"); +test_computed_value("color", "color(display-p3 100% 50% 20% / 60%)", "color(display-p3 1 0.5 0.2 / 0.6)", "[Display P3 with alpha, all percent]"); +test_computed_value("color", "color(display-p3 100% 0.5 20% / 0.6)", "color(display-p3 1 0.5 0.2 / 0.6)", "[Display P3 with alpha, mixed number and percent]"); +test_computed_value("color", "color(display-p3 1.00 50% 0.2 / 60%)", "color(display-p3 1 0.5 0.2 / 0.6)", "[Display P3 with alpha, mixed number and percent 2]"); +test_computed_value("color", "color(display-p3 none none none / none)", "color(display-p3 none none none / none)", "[Display P3 with alpha, all none]"); +test_computed_value("color", "color(display-p3 1.00 none 0.2 / none)", "color(display-p3 1 none 0.2 / none)", "[Display P3 with alpha, number and none]"); +test_computed_value("color", "color(display-p3 100% none 20% / 30%)", "color(display-p3 1 none 0.2 / 0.3)", "[Display P3 with alpha, percent and none]"); +test_computed_value("color", "color(display-p3 100% none 0.2 / 23.7%)", "color(display-p3 1 none 0.2 / 0.237)", "[Display P3 with alpha, number, percent and none]"); + +// Opaque A98 RGB in color() +test_computed_value("color", "color(a98-rgb 1.00 0.50 0.200)", "color(a98-rgb 1 0.5 0.2)", "[A98 RGB all numbers]"); +test_computed_value("color", "color(a98-rgb 100% 50% 20%)", "color(a98-rgb 1 0.5 0.2)", "[A98 RGB all percent]"); +test_computed_value("color", "color(a98-rgb 100% 0.5 20%)", "color(a98-rgb 1 0.5 0.2)", "[A98 RGB mixed number and percent]"); +test_computed_value("color", "color(a98-rgb 1.00 50% 0.2)", "color(a98-rgb 1 0.5 0.2)", "[A98 RGB mixed number and percent 2]"); +test_computed_value("color", "color(a98-rgb none none none)", "color(a98-rgb none none none)", "[A98 RGB all none]"); +test_computed_value("color", "color(a98-rgb 1.00 none 0.2)", "color(a98-rgb 1 none 0.2)", "[A98 RGB number and none]"); +test_computed_value("color", "color(a98-rgb 100% none 20%)", "color(a98-rgb 1 none 0.2)", "[A98 RGB percent and none]"); +test_computed_value("color", "color(a98-rgb 100% none 0.2)", "color(a98-rgb 1 none 0.2)", "[A98 RGB number, percent and none]"); + +// non-unity alpha, A98 RGB in color() +test_computed_value("color", "color(a98-rgb 1.00 0.50 0.200 / 0.6)", "color(a98-rgb 1 0.5 0.2 / 0.6)", "[A98 RGB with alpha, all numbers]"); +test_computed_value("color", "color(a98-rgb 100% 50% 20% / 60%)", "color(a98-rgb 1 0.5 0.2 / 0.6)", "[A98 RGB with alpha, all percent]"); +test_computed_value("color", "color(a98-rgb 100% 0.5 20% / 0.6)", "color(a98-rgb 1 0.5 0.2 / 0.6)", "[A98 RGB with alpha, mixed number and percent]"); +test_computed_value("color", "color(a98-rgb 1.00 50% 0.2 / 60%)", "color(a98-rgb 1 0.5 0.2 / 0.6)", "[A98 RGB with alpha, mixed number and percent 2]"); +test_computed_value("color", "color(a98-rgb none none none / none)", "color(a98-rgb none none none / none)", "[A98 RGB with alpha, all none]"); +test_computed_value("color", "color(a98-rgb 1.00 none 0.2 / none)", "color(a98-rgb 1 none 0.2 / none)", "[A98 RGB with alpha, number and none]"); +test_computed_value("color", "color(a98-rgb 100% none 20% / 30%)", "color(a98-rgb 1 none 0.2 / 0.3)", "[A98 RGB with alpha, percent and none]"); +test_computed_value("color", "color(a98-rgb 100% none 0.2 / 23.7%)", "color(a98-rgb 1 none 0.2 / 0.237)", "[A98 RGB with alpha, number, percent and none]"); + +// Opaque ProPhoto RGB in color() +test_computed_value("color", "color(prophoto-rgb 1.00 0.50 0.200)", "color(prophoto-rgb 1 0.5 0.2)", "[ProPhoto RGB all numbers]"); +test_computed_value("color", "color(prophoto-rgb 100% 50% 20%)", "color(prophoto-rgb 1 0.5 0.2)", "[ProPhoto RGB all percent]"); +test_computed_value("color", "color(prophoto-rgb 100% 0.5 20%)", "color(prophoto-rgb 1 0.5 0.2)", "[ProPhoto RGB mixed number and percent]"); +test_computed_value("color", "color(prophoto-rgb 1.00 50% 0.2)", "color(prophoto-rgb 1 0.5 0.2)", "[ProPhoto RGB mixed number and percent 2]"); +test_computed_value("color", "color(prophoto-rgb none none none)", "color(prophoto-rgb none none none)", "[ProPhoto RGB all none]"); +test_computed_value("color", "color(prophoto-rgb 1.00 none 0.2)", "color(prophoto-rgb 1 none 0.2)", "[ProPhoto RGB number and none]"); +test_computed_value("color", "color(prophoto-rgb 100% none 20%)", "color(prophoto-rgb 1 none 0.2)", "[ProPhoto RGB percent and none]"); +test_computed_value("color", "color(prophoto-rgb 100% none 0.2)", "color(prophoto-rgb 1 none 0.2)", "[ProPhoto RGB number, percent and none]"); + +// non-unity alpha, ProPhoto RGB in color() +test_computed_value("color", "color(prophoto-rgb 1.00 0.50 0.200 / 0.6)", "color(prophoto-rgb 1 0.5 0.2 / 0.6)", "[ProPhoto RGB with alpha, all numbers]"); +test_computed_value("color", "color(prophoto-rgb 100% 50% 20% / 60%)", "color(prophoto-rgb 1 0.5 0.2 / 0.6)", "[ProPhoto RGB with alpha, all percent]"); +test_computed_value("color", "color(prophoto-rgb 100% 0.5 20% / 0.6)", "color(prophoto-rgb 1 0.5 0.2 / 0.6)", "[ProPhoto RGB with alpha, mixed number and percent]"); +test_computed_value("color", "color(prophoto-rgb 1.00 50% 0.2 / 60%)", "color(prophoto-rgb 1 0.5 0.2 / 0.6)", "[ProPhoto RGB with alpha, mixed number and percent 2]"); +test_computed_value("color", "color(prophoto-rgb none none none / none)", "color(prophoto-rgb none none none / none)", "[ProPhoto RGB with alpha, all none]"); +test_computed_value("color", "color(prophoto-rgb 1.00 none 0.2 / none)", "color(prophoto-rgb 1 none 0.2 / none)", "[ProPhoto RGB with alpha, number and none]"); +test_computed_value("color", "color(prophoto-rgb 100% none 20% / 30%)", "color(prophoto-rgb 1 none 0.2 / 0.3)", "[ProPhoto RGB with alpha, percent and none]"); +test_computed_value("color", "color(prophoto-rgb 100% none 0.2 / 23.7%)", "color(prophoto-rgb 1 none 0.2 / 0.237)", "[ProPhoto RGB with alpha, number, percent and none]"); + +// Opaque Rec BT.2020 in color() +test_computed_value("color", "color(rec2020 1.00 0.50 0.200)", "color(rec2020 1 0.5 0.2)", "[Rec BT.2020 all numbers]"); +test_computed_value("color", "color(rec2020 100% 50% 20%)", "color(rec2020 1 0.5 0.2)", "[Rec BT.2020 all percent]"); +test_computed_value("color", "color(rec2020 100% 0.5 20%)", "color(rec2020 1 0.5 0.2)", "[Rec BT.2020 mixed number and percent]"); +test_computed_value("color", "color(rec2020 1.00 50% 0.2)", "color(rec2020 1 0.5 0.2)", "[Rec BT.2020 mixed number and percent 2]"); +test_computed_value("color", "color(rec2020 none none none)", "color(rec2020 none none none)", "[Rec BT.2020 all none]"); +test_computed_value("color", "color(rec2020 1.00 none 0.2)", "color(rec2020 1 none 0.2)", "[Rec BT.2020 number and none]"); +test_computed_value("color", "color(rec2020 100% none 20%)", "color(rec2020 1 none 0.2)", "[Rec BT.2020 percent and none]"); +test_computed_value("color", "color(rec2020 100% none 0.2)", "color(rec2020 1 none 0.2)", "[Rec BT.2020 number, percent and none]"); + +// non-unity alpha, Rec BT.2020 in color() +test_computed_value("color", "color(rec2020 1.00 0.50 0.200 / 0.6)", "color(rec2020 1 0.5 0.2 / 0.6)", "[Rec BT.2020 with alpha, all numbers]"); +test_computed_value("color", "color(rec2020 100% 50% 20% / 60%)", "color(rec2020 1 0.5 0.2 / 0.6)", "[Rec BT.2020 with alpha, all percent]"); +test_computed_value("color", "color(rec2020 100% 0.5 20% / 0.6)", "color(rec2020 1 0.5 0.2 / 0.6)", "[Rec BT.2020 with alpha, mixed number and percent]"); +test_computed_value("color", "color(rec2020 1.00 50% 0.2 / 60%)", "color(rec2020 1 0.5 0.2 / 0.6)", "[Rec BT.2020 with alpha, mixed number and percent 2]"); +test_computed_value("color", "color(rec2020 none none none / none)", "color(rec2020 none none none / none)", "[Rec BT.2020 with alpha, all none]"); +test_computed_value("color", "color(rec2020 1.00 none 0.2 / none)", "color(rec2020 1 none 0.2 / none)", "[Rec BT.2020 with alpha, number and none]"); +test_computed_value("color", "color(rec2020 100% none 20% / 30%)", "color(rec2020 1 none 0.2 / 0.3)", "[Rec BT.2020 with alpha, percent and none]"); +test_computed_value("color", "color(rec2020 100% none 0.2 / 23.7%)", "color(rec2020 1 none 0.2 / 0.237)", "[Rec BT.2020 with alpha, number, percent and none]"); + +// Opaque CIE XYZ D50 in color() +test_computed_value("color", "color(xyz-d50 1.00 0.50 0.200)", "color(xyz-d50 1 0.5 0.2)", "[CIE XYZ D50 all numbers]"); +test_computed_value("color", "color(xyz-d50 100% 50% 20%)", "color(xyz-d50 1 0.5 0.2)", "[CIE XYZ D50 all percent]"); +test_computed_value("color", "color(xyz-d50 100% 0.5 20%)", "color(xyz-d50 1 0.5 0.2)", "[CIE XYZ D50 mixed number and percent]"); +test_computed_value("color", "color(xyz-d50 1.00 50% 0.2)", "color(xyz-d50 1 0.5 0.2)", "[CIE XYZ D50 mixed number and percent 2]"); +test_computed_value("color", "color(xyz-d50 none none none)", "color(xyz-d50 none none none)", "[CIE XYZ D50 all none]"); +test_computed_value("color", "color(xyz-d50 1.00 none 0.2)", "color(xyz-d50 1 none 0.2)", "[CIE XYZ D50 number and none]"); +test_computed_value("color", "color(xyz-d50 100% none 20%)", "color(xyz-d50 1 none 0.2)", "[CIE XYZ D50 percent and none]"); +test_computed_value("color", "color(xyz-d50 100% none 0.2)", "color(xyz-d50 1 none 0.2)", "[CIE XYZ D50 number, percent and none]"); + +// non-unity alpha, CIE XYZ D50 in color() +test_computed_value("color", "color(xyz-d50 1.00 0.50 0.200 / 0.6)", "color(xyz-d50 1 0.5 0.2 / 0.6)", "[CIE XYZ D50 with alpha, all numbers]"); +test_computed_value("color", "color(xyz-d50 100% 50% 20% / 60%)", "color(xyz-d50 1 0.5 0.2 / 0.6)", "[CIE XYZ D50 with alpha, all percent]"); +test_computed_value("color", "color(xyz-d50 100% 0.5 20% / 0.6)", "color(xyz-d50 1 0.5 0.2 / 0.6)", "[CIE XYZ D50 with alpha, mixed number and percent]"); +test_computed_value("color", "color(xyz-d50 1.00 50% 0.2 / 60%)", "color(xyz-d50 1 0.5 0.2 / 0.6)", "[CIE XYZ D50 with alpha, mixed number and percent 2]"); +test_computed_value("color", "color(xyz-d50 none none none / none)", "color(xyz-d50 none none none / none)", "[CIE XYZ D50 with alpha, all none]"); +test_computed_value("color", "color(xyz-d50 1.00 none 0.2 / none)", "color(xyz-d50 1 none 0.2 / none)", "[CIE XYZ D50 with alpha, number and none]"); +test_computed_value("color", "color(xyz-d50 100% none 20% / 30%)", "color(xyz-d50 1 none 0.2 / 0.3)", "[CIE XYZ D50 with alpha, percent and none]"); +test_computed_value("color", "color(xyz-d50 100% none 0.2 / 23.7%)", "color(xyz-d50 1 none 0.2 / 0.237)", "[CIE XYZ D50 with alpha, number, percent and none]"); + +// Opaque CIE XYZ D65 in color() +test_computed_value("color", "color(xyz-d65 1.00 0.50 0.200)", "color(xyz-d65 1 0.5 0.2)", "[CIE XYZ D65 all numbers]"); +test_computed_value("color", "color(xyz-d65 100% 50% 20%)", "color(xyz-d65 1 0.5 0.2)", "[CIE XYZ D65 all percent]"); +test_computed_value("color", "color(xyz-d65 100% 0.5 20%)", "color(xyz-d65 1 0.5 0.2)", "[CIE XYZ D65 mixed number and percent]"); +test_computed_value("color", "color(xyz-d65 1.00 50% 0.2)", "color(xyz-d65 1 0.5 0.2)", "[CIE XYZ D65 mixed number and percent 2]"); +test_computed_value("color", "color(xyz-d65 none none none)", "color(xyz-d65 none none none)", "[CIE XYZ D65 all none]"); +test_computed_value("color", "color(xyz-d65 1.00 none 0.2)", "color(xyz-d65 1 none 0.2)", "[CIE XYZ D65 number and none]"); +test_computed_value("color", "color(xyz-d65 100% none 20%)", "color(xyz-d65 1 none 0.2)", "[CIE XYZ D65 percent and none]"); +test_computed_value("color", "color(xyz-d65 100% none 0.2)", "color(xyz-d65 1 none 0.2)", "[CIE XYZ D65 number, percent and none]"); + +// non-unity alpha, CIE XYZ D65 in color() +test_computed_value("color", "color(xyz-d65 1.00 0.50 0.200 / 0.6)", "color(xyz-d65 1 0.5 0.2 / 0.6)", "[CIE XYZ D65 with alpha, all numbers]"); +test_computed_value("color", "color(xyz-d65 100% 50% 20% / 60%)", "color(xyz-d65 1 0.5 0.2 / 0.6)", "[CIE XYZ D65 with alpha, all percent]"); +test_computed_value("color", "color(xyz-d65 100% 0.5 20% / 0.6)", "color(xyz-d65 1 0.5 0.2 / 0.6)", "[CIE XYZ D65 with alpha, mixed number and percent]"); +test_computed_value("color", "color(xyz-d65 1.00 50% 0.2 / 60%)", "color(xyz-d65 1 0.5 0.2 / 0.6)", "[CIE XYZ D65 with alpha, mixed number and percent 2]"); +test_computed_value("color", "color(xyz-d65 none none none / none)", "color(xyz-d65 none none none / none)", "[CIE XYZ D65 with alpha, all none]"); +test_computed_value("color", "color(xyz-d65 1.00 none 0.2 / none)", "color(xyz-d65 1 none 0.2 / none)", "[CIE XYZ D65 with alpha, number and none]"); +test_computed_value("color", "color(xyz-d65 100% none 20% / 30%)", "color(xyz-d65 1 none 0.2 / 0.3)", "[CIE XYZ D65 with alpha, percent and none]"); +test_computed_value("color", "color(xyz-d65 100% none 0.2 / 23.7%)", "color(xyz-d65 1 none 0.2 / 0.237)", "[CIE XYZ D65 with alpha, number, percent and none]"); + +// Opaque CIE XYZ (implicit D65) in color() +test_computed_value("color", "color(xyz 1.00 0.50 0.200)", "color(xyz-d65 1 0.5 0.2)", "[CIE XYZ (implicit D65) all numbers]"); +test_computed_value("color", "color(xyz 100% 50% 20%)", "color(xyz-d65 1 0.5 0.2)", "[CIE XYZ (implicit D65) all percent]"); +test_computed_value("color", "color(xyz 100% 0.5 20%)", "color(xyz-d65 1 0.5 0.2)", "[CIE XYZ (implicit D65) mixed number and percent]"); +test_computed_value("color", "color(xyz 1.00 50% 0.2)", "color(xyz-d65 1 0.5 0.2)", "[CIE XYZ (implicit D65) mixed number and percent 2]"); +test_computed_value("color", "color(xyz none none none)", "color(xyz-d65 none none none)", "[CIE XYZ (implicit D65) all none]"); +test_computed_value("color", "color(xyz 1.00 none 0.2)", "color(xyz-d65 1 none 0.2)", "[CIE XYZ (implicit D65) number and none]"); +test_computed_value("color", "color(xyz 100% none 20%)", "color(xyz-d65 1 none 0.2)", "[CIE XYZ (implicit D65) percent and none]"); +test_computed_value("color", "color(xyz 100% none 0.2)", "color(xyz-d65 1 none 0.2)", "[CIE XYZ (implicit D65) number, percent and none]"); + +// non-unity alpha, CIE XYZ (implicit D65) in color() +test_computed_value("color", "color(xyz 1.00 0.50 0.200 / 0.6)", "color(xyz-d65 1 0.5 0.2 / 0.6)", "[CIE XYZ (implicit D65) with alpha, all numbers]"); +test_computed_value("color", "color(xyz 100% 50% 20% / 60%)", "color(xyz-d65 1 0.5 0.2 / 0.6)", "[CIE XYZ (implicit D65) with alpha, all percent]"); +test_computed_value("color", "color(xyz 100% 0.5 20% / 0.6)", "color(xyz-d65 1 0.5 0.2 / 0.6)", "[CIE XYZ (implicit D65) with alpha, mixed number and percent]"); +test_computed_value("color", "color(xyz 1.00 50% 0.2 / 60%)", "color(xyz-d65 1 0.5 0.2 / 0.6)", "[CIE XYZ (implicit D65) with alpha, mixed number and percent 2]"); +test_computed_value("color", "color(xyz none none none / none)", "color(xyz-d65 none none none / none)", "[CIE XYZ (implicit D65) with alpha, all none]"); +test_computed_value("color", "color(xyz 1.00 none 0.2 / none)", "color(xyz-d65 1 none 0.2 / none)", "[CIE XYZ (implicit D65) with alpha, number and none]"); +test_computed_value("color", "color(xyz 100% none 20% / 30%)", "color(xyz-d65 1 none 0.2 / 0.3)", "[CIE XYZ (implicit D65) with alpha, percent and none]"); +test_computed_value("color", "color(xyz 100% none 0.2 / 23.7%)", "color(xyz-d65 1 none 0.2 / 0.237)", "[CIE XYZ (implicit D65) with alpha, number, percent and none]"); + +// Tests basic parsing of the color function +test_computed_value("color", "color(srgb 1 1 1)", "color(srgb 1 1 1)", "[Basic sRGB white]"); +test_computed_value("color", "color( srgb 1 1 1 )", "color(srgb 1 1 1)", "[White with lots of space]"); +test_computed_value("color", "color(srgb 0.25 0.5 0.75)", "color(srgb 0.25 0.5 0.75)", "[sRGB color]"); +test_computed_value("color", "color(SrGb 0.25 0.5 0.75)", "color(srgb 0.25 0.5 0.75)", "[Different case for sRGB]"); +test_computed_value("color", "color(srgb 1.00000 0.500000 0.20)", "color(srgb 1 0.5 0.2)", "[sRGB color with unnecessary decimals]"); +test_computed_value("color", "color(srgb 1 1 1 / 0.5)", "color(srgb 1 1 1 / 0.5)", "[sRGB white with 0.5 alpha]"); +test_computed_value("color", "color(srgb 1 1 1 / 0)", "color(srgb 1 1 1 / 0)", "[sRGB white with 0 alpha]"); +test_computed_value("color", "color(srgb 1 1 1 / 50%)", "color(srgb 1 1 1 / 0.5)", "[sRGB white with 50% alpha]"); +test_computed_value("color", "color(srgb 1 1 1 / 0%)", "color(srgb 1 1 1 / 0)", "[sRGB white with 0% alpha]"); +test_computed_value("color", "color(display-p3 0.6 0.7 0.8)", "color(display-p3 0.6 0.7 0.8)", "[Display P3 color]"); +test_computed_value("color", "color(dIspLaY-P3 0.6 0.7 0.8)", "color(display-p3 0.6 0.7 0.8)", "[Different case for Display P3]"); + +test_computed_value("color", "color(srgb -0.25 0.5 0.75)", "color(srgb -0.25 0.5 0.75)", "[sRGB color with negative component should not clamp to 0]"); +test_computed_value("color", "color(srgb 0.25 1.5 0.75)", "color(srgb 0.25 1.5 0.75)", "[sRGB color with component > 1 should not clamp]"); +test_computed_value("color", "color(display-p3 0.5 -199 0.75)", "color(display-p3 0.5 -199 0.75)", "[Display P3 color with negative component should not clamp to 0]"); +test_computed_value("color", "color(display-p3 184 1.00001 1103)", "color(display-p3 184 1.00001 1103)", "[Display P3 color with component > 1 should not clamp]"); +test_computed_value("color", "color(srgb 0.1 0.2 0.3 / 1.9)", "color(srgb 0.1 0.2 0.3)", "[Alpha > 1 should clamp]"); +test_computed_value("color", "color(srgb 1 1 1 / -0.2)", "color(srgb 1 1 1 / 0)", "[Negative alpha should clamp]"); +</script> diff --git a/testing/web-platform/tests/css/css-color/parsing/color-computed-color-mix-function.html b/testing/web-platform/tests/css/css-color/parsing/color-computed-color-mix-function.html new file mode 100644 index 0000000000..f0e2f6cce0 --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/color-computed-color-mix-function.html @@ -0,0 +1,477 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 5: Computation of colors using color-mix() function syntax</title> +<link rel="author" title="Sam Weinig" href="mailto:weinig@apple.com"> +<link rel="help" href="https://drafts.csswg.org/css-color-5/#color-mix"> +<link rel="help" href="https://drafts.csswg.org/css-color-5/#resolving-mix"> +<link rel="help" href="https://drafts.csswg.org/css-color-5/#serial-color-mix"> +<meta name="assert" content="computed value of color-mix() works for all interpolation methods"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/computed-testcommon.js"></script> +<script src="/css/support/color-testcommon.js"></script> +</head> +<body> +<div id="target"></div> +<script> + // hsl() + fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20%), hsl(30deg 30% 40%))`, `color(srgb 0.33 0.36 0.24)`); + fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20%) 25%, hsl(30deg 30% 40%))`, `color(srgb 0.4375 0.415625 0.2625)`); + fuzzy_test_computed_color(`color-mix(in hsl, 25% hsl(120deg 10% 20%), hsl(30deg 30% 40%))`, `color(srgb 0.4375 0.415625 0.2625)`); + fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20%), 25% hsl(30deg 30% 40%))`, `color(srgb 0.240625 0.2875 0.2125)`); + fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20%), hsl(30deg 30% 40%) 25%)`, `color(srgb 0.240625 0.2875 0.2125)`); + fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20%) 25%, hsl(30deg 30% 40%) 75%)`, `color(srgb 0.4375 0.415625 0.2625)`); + fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20%) 30%, hsl(30deg 30% 40%) 90%)`, `color(srgb 0.4375 0.415625 0.2625)`); + fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20%) 12.5%, hsl(30deg 30% 40%) 37.5%)`, `color(srgb 0.4375 0.415625 0.2625 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20%) 0%, hsl(30deg 30% 40%))`, `color(srgb 0.52 0.4 0.28)`); + + fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20% / .4), hsl(30deg 30% 40% / .8))`, `color(srgb 0.372222 0.411111 0.255556 / 0.6)`); + fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20%) 25%, hsl(30deg 30% 40% / .8))`, `color(srgb 0.42346 0.402889 0.258893 / 0.85)`); + fuzzy_test_computed_color(`color-mix(in hsl, 25% hsl(120deg 10% 20% / .4), hsl(30deg 30% 40% / .8))`, `color(srgb 0.472245 0.447041 0.270612 / 0.7)`); + fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20% / .4), 25% hsl(30deg 30% 40% / .8))`, `color(srgb 0.2674 0.3304 0.2296 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20% / .4), hsl(30deg 30% 40% / .8) 25%)`, `color(srgb 0.2674 0.3304 0.2296 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20% / .4) 25%, hsl(30deg 30% 40% / .8) 75%)`, `color(srgb 0.472245 0.447041 0.270612 / 0.7)`); + fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20% / .4) 30%, hsl(30deg 30% 40% / .8) 90%)`, `color(srgb 0.472245 0.447041 0.270612 / 0.7)`); + fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20% / .4) 12.5%, hsl(30deg 30% 40% / .8) 37.5%)`, `color(srgb 0.472245 0.447041 0.270612 / 0.35)`); + fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20% / .4) 0%, hsl(30deg 30% 40% / .8))`, `color(srgb 0.52 0.4 0.28 / 0.8)`); + + fuzzy_test_computed_color(`color-mix(in hsl, transparent, hsl(30deg 30% 40%))`, `color(srgb 0.52 0.4 0.28 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in hsl, transparent 10%, hsl(30deg 30% 40%))`, `color(srgb 0.52 0.4 0.28 / 0.9)`); + fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20% / 0), hsl(30deg 30% 40%))`, `color(srgb 0.46 0.52 0.28 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 10% 20% / 0) 10%, hsl(30deg 30% 40%))`, `color(srgb 0.52 0.436 0.28 / 0.9)`); + + fuzzy_test_computed_color(`color-mix(in hsl, hsl(40deg 50% 50%), hsl(60deg 50% 50%))`, `color(srgb 0.75 0.666667 0.25)`); + fuzzy_test_computed_color(`color-mix(in hsl, hsl(60deg 50% 50%), hsl(40deg 50% 50%))`, `color(srgb 0.75 0.666667 0.25)`); + fuzzy_test_computed_color(`color-mix(in hsl, hsl(50deg 50% 50%), hsl(330deg 50% 50%))`, `color(srgb 0.75 0.333333 0.25)`); + fuzzy_test_computed_color(`color-mix(in hsl, hsl(330deg 50% 50%), hsl(50deg 50% 50%))`, `color(srgb 0.75 0.333333 0.25)`); + fuzzy_test_computed_color(`color-mix(in hsl, hsl(20deg 50% 50%), hsl(320deg 50% 50%))`, `color(srgb 0.75 0.25 0.333333)`); + fuzzy_test_computed_color(`color-mix(in hsl, hsl(320deg 50% 50%), hsl(20deg 50% 50%))`, `color(srgb 0.75 0.25 0.333333)`); + + fuzzy_test_computed_color(`color-mix(in hsl shorter hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))`, `color(srgb 0.75 0.666667 0.25)`); + fuzzy_test_computed_color(`color-mix(in hsl shorter hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))`, `color(srgb 0.75 0.666667 0.25)`); + fuzzy_test_computed_color(`color-mix(in hsl shorter hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))`, `color(srgb 0.75 0.333333 0.25)`); + fuzzy_test_computed_color(`color-mix(in hsl shorter hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))`, `color(srgb 0.75 0.333333 0.25)`); + fuzzy_test_computed_color(`color-mix(in hsl shorter hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))`, `color(srgb 0.75 0.25 0.333333)`); + fuzzy_test_computed_color(`color-mix(in hsl shorter hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))`, `color(srgb 0.75 0.25 0.333333)`); + fuzzy_test_computed_color(`color-mix(in hsl shorter hue, hsl(60deg 50% 50%), hsl(60deg 50% 50%))`, `color(srgb 0.75 0.75 0.25)`); + + fuzzy_test_computed_color(`color-mix(in hsl longer hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))`, `color(srgb 0.25 0.333333 0.75)`); + fuzzy_test_computed_color(`color-mix(in hsl longer hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))`, `color(srgb 0.25 0.333333 0.75)`); + fuzzy_test_computed_color(`color-mix(in hsl longer hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))`, `color(srgb 0.25 0.666667 0.75)`); + fuzzy_test_computed_color(`color-mix(in hsl longer hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))`, `color(srgb 0.25 0.666667 0.75)`); + fuzzy_test_computed_color(`color-mix(in hsl longer hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))`, `color(srgb 0.25 0.75 0.666667)`); + fuzzy_test_computed_color(`color-mix(in hsl longer hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))`, `color(srgb 0.25 0.75 0.666667)`); + fuzzy_test_computed_color(`color-mix(in hsl longer hue, hsl(60deg 50% 50%), hsl(60deg 50% 50%))`, `color(srgb 0.25 0.25 0.75)`); + + fuzzy_test_computed_color(`color-mix(in hsl increasing hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))`, `color(srgb 0.75 0.666667 0.25)`); + fuzzy_test_computed_color(`color-mix(in hsl increasing hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))`, `color(srgb 0.25 0.333333 0.75)`); + fuzzy_test_computed_color(`color-mix(in hsl increasing hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))`, `color(srgb 0.25 0.666667 0.75)`); + fuzzy_test_computed_color(`color-mix(in hsl increasing hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))`, `color(srgb 0.75 0.333333 0.25)`); + fuzzy_test_computed_color(`color-mix(in hsl increasing hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))`, `color(srgb 0.25 0.75 0.666667)`); + fuzzy_test_computed_color(`color-mix(in hsl increasing hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))`, `color(srgb 0.75 0.25 0.333333)`); + fuzzy_test_computed_color(`color-mix(in hsl increasing hue, hsl(60deg 50% 50%), hsl(60deg 50% 50%))`, `color(srgb 0.75 0.75 0.25)`); + + fuzzy_test_computed_color(`color-mix(in hsl decreasing hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))`, `color(srgb 0.25 0.333333 0.75)`); + fuzzy_test_computed_color(`color-mix(in hsl decreasing hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))`, `color(srgb 0.75 0.666667 0.25)`); + fuzzy_test_computed_color(`color-mix(in hsl decreasing hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))`, `color(srgb 0.75 0.333333 0.25)`); + fuzzy_test_computed_color(`color-mix(in hsl decreasing hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))`, `color(srgb 0.25 0.666667 0.75)`); + fuzzy_test_computed_color(`color-mix(in hsl decreasing hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))`, `color(srgb 0.75 0.25 0.333333)`); + fuzzy_test_computed_color(`color-mix(in hsl decreasing hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))`, `color(srgb 0.25 0.75 0.666667)`); + fuzzy_test_computed_color(`color-mix(in hsl decreasing hue, hsl(60deg 50% 50%), hsl(60deg 50% 50%))`, `color(srgb 0.75 0.75 0.25)`); + + fuzzy_test_computed_color(`color-mix(in hsl, hsl(none none none), hsl(none none none))`, `color(srgb 0 0 0)`); + fuzzy_test_computed_color(`color-mix(in hsl, hsl(none none none), hsl(30deg 40% 80%))`, `color(srgb 0.88 0.8 0.72)`); + fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 20% 40%), hsl(none none none))`, `color(srgb 0.32 0.48 0.32)`); + fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 20% none), hsl(30deg 40% 60%))`, `color(srgb 0.66 0.72 0.48)`); + fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 20% 40%), hsl(30deg 20% none))`, `color(srgb 0.44 0.48 0.32)`); + fuzzy_test_computed_color(`color-mix(in hsl, hsl(none 20% 40%), hsl(30deg none 80%))`, `color(srgb 0.68 0.6 0.52)`); + + fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 40% 40% / none), hsl(0deg 40% 40%))`, `color(srgb 0.56 0.56 0.24)`); + fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 40% 40% / none), hsl(0deg 40% 40% / 0.5))`, `color(srgb 0.56 0.56 0.24 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in hsl, hsl(120deg 40% 40% / none), hsl(0deg 40% 40% / none))`, `color(srgb 0.56 0.56 0.24 / none)`); + + fuzzy_test_computed_color(`color-mix(in hsl, hsl(30deg 40% 80% / 25%) 0%, hsl(90deg none none / none))`, `color(srgb 0.8 0.88 0.72 / 0.25)`); + fuzzy_test_computed_color(`color-mix(in hsl, hsl(30deg 40% 80% / 25%) 0%, hsl(none 50% none / none))`, `color(srgb 0.9 0.8 0.7 / 0.25)`); + fuzzy_test_computed_color(`color-mix(in hsl, hsl(30deg 40% 80% / 25%) 0%, hsl(none none 50% / none))`, `color(srgb 0.7 0.5 0.3 / 0.25)`); + fuzzy_test_computed_color(`color-mix(in hsl, hsl(30deg 40% 80% / 25%) 0%, hsl(90deg 50% none / none))`, `color(srgb 0.8 0.9 0.7 / 0.25)`); + fuzzy_test_computed_color(`color-mix(in hsl, hsl(30deg 40% 80% / 25%) 0%, hsl(none none none / 0.5))`, `color(srgb 0.88 0.8 0.72 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in hsl, hsl(30deg 40% 80% / 25%) 0%, hsl(90deg none none / 0.5))`, `color(srgb 0.8 0.88 0.72 / 0.5)`); + + // hwb() + fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20%), hwb(30deg 30% 40%))`, `color(srgb 0.575 0.7 0.2)`); + fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20%) 25%, hwb(30deg 30% 40%))`, `color(srgb 0.65 0.6 0.25)`); + fuzzy_test_computed_color(`color-mix(in hwb, 25% hwb(120deg 10% 20%), hwb(30deg 30% 40%))`, `color(srgb 0.65 0.6 0.25)`); + fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20%), 25% hwb(30deg 30% 40%))`, `color(srgb 0.375 0.75 0.15)`); + fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20%), hwb(30deg 30% 40%) 25%)`, `color(srgb 0.375 0.75 0.15)`); + fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20%) 25%, hwb(30deg 30% 40%) 75%)`, `color(srgb 0.65 0.6 0.25)`); + fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20%) 30%, hwb(30deg 30% 40%) 90%)`, `color(srgb 0.65 0.6 0.25)`); + fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20%) 12.5%, hwb(30deg 30% 40%) 37.5%)`, `color(srgb 0.65 0.6 0.25 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20%) 0%, hwb(30deg 30% 40%))`, `color(srgb 0.6 0.45 0.3)`); + + fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20% / .4), hwb(30deg 30% 40% / .8))`, `color(srgb 0.558333 0.666667 0.233333 / 0.6)`); + fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20% / .4) 25%, hwb(30deg 30% 40% / .8))`, `color(srgb 0.628571 0.583929 0.271429 / 0.7)`); + fuzzy_test_computed_color(`color-mix(in hwb, 25% hwb(120deg 10% 20% / .4), hwb(30deg 30% 40% / .8))`, `color(srgb 0.628571 0.583929 0.271429 / 0.7)`); + fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20%), 25% hwb(30deg 30% 40% / .8))`, `color(srgb 0.373026 0.757895 0.142105 / 0.95)`); + fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20% / .4), hwb(30deg 30% 40% / .8) 25%)`, `color(srgb 0.3825 0.72 0.18 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20% / .4) 25%, hwb(30deg 30% 40% / .8) 75%)`, `color(srgb 0.628571 0.583929 0.271429 / 0.7)`); + fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20% / .4) 30%, hwb(30deg 30% 40% / .8) 90%)`, `color(srgb 0.628571 0.583929 0.271429 / 0.7)`); + fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20% / .4) 12.5%, hwb(30deg 30% 40% / .8) 37.5%)`, `color(srgb 0.628571 0.583929 0.271429 / 0.35)`); + fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20% / .4) 0%, hwb(30deg 30% 40% / .8))`, `color(srgb 0.6 0.45 0.3 / 0.8)`); + + fuzzy_test_computed_color(`color-mix(in hwb, transparent, hwb(30deg 30% 40%))`, `color(srgb 0.6 0.45 0.3 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in hwb, transparent 10%, hwb(30deg 30% 40%))`, `color(srgb 0.6 0.45 0.3 / 0.9)`); + fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20% / 0), hwb(30deg 30% 40%))`, `color(srgb 0.525 0.6 0.3 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20% / 0) 10%, hwb(30deg 30% 40%))`, `color(srgb 0.6 0.495 0.3 / 0.9)`); + + fuzzy_test_computed_color(`color-mix(in hwb, hwb(40deg 30% 40%), hwb(60deg 30% 40%))`, `color(srgb 0.6 0.55 0.3)`); + fuzzy_test_computed_color(`color-mix(in hwb, hwb(60deg 30% 40%), hwb(40deg 30% 40%))`, `color(srgb 0.6 0.55 0.3)`); + fuzzy_test_computed_color(`color-mix(in hwb, hwb(50deg 30% 40%), hwb(330deg 30% 40%))`, `color(srgb 0.6 0.35 0.3)`); + fuzzy_test_computed_color(`color-mix(in hwb, hwb(330deg 30% 40%), hwb(50deg 30% 40%))`, `color(srgb 0.6 0.35 0.3)`); + fuzzy_test_computed_color(`color-mix(in hwb, hwb(20deg 30% 40%), hwb(320deg 30% 40%))`, `color(srgb 0.6 0.3 0.35)`); + fuzzy_test_computed_color(`color-mix(in hwb, hwb(320deg 30% 40%), hwb(20deg 30% 40%))`, `color(srgb 0.6 0.3 0.35)`); + + fuzzy_test_computed_color(`color-mix(in hwb shorter hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))`, `color(srgb 0.6 0.55 0.3)`); + fuzzy_test_computed_color(`color-mix(in hwb shorter hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))`, `color(srgb 0.6 0.55 0.3)`); + fuzzy_test_computed_color(`color-mix(in hwb shorter hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))`, `color(srgb 0.6 0.35 0.3)`); + fuzzy_test_computed_color(`color-mix(in hwb shorter hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))`, `color(srgb 0.6 0.35 0.3)`); + fuzzy_test_computed_color(`color-mix(in hwb shorter hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))`, `color(srgb 0.6 0.3 0.35)`); + fuzzy_test_computed_color(`color-mix(in hwb shorter hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))`, `color(srgb 0.6 0.3 0.35)`); + + fuzzy_test_computed_color(`color-mix(in hwb longer hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))`, `color(srgb 0.3 0.35 0.6)`); + fuzzy_test_computed_color(`color-mix(in hwb longer hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))`, `color(srgb 0.3 0.35 0.6)`); + fuzzy_test_computed_color(`color-mix(in hwb longer hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))`, `color(srgb 0.3 0.55 0.6)`); + fuzzy_test_computed_color(`color-mix(in hwb longer hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))`, `color(srgb 0.3 0.55 0.6)`); + fuzzy_test_computed_color(`color-mix(in hwb longer hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))`, `color(srgb 0.3 0.6 0.55)`); + fuzzy_test_computed_color(`color-mix(in hwb longer hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))`, `color(srgb 0.3 0.6 0.55)`); + + fuzzy_test_computed_color(`color-mix(in hwb increasing hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))`, `color(srgb 0.6 0.55 0.3)`); + fuzzy_test_computed_color(`color-mix(in hwb increasing hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))`, `color(srgb 0.3 0.35 0.6)`); + fuzzy_test_computed_color(`color-mix(in hwb increasing hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))`, `color(srgb 0.3 0.55 0.6)`); + fuzzy_test_computed_color(`color-mix(in hwb increasing hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))`, `color(srgb 0.6 0.35 0.3)`); + fuzzy_test_computed_color(`color-mix(in hwb increasing hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))`, `color(srgb 0.3 0.6 0.55)`); + fuzzy_test_computed_color(`color-mix(in hwb increasing hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))`, `color(srgb 0.6 0.3 0.35)`); + + fuzzy_test_computed_color(`color-mix(in hwb decreasing hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))`, `color(srgb 0.3 0.35 0.6)`); + fuzzy_test_computed_color(`color-mix(in hwb decreasing hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))`, `color(srgb 0.6 0.55 0.3)`); + fuzzy_test_computed_color(`color-mix(in hwb decreasing hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))`, `color(srgb 0.6 0.35 0.3)`); + fuzzy_test_computed_color(`color-mix(in hwb decreasing hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))`, `color(srgb 0.3 0.55 0.6)`); + fuzzy_test_computed_color(`color-mix(in hwb decreasing hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))`, `color(srgb 0.6 0.3 0.35)`); + fuzzy_test_computed_color(`color-mix(in hwb decreasing hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))`, `color(srgb 0.3 0.6 0.55)`); + + fuzzy_test_computed_color(`color-mix(in hwb, hwb(none none none), hwb(none none none))`, `color(srgb 1 0 0)`); + fuzzy_test_computed_color(`color-mix(in hwb, hwb(none none none), hwb(30deg 30% 40%))`, `color(srgb 0.6 0.45 0.3)`); + fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20%), hwb(none none none))`, `color(srgb 0.1 0.8 0.1)`); + fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% none), hwb(30deg 30% 40%))`, `color(srgb 0.5 0.6 0.2)`); + fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20%), hwb(30deg 30% none))`, `color(srgb 0.65 0.8 0.2)`); + fuzzy_test_computed_color(`color-mix(in hwb, hwb(none 10% 20%), hwb(30deg none 40%))`, `color(srgb 0.7 0.4 0.1)`); + fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20% / none), hwb(30deg 30% 40%))`, `color(srgb 0.575 0.7 0.2)`); + fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20% / none), hwb(30deg 30% 40% / 0.5))`, `color(srgb 0.575 0.7 0.2 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in hwb, hwb(120deg 10% 20% / none), hwb(30deg 30% 40% / none))`, `color(srgb 0.575 0.7 0.2 / none)`); + + fuzzy_test_computed_color(`color-mix(in hwb, hwb(30deg 30% 40% / 25%) 0%, hwb(90deg none none / none))`, `color(srgb 0.45 0.6 0.3 / 0.25)`); + fuzzy_test_computed_color(`color-mix(in hwb, hwb(30deg 30% 40% / 25%) 0%, hwb(none 50% none / none))`, `color(srgb 0.6 0.55 0.5 / 0.25)`); + fuzzy_test_computed_color(`color-mix(in hwb, hwb(30deg 30% 40% / 25%) 0%, hwb(none none 50% / none))`, `color(srgb 0.5 0.4 0.3 / 0.25)`); + fuzzy_test_computed_color(`color-mix(in hwb, hwb(30deg 30% 40% / 25%) 0%, hwb(90deg 50% none / none))`, `color(srgb 0.55 0.6 0.5 / 0.25)`); + fuzzy_test_computed_color(`color-mix(in hwb, hwb(30deg 30% 40% / 25%) 0%, hwb(none none none / 0.5))`, `color(srgb 0.6 0.45 0.3 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in hwb, hwb(30deg 30% 40% / 25%) 0%, hwb(90deg none none / 0.5))`, `color(srgb 0.45 0.6 0.3 / 0.5)`); + + // lch() + fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg), lch(50 60 70deg))`, `lch(30 40 50)`); + fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg) 25%, lch(50 60 70deg))`, `lch(40 50 60)`); + fuzzy_test_computed_color(`color-mix(in lch, 25% lch(10 20 30deg), lch(50 60 70deg))`, `lch(40 50 60)`); + fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg), 25% lch(50 60 70deg))`, `lch(20 30 40)`); + fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg), lch(50 60 70deg) 25%)`, `lch(20 30 40)`); + fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg) 25%, lch(50 60 70deg) 75%)`, `lch(40 50 60)`); + fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg) 30%, lch(50 60 70deg) 90%)`, `lch(40 50 60)`); // Scale down > 100% sum. + fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg) 12.5%, lch(50 60 70deg) 37.5%)`, `lch(40 50 60 / 0.5)`); // Scale up < 100% sum, causes alpha multiplication. + fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg) 0%, lch(50 60 70deg))`, `lch(50 60 70)`); + + fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg / .4), lch(50 60 70deg / .8))`, `lch(36.666664 46.666664 50 / 0.6)`); + fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg / .4) 25%, lch(50 60 70deg / .8))`, `lch(44.285713 54.285717 60 / 0.7)`); + fuzzy_test_computed_color(`color-mix(in lch, 25% lch(10 20 30deg / .4), lch(50 60 70deg / .8))`, `lch(44.285713 54.285717 60 / 0.7)`); + fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg / .4), 25% lch(50 60 70deg / .8))`, `lch(26 36 40 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg / .4), lch(50 60 70deg / .8) 25%)`, `lch(26 36 40 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg / .4) 25%, lch(50 60 70deg / .8) 75%)`, `lch(44.285713 54.285717 60 / 0.7)`); + fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg / .4) 30%, lch(50 60 70deg / .8) 90%)`, `lch(44.285713 54.285717 60 / 0.7)`); // Scale down > 100% sum. + fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg / .4) 12.5%, lch(50 60 70deg / .8) 37.5%)`, `lch(44.285713 54.285717 60 / 0.35)`); // Scale up < 100% sum, causes alpha multiplication. + fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg / .4) 0%, lch(50 60 70deg / .8))`, `lch(50 60 70 / 0.8)`); + + fuzzy_test_computed_color(`color-mix(in lch, transparent, lch(0.3 0.4 30deg))`, `lch(0.3 0.4 30 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in lch, transparent 10%, lch(0.3 0.4 30deg))`, `lch(0.3 0.4 30 / 0.9)`); + fuzzy_test_computed_color(`color-mix(in lch, lch(0.1 0.2 120deg / 0), lch(0.3 0.4 30deg))`, `lch(0.3 0.4 75 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in lch, lch(0.1 0.2 120deg / 0) 10%, lch(0.3 0.4 30deg))`, `lch(0.3 0.4 39 / 0.9)`); + + fuzzy_test_computed_color(`color-mix(in lch, lch(100 0 40deg), lch(100 0 60deg))`, `lch(100 0 50)`); + fuzzy_test_computed_color(`color-mix(in lch, lch(100 0 60deg), lch(100 0 40deg))`, `lch(100 0 50)`); + fuzzy_test_computed_color(`color-mix(in lch, lch(100 0 50deg), lch(100 0 330deg))`, `lch(100 0 10)`); + fuzzy_test_computed_color(`color-mix(in lch, lch(100 0 330deg), lch(100 0 50deg))`, `lch(100 0 10)`); + fuzzy_test_computed_color(`color-mix(in lch, lch(100 0 20deg), lch(100 0 320deg))`, `lch(100 0 350)`); + fuzzy_test_computed_color(`color-mix(in lch, lch(100 0 320deg), lch(100 0 20deg))`, `lch(100 0 350)`); + + fuzzy_test_computed_color(`color-mix(in lch shorter hue, lch(100 0 40deg), lch(100 0 60deg))`, `lch(100 0 50)`); + fuzzy_test_computed_color(`color-mix(in lch shorter hue, lch(100 0 60deg), lch(100 0 40deg))`, `lch(100 0 50)`); + fuzzy_test_computed_color(`color-mix(in lch shorter hue, lch(100 0 50deg), lch(100 0 330deg))`, `lch(100 0 10)`); + fuzzy_test_computed_color(`color-mix(in lch shorter hue, lch(100 0 330deg), lch(100 0 50deg))`, `lch(100 0 10)`); + fuzzy_test_computed_color(`color-mix(in lch shorter hue, lch(100 0 20deg), lch(100 0 320deg))`, `lch(100 0 350)`); + fuzzy_test_computed_color(`color-mix(in lch shorter hue, lch(100 0 320deg), lch(100 0 20deg))`, `lch(100 0 350)`); + + fuzzy_test_computed_color(`color-mix(in lch longer hue, lch(100 0 40deg), lch(100 0 60deg))`, `lch(100 0 230)`); + fuzzy_test_computed_color(`color-mix(in lch longer hue, lch(100 0 60deg), lch(100 0 40deg))`, `lch(100 0 230)`); + fuzzy_test_computed_color(`color-mix(in lch longer hue, lch(100 0 50deg), lch(100 0 330deg))`, `lch(100 0 190)`); + fuzzy_test_computed_color(`color-mix(in lch longer hue, lch(100 0 330deg), lch(100 0 50deg))`, `lch(100 0 190)`); + fuzzy_test_computed_color(`color-mix(in lch longer hue, lch(100 0 20deg), lch(100 0 320deg))`, `lch(100 0 170)`); + fuzzy_test_computed_color(`color-mix(in lch longer hue, lch(100 0 320deg), lch(100 0 20deg))`, `lch(100 0 170)`); + + fuzzy_test_computed_color(`color-mix(in lch increasing hue, lch(100 0 40deg), lch(100 0 60deg))`, `lch(100 0 50)`); + fuzzy_test_computed_color(`color-mix(in lch increasing hue, lch(100 0 60deg), lch(100 0 40deg))`, `lch(100 0 230)`); + fuzzy_test_computed_color(`color-mix(in lch increasing hue, lch(100 0 50deg), lch(100 0 330deg))`, `lch(100 0 190)`); + fuzzy_test_computed_color(`color-mix(in lch increasing hue, lch(100 0 330deg), lch(100 0 50deg))`, `lch(100 0 10)`); + fuzzy_test_computed_color(`color-mix(in lch increasing hue, lch(100 0 20deg), lch(100 0 320deg))`, `lch(100 0 170)`); + fuzzy_test_computed_color(`color-mix(in lch increasing hue, lch(100 0 320deg), lch(100 0 20deg))`, `lch(100 0 350)`); + + fuzzy_test_computed_color(`color-mix(in lch decreasing hue, lch(100 0 40deg), lch(100 0 60deg))`, `lch(100 0 230)`); + fuzzy_test_computed_color(`color-mix(in lch decreasing hue, lch(100 0 60deg), lch(100 0 40deg))`, `lch(100 0 50)`); + fuzzy_test_computed_color(`color-mix(in lch decreasing hue, lch(100 0 50deg), lch(100 0 330deg))`, `lch(100 0 10)`); + fuzzy_test_computed_color(`color-mix(in lch decreasing hue, lch(100 0 330deg), lch(100 0 50deg))`, `lch(100 0 190)`); + fuzzy_test_computed_color(`color-mix(in lch decreasing hue, lch(100 0 20deg), lch(100 0 320deg))`, `lch(100 0 350)`); + fuzzy_test_computed_color(`color-mix(in lch decreasing hue, lch(100 0 320deg), lch(100 0 20deg))`, `lch(100 0 170)`); + + fuzzy_test_computed_color(`color-mix(in lch, lch(none none none), lch(none none none))`, `lch(none none none)`); + fuzzy_test_computed_color(`color-mix(in lch, lch(none none none), lch(50 60 70deg))`, `lch(50 60 70)`); + fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg), lch(none none none))`, `lch(10 20 30)`); + fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 none), lch(50 60 70deg))`, `lch(30 40 70)`); + fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg), lch(50 60 none))`, `lch(30 40 30)`); + fuzzy_test_computed_color(`color-mix(in lch, lch(none 20 30deg), lch(50 none 70deg))`, `lch(50 20 50)`); + fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg / none), lch(50 60 70deg))`, `lch(30 40 50)`); + fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg / none), lch(50 60 70deg / 0.5))`, `lch(30 40 50 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in lch, lch(10 20 30deg / none), lch(50 60 70deg / none))`, `lch(30 40 50 / none)`); + + fuzzy_test_computed_color(`color-mix(in lch, lch(0.1 0.2 30deg / 25%) 0%, lch(0.5 none none / none))`, `lch(0.5 0.2 30 / 0.25)`); + fuzzy_test_computed_color(`color-mix(in lch, lch(0.1 0.2 30deg / 25%) 0%, lch(none 0.5 none / none))`, `lch(0.1 0.5 30 / 0.25)`); + fuzzy_test_computed_color(`color-mix(in lch, lch(0.1 0.2 30deg / 25%) 0%, lch(none none 90deg / none))`, `lch(0.1 0.2 90 / 0.25)`); + fuzzy_test_computed_color(`color-mix(in lch, lch(0.1 0.2 30deg / 25%) 0%, lch(0.5 0.5 none / none))`, `lch(0.5 0.5 30 / 0.25)`); + fuzzy_test_computed_color(`color-mix(in lch, lch(0.1 0.2 30deg / 25%) 0%, lch(none none none / 0.5))`, `lch(0.1 0.2 30 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in lch, lch(0.1 0.2 30deg / 25%) 0%, lch(0.5 none none / 0.5))`, `lch(0.5 0.2 30 / 0.5)`); + // Achromatic colors should have powerless hues. https://www.w3.org/TR/css-color-4/#lab-to-lch + fuzzy_test_computed_color(`color-mix(in lch, lab(50 0 0), black)`, `lch(25 0 none)`); + + // oklch() + fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg), oklch(0.5 0.6 70deg))`, `oklch(0.3 0.4 50)`); + fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg) 25%, oklch(0.5 0.6 70deg))`, `oklch(0.4 0.5 60)`); + fuzzy_test_computed_color(`color-mix(in oklch, 25% oklch(0.1 0.2 30deg), oklch(0.5 0.6 70deg))`, `oklch(0.4 0.5 60)`); + fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg), 25% oklch(0.5 0.6 70deg))`, `oklch(0.2 0.3 40)`); + fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg), oklch(0.5 0.6 70deg) 25%)`, `oklch(0.2 0.3 40)`); + fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg) 25%, oklch(0.5 0.6 70deg) 75%)`, `oklch(0.4 0.5 60)`); + fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg) 30%, oklch(0.5 0.6 70deg) 90%)`, `oklch(0.4 0.5 60)`); // Scale down > 100% sum. + fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg) 12.5%, oklch(0.5 0.6 70deg) 37.5%)`, `oklch(0.4 0.5 60 / 0.5)`); // Scale up < 100% sum, causes alpha multiplication. + fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg) 0%, oklch(0.5 0.6 70deg))`, `oklch(0.5 0.6 70)`); + + fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg / .4), oklch(0.5 0.6 70deg / .8))`, `oklch(0.36666664 0.46666664 50 / 0.6)`); + fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg / .4) 25%, oklch(0.5 0.6 70deg / .8))`, `oklch(0.44285713 0.54285717 60 / 0.7)`); + fuzzy_test_computed_color(`color-mix(in oklch, 25% oklch(0.1 0.2 30deg / .4), oklch(0.5 0.6 70deg / .8))`, `oklch(0.44285713 0.54285717 60 / 0.7)`); + fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg / .4), 25% oklch(0.5 0.6 70deg / .8))`, `oklch(0.26 0.36 40 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg / .4), oklch(0.5 0.6 70deg / .8) 25%)`, `oklch(0.26 0.36 40 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg / .4) 25%, oklch(0.5 0.6 70deg / .8) 75%)`, `oklch(0.44285713 0.54285717 60 / 0.7)`); + fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg / .4) 30%, oklch(0.5 0.6 70deg / .8) 90%)`, `oklch(0.44285713 0.54285717 60 / 0.7)`); // Scale down > 100% sum. + fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg / .4) 12.5%, oklch(0.5 0.6 70deg / .8) 37.5%)`, `oklch(0.44285713 0.54285717 60 / 0.35)`); // Scale up < 100% sum, causes alpha multiplication. + fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg / .4) 0%, oklch(0.5 0.6 70deg / .8))`, `oklch(0.5 0.6 70 / 0.8)`); + + fuzzy_test_computed_color(`color-mix(in oklch, transparent, oklch(0.3 40 30deg))`, `oklch(0.3 40 30 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in oklch, transparent 10%, oklch(0.3 40 30deg))`, `oklch(0.3 40 30 / 0.9)`); + fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 20 120deg / 0), oklch(0.3 40 30deg))`, `oklch(0.3 40 75 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 20 120deg / 0) 10%, oklch(0.3 40 30deg))`, `oklch(0.3 40 39 / 0.9)`); + + fuzzy_test_computed_color(`color-mix(in oklch, oklch(1 0 40deg), oklch(1 0 60deg))`, `oklch(1 0 50)`); + fuzzy_test_computed_color(`color-mix(in oklch, oklch(1 0 60deg), oklch(1 0 40deg))`, `oklch(1 0 50)`); + fuzzy_test_computed_color(`color-mix(in oklch, oklch(1 0 50deg), oklch(1 0 330deg))`, `oklch(1 0 10)`); + fuzzy_test_computed_color(`color-mix(in oklch, oklch(1 0 330deg), oklch(1 0 50deg))`, `oklch(1 0 10)`); + fuzzy_test_computed_color(`color-mix(in oklch, oklch(1 0 20deg), oklch(1 0 320deg))`, `oklch(1 0 350)`); + fuzzy_test_computed_color(`color-mix(in oklch, oklch(1 0 320deg), oklch(1 0 20deg))`, `oklch(1 0 350)`); + + fuzzy_test_computed_color(`color-mix(in oklch shorter hue, oklch(1 0 40deg), oklch(1 0 60deg))`, `oklch(1 0 50)`); + fuzzy_test_computed_color(`color-mix(in oklch shorter hue, oklch(1 0 60deg), oklch(1 0 40deg))`, `oklch(1 0 50)`); + fuzzy_test_computed_color(`color-mix(in oklch shorter hue, oklch(1 0 50deg), oklch(1 0 330deg))`, `oklch(1 0 10)`); + fuzzy_test_computed_color(`color-mix(in oklch shorter hue, oklch(1 0 330deg), oklch(1 0 50deg))`, `oklch(1 0 10)`); + fuzzy_test_computed_color(`color-mix(in oklch shorter hue, oklch(1 0 20deg), oklch(1 0 320deg))`, `oklch(1 0 350)`); + fuzzy_test_computed_color(`color-mix(in oklch shorter hue, oklch(1 0 320deg), oklch(1 0 20deg))`, `oklch(1 0 350)`); + + fuzzy_test_computed_color(`color-mix(in oklch longer hue, oklch(1 0 40deg), oklch(1 0 60deg))`, `oklch(1 0 230)`); + fuzzy_test_computed_color(`color-mix(in oklch longer hue, oklch(1 0 60deg), oklch(1 0 40deg))`, `oklch(1 0 230)`); + fuzzy_test_computed_color(`color-mix(in oklch longer hue, oklch(1 0 50deg), oklch(1 0 330deg))`, `oklch(1 0 190)`); + fuzzy_test_computed_color(`color-mix(in oklch longer hue, oklch(1 0 330deg), oklch(1 0 50deg))`, `oklch(1 0 190)`); + fuzzy_test_computed_color(`color-mix(in oklch longer hue, oklch(1 0 20deg), oklch(1 0 320deg))`, `oklch(1 0 170)`); + fuzzy_test_computed_color(`color-mix(in oklch longer hue, oklch(1 0 320deg), oklch(1 0 20deg))`, `oklch(1 0 170)`); + + fuzzy_test_computed_color(`color-mix(in oklch increasing hue, oklch(1 0 40deg), oklch(1 0 60deg))`, `oklch(1 0 50)`); + fuzzy_test_computed_color(`color-mix(in oklch increasing hue, oklch(1 0 60deg), oklch(1 0 40deg))`, `oklch(1 0 230)`); + fuzzy_test_computed_color(`color-mix(in oklch increasing hue, oklch(1 0 50deg), oklch(1 0 330deg))`, `oklch(1 0 190)`); + fuzzy_test_computed_color(`color-mix(in oklch increasing hue, oklch(1 0 330deg), oklch(1 0 50deg))`, `oklch(1 0 10)`); + fuzzy_test_computed_color(`color-mix(in oklch increasing hue, oklch(1 0 20deg), oklch(1 0 320deg))`, `oklch(1 0 170)`); + fuzzy_test_computed_color(`color-mix(in oklch increasing hue, oklch(1 0 320deg), oklch(1 0 20deg))`, `oklch(1 0 350)`); + + fuzzy_test_computed_color(`color-mix(in oklch decreasing hue, oklch(1 0 40deg), oklch(1 0 60deg))`, `oklch(1 0 230)`); + fuzzy_test_computed_color(`color-mix(in oklch decreasing hue, oklch(1 0 60deg), oklch(1 0 40deg))`, `oklch(1 0 50)`); + fuzzy_test_computed_color(`color-mix(in oklch decreasing hue, oklch(1 0 50deg), oklch(1 0 330deg))`, `oklch(1 0 10)`); + fuzzy_test_computed_color(`color-mix(in oklch decreasing hue, oklch(1 0 330deg), oklch(1 0 50deg))`, `oklch(1 0 190)`); + fuzzy_test_computed_color(`color-mix(in oklch decreasing hue, oklch(1 0 20deg), oklch(1 0 320deg))`, `oklch(1 0 350)`); + fuzzy_test_computed_color(`color-mix(in oklch decreasing hue, oklch(1 0 320deg), oklch(1 0 20deg))`, `oklch(1 0 170)`); + + fuzzy_test_computed_color(`color-mix(in oklch, oklch(none none none), oklch(none none none))`, `oklch(none none none)`); + fuzzy_test_computed_color(`color-mix(in oklch, oklch(none none none), oklch(0.5 0.6 70deg))`, `oklch(0.5 0.6 70)`); + fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg), oklch(none none none))`, `oklch(0.1 0.2 30)`); + fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 none), oklch(0.5 0.6 70deg))`, `oklch(0.3 0.4 70)`); + fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg), oklch(0.5 0.6 none))`, `oklch(0.3 0.4 30)`); + fuzzy_test_computed_color(`color-mix(in oklch, oklch(none 0.2 30deg), oklch(0.5 none 70deg))`, `oklch(0.5 0.2 50)`); + fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg / none), oklch(0.5 0.6 70deg))`, `oklch(0.3 0.4 50)`); + fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg / none), oklch(0.5 0.6 70deg / 0.5))`, `oklch(0.3 0.4 50 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg / none), oklch(0.5 0.6 70deg / none))`, `oklch(0.3 0.4 50 / none)`); + + fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg / 25%) 0%, oklch(0.5 none none / none))`, `oklch(0.5 0.2 30 / 0.25)`); + fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg / 25%) 0%, oklch(none 0.5 none / none))`, `oklch(0.1 0.5 30 / 0.25)`); + fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg / 25%) 0%, oklch(none none 90deg / none))`, `oklch(0.1 0.2 90 / 0.25)`); + fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg / 25%) 0%, oklch(0.5 0.5 none / none))`, `oklch(0.5 0.5 30 / 0.25)`); + fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg / 25%) 0%, oklch(none none none / 0.5))`, `oklch(0.1 0.2 30 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in oklch, oklch(0.1 0.2 30deg / 25%) 0%, oklch(0.5 none none / 0.5))`, `oklch(0.5 0.2 30 / 0.5)`); + // Achromatic colors should have powerless hues. https://www.w3.org/TR/css-color-4/#lab-to-lch + fuzzy_test_computed_color(`color-mix(in oklch, oklab(0.5 0 0), black)`, `oklch(0.25 0 none)`); + + // lab() + fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30), lab(50 60 70))`, `lab(30 40 50)`); + fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30) 25%, lab(50 60 70))`, `lab(40 50 60)`); + fuzzy_test_computed_color(`color-mix(in lab, 25% lab(10 20 30), lab(50 60 70))`, `lab(40 50 60)`); + fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30), 25% lab(50 60 70))`, `lab(20 30 40)`); + fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30), lab(50 60 70) 25%)`, `lab(20 30 40)`); + fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30) 25%, lab(50 60 70) 75%)`, `lab(40 50 60)`); + fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30) 30%, lab(50 60 70) 90%)`, `lab(40 50 60)`); // Scale down > 100% sum. + fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30) 12.5%, lab(50 60 70) 37.5%)`, `lab(40 50 60 / 0.5)`); // Scale up < 100% sum, causes alpha multiplication. + fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30) 0%, lab(50 60 70))`, `lab(50 60 70)`); + + fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30 / .4), lab(50 60 70 / .8))`, `lab(36.666664 46.666664 56.666664 / 0.6)`); + fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30 / .4) 25%, lab(50 60 70 / .8))`, `lab(44.285713 54.285717 64.28571 / 0.7)`); + fuzzy_test_computed_color(`color-mix(in lab, 25% lab(10 20 30 / .4), lab(50 60 70 / .8))`, `lab(44.285713 54.285717 64.28571 / 0.7)`); + fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30 / .4), 25% lab(50 60 70 / .8))`, `lab(26 36 46 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30 / .4), lab(50 60 70 / .8) 25%)`, `lab(26 36 46 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30 / .4) 25%, lab(50 60 70 / .8) 75%)`, `lab(44.285713 54.285717 64.28571 / 0.7)`); + fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30 / .4) 30%, lab(50 60 70 / .8) 90%)`, `lab(44.285713 54.285717 64.28571 / 0.7)`); // Scale down > 100% sum. + fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30 / .4) 12.5%, lab(50 60 70 / .8) 37.5%)`, `lab(44.285713 54.285717 64.28571 / 0.35)`); // Scale up < 100% sum, causes alpha multiplication. + fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30 / .4) 0%, lab(50 60 70 / .8))`, `lab(50 60 70 / 0.8)`); + + fuzzy_test_computed_color(`color-mix(in lab, transparent, lab(30 40 50))`, 'lab(30 40 50 / 0.5)'); + fuzzy_test_computed_color(`color-mix(in lab, transparent 10%, lab(30 40 50))`, 'lab(30 40 50 / 0.9)'); + fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30 / 0), lab(30 40 50))`, 'lab(30 40 50 / 0.5)'); + fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30 / 0) 10%, lab(30 40 50))`, 'lab(30 40 50 / 0.9)'); + + fuzzy_test_computed_color(`color-mix(in lab, lab(none none none), lab(none none none))`, `lab(none none none)`); + fuzzy_test_computed_color(`color-mix(in lab, lab(none none none), lab(50 60 70))`, `lab(50 60 70)`); + fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30), lab(none none none))`, `lab(10 20 30)`); + fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 none), lab(50 60 70))`, `lab(30 40 70)`); + fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30), lab(50 60 none))`, `lab(30 40 30)`); + fuzzy_test_computed_color(`color-mix(in lab, lab(none 20 30), lab(50 none 70))`, `lab(50 20 50)`); + fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30 / none), lab(50 60 70))`, `lab(30 40 50)`); + fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30 / none), lab(50 60 70 / 0.5))`, `lab(30 40 50 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30 / none), lab(50 60 70 / none))`, `lab(30 40 50 / none)`); + + fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30 / 25%) 0%, lab(50 none none / none))`, `lab(50 20 30 / 0.25)`); + fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30 / 25%) 0%, lab(none 50 none / none))`, `lab(10 50 30 / 0.25)`); + fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30 / 25%) 0%, lab(none none 90 / none))`, `lab(10 20 90 / 0.25)`); + fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30 / 25%) 0%, lab(50 50 none / none))`, `lab(50 50 30 / 0.25)`); + fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30 / 25%) 0%, lab(none none none / 0.5))`, `lab(10 20 30 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in lab, lab(10 20 30 / 25%) 0%, lab(50 none none / 0.5))`, `lab(50 20 30 / 0.5)`); + + // oklab() + fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3), oklab(0.5 0.6 0.7))`, `oklab(0.3 0.4 0.5)`); + fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3) 25%, oklab(0.5 0.6 0.7))`, `oklab(0.4 0.5 0.6)`); + fuzzy_test_computed_color(`color-mix(in oklab, 25% oklab(0.1 0.2 0.3), oklab(0.5 0.6 0.7))`, `oklab(0.4 0.5 0.6)`); + fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3), 25% oklab(0.5 0.6 0.7))`, `oklab(0.2 0.3 0.4)`); + fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3), oklab(0.5 0.6 0.7) 25%)`, `oklab(0.2 0.3 0.4)`); + fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3) 25%, oklab(0.5 0.6 0.7) 75%)`, `oklab(0.4 0.5 0.6)`); + fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3) 30%, oklab(0.5 0.6 0.7) 90%)`, `oklab(0.4 0.5 0.6)`); // Scale down > 100% sum. + fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3) 12.5%, oklab(0.5 0.6 0.7) 37.5%)`, `oklab(0.4 0.5 0.6 / 0.5)`); // Scale up < 100% sum, causes alpha multiplication. + fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3) 0%, oklab(0.5 0.6 0.7))`, `oklab(0.5 0.6 0.7)`); + + fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / .4), oklab(0.5 0.6 0.7 / .8))`, `oklab(0.36666664 0.46666664 0.56666664 / 0.6)`); + fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / .4) 25%, oklab(0.5 0.6 0.7 / .8))`, `oklab(0.44285713 0.54285717 0.6428571 / 0.7)`); + fuzzy_test_computed_color(`color-mix(in oklab, 25% oklab(0.1 0.2 0.3 / .4), oklab(0.5 0.6 0.7 / .8))`, `oklab(0.44285713 0.54285717 0.6428571 / 0.7)`); + fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / .4), 25% oklab(0.5 0.6 0.7 / .8))`, `oklab(0.26 0.36 0.46 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / .4), oklab(0.5 0.6 0.7 / .8) 25%)`, `oklab(0.26 0.36 0.46 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / .4) 25%, oklab(0.5 0.6 0.7 / .8) 75%)`, `oklab(0.44285713 0.54285717 0.6428571 / 0.7)`); + fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / .4) 30%, oklab(0.5 0.6 0.7 / .8) 90%)`, `oklab(0.44285713 0.54285717 0.6428571 / 0.7)`); // Scale down > 100% sum. + fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / .4) 12.5%, oklab(0.5 0.6 0.7 / .8) 37.5%)`, `oklab(0.44285713 0.54285717 0.6428571 / 0.35)`); // Scale up < 100% sum, causes alpha multiplication. + fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / .4) 0%, oklab(0.5 0.6 0.7 / .8))`, `oklab(0.5 0.6 0.7 / 0.8)`); + + fuzzy_test_computed_color(`color-mix(in oklab, transparent, oklab(0.3 0.4 0.5))`, 'oklab(0.3 0.4 0.5 / 0.5)'); + fuzzy_test_computed_color(`color-mix(in oklab, transparent 10%, oklab(0.3 0.4 0.5))`, 'oklab(0.3 0.4 0.5 / 0.9)'); + fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / 0), oklab(0.3 0.4 0.5))`, 'oklab(0.3 0.4 0.5 / 0.5)'); + fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / 0) 10%, oklab(0.3 0.4 0.5))`, 'oklab(0.3 0.4 0.5 / 0.9)'); + + fuzzy_test_computed_color(`color-mix(in oklab, oklab(none none none), oklab(none none none))`, `oklab(none none none)`); + fuzzy_test_computed_color(`color-mix(in oklab, oklab(none none none), oklab(0.5 0.6 0.7))`, `oklab(0.5 0.6 0.7)`); + fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3), oklab(none none none))`, `oklab(0.1 0.2 0.3)`); + fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 none), oklab(0.5 0.6 0.7))`, `oklab(0.3 0.4 0.7)`); + fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3), oklab(0.5 0.6 none))`, `oklab(0.3 0.4 0.3)`); + fuzzy_test_computed_color(`color-mix(in oklab, oklab(none 0.2 0.3), oklab(0.5 none 0.7))`, `oklab(0.5 0.2 0.5)`); + fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / none), oklab(0.5 0.6 0.7))`, `oklab(0.3 0.4 0.5)`); + fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / none), oklab(0.5 0.6 0.7 / 0.5))`, `oklab(0.3 0.4 0.5 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / none), oklab(0.5 0.6 0.7 / none))`, `oklab(0.3 0.4 0.5 / none)`); + + fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / 25%) 0%, oklab(0.5 none none / none))`, `oklab(0.5 0.2 0.3 / 0.25)`); + fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / 25%) 0%, oklab(none 0.5 none / none))`, `oklab(0.1 0.5 0.3 / 0.25)`); + fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / 25%) 0%, oklab(none none 0.5 / none))`, `oklab(0.1 0.2 0.5 / 0.25)`); + fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / 25%) 0%, oklab(0.5 0.5 none / none))`, `oklab(0.5 0.5 0.3 / 0.25)`); + fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / 25%) 0%, oklab(none none none / 0.5))`, `oklab(0.1 0.2 0.3 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in oklab, oklab(0.1 0.2 0.3 / 25%) 0%, oklab(0.5 none none / 0.5))`, `oklab(0.5 0.2 0.3 / 0.5)`); + + for (const colorSpace of [ "srgb", "srgb-linear", "xyz", "xyz-d50", "xyz-d65" ]) { + const resultColorSpace = colorSpace == "xyz" ? "xyz-d65" : colorSpace; + + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3), color(${colorSpace} .5 .6 .7))`, `color(${resultColorSpace} 0.3 0.4 0.5)`); + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3) 25%, color(${colorSpace} .5 .6 .7))`, `color(${resultColorSpace} 0.4 0.5 0.6)`); + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, 25% color(${colorSpace} .1 .2 .3), color(${colorSpace} .5 .6 .7))`, `color(${resultColorSpace} 0.4 0.5 0.6)`); + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3), color(${colorSpace} .5 .6 .7) 25%)`, `color(${resultColorSpace} 0.2 0.3 0.4)`); + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3), 25% color(${colorSpace} .5 .6 .7))`, `color(${resultColorSpace} 0.2 0.3 0.4)`); + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3) 25%, color(${colorSpace} .5 .6 .7) 75%)`, `color(${resultColorSpace} 0.4 0.5 0.6)`); + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3) 30%, color(${colorSpace} .5 .6 .7) 90%)`, `color(${resultColorSpace} 0.4 0.5 0.6)`); // Scale down > 100% sum. + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3) 12.5%, color(${colorSpace} .5 .6 .7) 37.5%)`, `color(${resultColorSpace} 0.4 0.5 0.6 / 0.5)`); // Scale up < 100% sum, causes alpha multiplication. + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3) 0%, color(${colorSpace} .5 .6 .7))`, `color(${resultColorSpace} 0.5 0.6 0.7)`); + + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .5), color(${colorSpace} .5 .6 .7 / .8))`, `color(${resultColorSpace} 0.3461539 0.4461539 0.5461539 / 0.65)`); + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4) 25%, color(${colorSpace} .5 .6 .7 / .8))`, `color(${resultColorSpace} 0.44285715 0.54285717 0.64285713 / 0.7)`); + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, 25% color(${colorSpace} .1 .2 .3 / .4), color(${colorSpace} .5 .6 .7 / .8))`, `color(${resultColorSpace} 0.44285715 0.54285717 0.64285713 / 0.7)`); + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4), color(${colorSpace} .5 .6 .7 / .8) 25%)`, `color(${resultColorSpace} 0.26000002 0.36 0.46 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4), 25% color(${colorSpace} .5 .6 .7 / .8))`, `color(${resultColorSpace} 0.26000002 0.36 0.46 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4) 25%, color(${colorSpace} .5 .6 .7 / .8) 75%)`, `color(${resultColorSpace} 0.44285715 0.54285717 0.64285713 / 0.7)`); + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4) 30%, color(${colorSpace} .5 .6 .7 / .8) 90%)`, `color(${resultColorSpace} 0.44285715 0.54285717 0.64285713 / 0.7)`); // Scale down > 100% sum. + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4) 12.5%, color(${colorSpace} .5 .6 .7 / .8) 37.5%)`, `color(${resultColorSpace} 0.44285715 0.54285717 0.64285713 / 0.35)`); // Scale up < 100% sum, causes alpha multiplication. + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4) 0%, color(${colorSpace} .5 .6 .7 / .8))`, `color(${resultColorSpace} 0.5 0.6 0.7 / 0.8)`); + + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, transparent, color(${colorSpace} 0.3 0.4 0.5))`, `color(${resultColorSpace} 0.3 0.4 0.5 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, transparent 10%, color(${colorSpace} 0.3 0.4 0.5))`, `color(${resultColorSpace} 0.3 0.4 0.5 / 0.9)`); + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} 0.1 0.2 0.3 / 0), color(${colorSpace} 0.3 0.4 0.5))`, `color(${resultColorSpace} 0.3 0.4 0.5 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} 0.1 0.2 0.3 / 0) 10%, color(${colorSpace} 0.3 0.4 0.5))`, `color(${resultColorSpace} 0.3 0.4 0.5 / 0.9)`); + + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} 2 3 4 / 5), color(${colorSpace} 4 6 8 / 10))`, `color(${resultColorSpace} 3 4.5 6)`); + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} -2 -3 -4), color(${colorSpace} -4 -6 -8))`, `color(${resultColorSpace} -3 -4.5 -6)`); + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} -2 -3 -4 / -5), color(${colorSpace} -4 -6 -8 / -10))`, `color(${resultColorSpace} 0 0 0 / 0)`); + + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} none none none), color(${colorSpace} none none none))`, `color(${resultColorSpace} none none none)`); + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} none none none), color(${colorSpace} .5 .6 .7))`, `color(${resultColorSpace} 0.5 0.6 0.7)`); + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3), color(${colorSpace} none none none))`, `color(${resultColorSpace} 0.1 0.2 0.3)`); + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 none), color(${colorSpace} .5 .6 .7))`, `color(${resultColorSpace} 0.3 0.4 0.7)`); + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3), color(${colorSpace} .5 .6 none))`, `color(${resultColorSpace} 0.3 0.4 0.3)`); + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} none .2 .3), color(${colorSpace} .5 none .7))`, `color(${resultColorSpace} 0.5 0.2 0.5)`); + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / none), color(${colorSpace} .5 .6 .7))`, `color(${resultColorSpace} 0.3 0.4 0.5)`); + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / none), color(${colorSpace} .5 .6 .7 / 0.5))`, `color(${resultColorSpace} 0.3 0.4 0.5 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / none), color(${colorSpace} .5 .6 .7 / none))`, `color(${resultColorSpace} 0.3 0.4 0.5 / none)`); + + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / 25%) 0%, color(${colorSpace} 0.5 none none / none))`, `color(${resultColorSpace} 0.5 0.2 0.3 / 0.25)`); + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / 25%) 0%, color(${colorSpace} none 0.5 none / none))`, `color(${resultColorSpace} 0.1 0.5 0.3 / 0.25)`); + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / 25%) 0%, color(${colorSpace} none none 0.5 / none))`, `color(${resultColorSpace} 0.1 0.2 0.5 / 0.25)`); + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / 25%) 0%, color(${colorSpace} 0.5 0.5 none / none))`, `color(${resultColorSpace} 0.5 0.5 0.3 / 0.25)`); + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / 25%) 0%, color(${colorSpace} none none none / 50%))`, `color(${resultColorSpace} 0.1 0.2 0.3 / 0.5)`); + fuzzy_test_computed_color(`color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / 25%) 0%, color(${colorSpace} 0.5 none none / 50%))`, `color(${resultColorSpace} 0.5 0.2 0.3 / 0.5)`); + } +</script> +</body> +</html> diff --git a/testing/web-platform/tests/css/css-color/parsing/color-computed-hex-color.html b/testing/web-platform/tests/css/css-color/parsing/color-computed-hex-color.html new file mode 100644 index 0000000000..7485b34a1d --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/color-computed-hex-color.html @@ -0,0 +1,38 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 4: Computation of colors using hex color notation</title> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#hex-notation"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#resolving-sRGB-values"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#serializing-sRGB-values"> +<link rel="author" title="Chris Nardi" href="mailto:cnardi@chromium.org"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/computed-testcommon.js"></script> +</head> +<body> +<div id="container"> + <div id="target"></div> +</div> +<style> + #container { + color: rgb(255, 0, 0); + } +</style> +<script> +tests = [ + ["#fff", "rgb(255, 255, 255)", "Valid 3-digit hex"], + ["#ffff", "rgb(255, 255, 255)", "Valid 4-digit hex"], + ["#ffffff", "rgb(255, 255, 255)", "Valid 6-digit hex"], + ["#ffffffff", "rgb(255, 255, 255)", "Valid 8-digit hex"], + ["#FFCc99", "rgb(255, 204, 153)", "Valid 6-digit hex"], + ["#369", "rgb(51, 102, 153)", "Valid 3-digit hex"], +]; + +for (const test of tests) { + test_computed_value("color", test[0], test[1], test[2] ? `[${test[2]}]` : undefined); +} +</script> +</body> +</html> diff --git a/testing/web-platform/tests/css/css-color/parsing/color-computed-hsl.html b/testing/web-platform/tests/css/css-color/parsing/color-computed-hsl.html new file mode 100644 index 0000000000..3c9e01338b --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/color-computed-hsl.html @@ -0,0 +1,3769 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 4: Computation of colors using HSL notation</title> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#the-hsl-notation"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#resolving-sRGB-values"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#serializing-sRGB-values"> +<link rel="author" title="Chris Nardi" href="mailto:csnardi1@gmail.com"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/computed-testcommon.js"></script> +</head> +<body> +<div id="container"> + <div id="target"></div> +</div> +<style> + #container { + color: rgb(255, 0, 0); + } +</style> +<script> +tests = [ + ["hsl(120 30% 50%)", "rgb(89, 166, 89)"], + ["hsl(120 30% 50% / 0.5)", "rgba(89, 166, 89, 0.5)"], + ["hsl(120 30% 50% / 50%)", "rgba(89, 166, 89, 0.5)"], + ["hsl(none none none)", "rgb(0, 0, 0)"], + ["hsl(0 0% 0%)", "rgb(0, 0, 0)"], + ["hsl(none none none / none)", "rgba(0, 0, 0, 0)"], + ["hsl(0 0% 0% / 0)", "rgba(0, 0, 0, 0)"], + ["hsla(none none none)", "rgb(0, 0, 0)"], + ["hsla(0 0% 0%)", "rgb(0, 0, 0)"], + ["hsla(none none none / none)", "rgba(0, 0, 0, 0)"], + ["hsla(0 0% 0% / 0)", "rgba(0, 0, 0, 0)"], + ["hsl(120 none none)", "rgb(0, 0, 0)"], + ["hsl(120 0% 0%)", "rgb(0, 0, 0)"], + ["hsl(120 80% none)", "rgb(0, 0, 0)"], + ["hsl(120 80% 0%)", "rgb(0, 0, 0)"], + ["hsl(120 none 50%)", "rgb(128, 128, 128)"], + ["hsl(120 0% 50%)", "rgb(128, 128, 128)"], + ["hsl(120 100% 50% / none)", "rgba(0, 255, 0, 0)"], + ["hsl(120 100% 50% / 0)", "rgba(0, 255, 0, 0)"], + ["hsl(120 100% 50% / 0%)", "rgba(0, 255, 0, 0)"], + ["hsl(none 100% 50%)", "rgb(255, 0, 0)"], + ["hsl(0 100% 50%)", "rgb(255, 0, 0)"], + + ["HSL(0, 0%, 0%)", "rgb(0, 0, 0)", "Capitalization should not affect parsing"], + ["hsL(0, 100%, 50%)", "rgb(255, 0, 0)", "Capitalization should not affect parsing"], + ["hsl(60, 100%, 37.5%)", "rgb(191, 191, 0)", "Valid numbers should be parsed"], + ["hsl(780, 100%, 37.5%)", "rgb(191, 191, 0)", "Angles are represented as a part of a circle and wrap around"], + ["hsl(-300, 100%, 37.5%)", "rgb(191, 191, 0)", "Angles are represented as a part of a circle and wrap around"], + ["hsl(300, 50%, 50%)", "rgb(191, 64, 191)", "Valid numbers should be parsed"], + ["hsl(30deg, 100%, 100%)", "rgb(255, 255, 255)", "Angles are accepted in HSL/HSLA"], + ["hsl(0, 0%, 0%, 0%)", "rgba(0, 0, 0, 0)", "HSL and HSLA are synonyms"], + ["HSLA(-300, 100%, 37.5%, 1)", "rgb(191, 191, 0)", "Angles are represented as a part of a circle and wrap around"], + ["hsLA(-300, 100%, 37.5%, 12)", "rgb(191, 191, 0)", "Invalid alpha values should be clamped to 0 and 1 respectively"], + ["hsla(-300, 100%, 37.5%, 0.2)", "rgba(191, 191, 0, 0.2)", "Angles are represented as a part of a circle and wrap around"], + ["hsla(-300, 100%, 37.5%, 0)", "rgba(191, 191, 0, 0)", "Angles are represented as a part of a circle and wrap around"], + ["hsla(-300, 100%, 37.5%, -3)", "rgba(191, 191, 0, 0)", "Invalid alpha values should be clamped to 0 and 1 respectively"], + ["hsla(0, 0%, 0%, 50%)", "rgba(0, 0, 0, 0.5)", "Percent alpha values are accepted in hsl/hsla"], + ["hsla(30deg, 100%, 100%, 1)", "rgb(255, 255, 255)", "Angles are accepted in HSL/HSLA"], + + ["hsl(0, 0%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 0%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 0%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 0%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 0%, 12.5%)", "rgb(32, 32, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 0%, 12.5%, 0)", "rgba(32, 32, 32, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 0%, 12.5%, 0.2)", "rgba(32, 32, 32, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 0%, 12.5%, 1)", "rgb(32, 32, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 0%, 25%)", "rgb(64, 64, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 0%, 25%, 0)", "rgba(64, 64, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 0%, 25%, 0.2)", "rgba(64, 64, 64, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 0%, 25%, 1)", "rgb(64, 64, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 0%, 37.5%)", "rgb(96, 96, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 0%, 37.5%, 0)", "rgba(96, 96, 96, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 0%, 37.5%, 0.2)", "rgba(96, 96, 96, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 0%, 37.5%, 1)", "rgb(96, 96, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 0%, 50%)", "rgb(128, 128, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 0%, 50%, 0)", "rgba(128, 128, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 0%, 50%, 0.2)", "rgba(128, 128, 128, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 0%, 50%, 1)", "rgb(128, 128, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 0%, 62.5%)", "rgb(159, 159, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 0%, 62.5%, 0)", "rgba(159, 159, 159, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 0%, 62.5%, 0.2)", "rgba(159, 159, 159, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 0%, 62.5%, 1)", "rgb(159, 159, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 0%, 75%)", "rgb(191, 191, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 0%, 75%, 0)", "rgba(191, 191, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 0%, 75%, 0.2)", "rgba(191, 191, 191, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 0%, 75%, 1)", "rgb(191, 191, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 0%, 87.5%)", "rgb(223, 223, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 0%, 87.5%, 0)", "rgba(223, 223, 223, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 0%, 87.5%, 0.2)", "rgba(223, 223, 223, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 0%, 87.5%, 1)", "rgb(223, 223, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 0%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 0%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 0%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 0%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 12.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 12.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 12.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 12.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 12.5%, 12.5%)", "rgb(36, 28, 28)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 12.5%, 12.5%, 0)", "rgba(36, 28, 28, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 12.5%, 12.5%, 0.2)", "rgba(36, 28, 28, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 12.5%, 12.5%, 1)", "rgb(36, 28, 28)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 12.5%, 25%)", "rgb(72, 56, 56)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 12.5%, 25%, 0)", "rgba(72, 56, 56, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 12.5%, 25%, 0.2)", "rgba(72, 56, 56, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 12.5%, 25%, 1)", "rgb(72, 56, 56)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 12.5%, 37.5%)", "rgb(108, 84, 84)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 12.5%, 37.5%, 0)", "rgba(108, 84, 84, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 12.5%, 37.5%, 0.2)", "rgba(108, 84, 84, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 12.5%, 37.5%, 1)", "rgb(108, 84, 84)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 12.5%, 50%)", "rgb(143, 112, 112)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 12.5%, 50%, 0)", "rgba(143, 112, 112, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 12.5%, 50%, 0.2)", "rgba(143, 112, 112, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 12.5%, 50%, 1)", "rgb(143, 112, 112)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 12.5%, 62.5%)", "rgb(171, 147, 147)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 12.5%, 62.5%, 0)", "rgba(171, 147, 147, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 12.5%, 62.5%, 0.2)", "rgba(171, 147, 147, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 12.5%, 62.5%, 1)", "rgb(171, 147, 147)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 12.5%, 75%)", "rgb(199, 183, 183)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 12.5%, 75%, 0)", "rgba(199, 183, 183, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 12.5%, 75%, 0.2)", "rgba(199, 183, 183, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 12.5%, 75%, 1)", "rgb(199, 183, 183)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 12.5%, 87.5%)", "rgb(227, 219, 219)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 12.5%, 87.5%, 0)", "rgba(227, 219, 219, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 12.5%, 87.5%, 0.2)", "rgba(227, 219, 219, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 12.5%, 87.5%, 1)", "rgb(227, 219, 219)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 12.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 12.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 12.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 12.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 25%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 25%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 25%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 25%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 25%, 12.5%)", "rgb(40, 24, 24)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 25%, 12.5%, 0)", "rgba(40, 24, 24, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 25%, 12.5%, 0.2)", "rgba(40, 24, 24, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 25%, 12.5%, 1)", "rgb(40, 24, 24)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 25%, 25%)", "rgb(80, 48, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 25%, 25%, 0)", "rgba(80, 48, 48, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 25%, 25%, 0.2)", "rgba(80, 48, 48, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 25%, 25%, 1)", "rgb(80, 48, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 25%, 37.5%)", "rgb(120, 72, 72)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 25%, 37.5%, 0)", "rgba(120, 72, 72, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 25%, 37.5%, 0.2)", "rgba(120, 72, 72, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 25%, 37.5%, 1)", "rgb(120, 72, 72)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 25%, 50%)", "rgb(159, 96, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 25%, 50%, 0)", "rgba(159, 96, 96, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 25%, 50%, 0.2)", "rgba(159, 96, 96, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 25%, 50%, 1)", "rgb(159, 96, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 25%, 62.5%)", "rgb(183, 135, 135)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 25%, 62.5%, 0)", "rgba(183, 135, 135, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 25%, 62.5%, 0.2)", "rgba(183, 135, 135, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 25%, 62.5%, 1)", "rgb(183, 135, 135)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 25%, 75%)", "rgb(207, 175, 175)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 25%, 75%, 0)", "rgba(207, 175, 175, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 25%, 75%, 0.2)", "rgba(207, 175, 175, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 25%, 75%, 1)", "rgb(207, 175, 175)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 25%, 87.5%)", "rgb(231, 215, 215)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 25%, 87.5%, 0)", "rgba(231, 215, 215, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 25%, 87.5%, 0.2)", "rgba(231, 215, 215, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 25%, 87.5%, 1)", "rgb(231, 215, 215)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 25%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 25%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 25%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 25%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 37.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 37.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 37.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 37.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 37.5%, 12.5%)", "rgb(44, 20, 20)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 37.5%, 12.5%, 0)", "rgba(44, 20, 20, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 37.5%, 12.5%, 0.2)", "rgba(44, 20, 20, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 37.5%, 12.5%, 1)", "rgb(44, 20, 20)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 37.5%, 25%)", "rgb(88, 40, 40)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 37.5%, 25%, 0)", "rgba(88, 40, 40, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 37.5%, 25%, 0.2)", "rgba(88, 40, 40, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 37.5%, 25%, 1)", "rgb(88, 40, 40)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 37.5%, 37.5%)", "rgb(131, 60, 60)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 37.5%, 37.5%, 0)", "rgba(131, 60, 60, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 37.5%, 37.5%, 0.2)", "rgba(131, 60, 60, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 37.5%, 37.5%, 1)", "rgb(131, 60, 60)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 37.5%, 50%)", "rgb(175, 80, 80)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 37.5%, 50%, 0)", "rgba(175, 80, 80, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 37.5%, 50%, 0.2)", "rgba(175, 80, 80, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 37.5%, 50%, 1)", "rgb(175, 80, 80)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 37.5%, 62.5%)", "rgb(195, 124, 124)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 37.5%, 62.5%, 0)", "rgba(195, 124, 124, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 37.5%, 62.5%, 0.2)", "rgba(195, 124, 124, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 37.5%, 62.5%, 1)", "rgb(195, 124, 124)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 37.5%, 75%)", "rgb(215, 167, 167)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 37.5%, 75%, 0)", "rgba(215, 167, 167, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 37.5%, 75%, 0.2)", "rgba(215, 167, 167, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 37.5%, 75%, 1)", "rgb(215, 167, 167)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 37.5%, 87.5%)", "rgb(235, 211, 211)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 37.5%, 87.5%, 0)", "rgba(235, 211, 211, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 37.5%, 87.5%, 0.2)", "rgba(235, 211, 211, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 37.5%, 87.5%, 1)", "rgb(235, 211, 211)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 37.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 37.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 37.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 37.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 50%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 50%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 50%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 50%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 50%, 12.5%)", "rgb(48, 16, 16)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 50%, 12.5%, 0)", "rgba(48, 16, 16, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 50%, 12.5%, 0.2)", "rgba(48, 16, 16, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 50%, 12.5%, 1)", "rgb(48, 16, 16)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 50%, 25%)", "rgb(96, 32, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 50%, 25%, 0)", "rgba(96, 32, 32, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 50%, 25%, 0.2)", "rgba(96, 32, 32, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 50%, 25%, 1)", "rgb(96, 32, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 50%, 37.5%)", "rgb(143, 48, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 50%, 37.5%, 0)", "rgba(143, 48, 48, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 50%, 37.5%, 0.2)", "rgba(143, 48, 48, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 50%, 37.5%, 1)", "rgb(143, 48, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 50%, 50%)", "rgb(191, 64, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 50%, 50%, 0)", "rgba(191, 64, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 50%, 50%, 0.2)", "rgba(191, 64, 64, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 50%, 50%, 1)", "rgb(191, 64, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 50%, 62.5%)", "rgb(207, 112, 112)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 50%, 62.5%, 0)", "rgba(207, 112, 112, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 50%, 62.5%, 0.2)", "rgba(207, 112, 112, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 50%, 62.5%, 1)", "rgb(207, 112, 112)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 50%, 75%)", "rgb(223, 159, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 50%, 75%, 0)", "rgba(223, 159, 159, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 50%, 75%, 0.2)", "rgba(223, 159, 159, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 50%, 75%, 1)", "rgb(223, 159, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 50%, 87.5%)", "rgb(239, 207, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 50%, 87.5%, 0)", "rgba(239, 207, 207, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 50%, 87.5%, 0.2)", "rgba(239, 207, 207, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 50%, 87.5%, 1)", "rgb(239, 207, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 50%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 50%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 50%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 50%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 62.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 62.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 62.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 62.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 62.5%, 12.5%)", "rgb(52, 12, 12)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 62.5%, 12.5%, 0)", "rgba(52, 12, 12, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 62.5%, 12.5%, 0.2)", "rgba(52, 12, 12, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 62.5%, 12.5%, 1)", "rgb(52, 12, 12)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 62.5%, 25%)", "rgb(104, 24, 24)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 62.5%, 25%, 0)", "rgba(104, 24, 24, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 62.5%, 25%, 0.2)", "rgba(104, 24, 24, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 62.5%, 25%, 1)", "rgb(104, 24, 24)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 62.5%, 37.5%)", "rgb(155, 36, 36)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 62.5%, 37.5%, 0)", "rgba(155, 36, 36, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 62.5%, 37.5%, 0.2)", "rgba(155, 36, 36, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 62.5%, 37.5%, 1)", "rgb(155, 36, 36)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 62.5%, 50%)", "rgb(207, 48, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 62.5%, 50%, 0)", "rgba(207, 48, 48, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 62.5%, 50%, 0.2)", "rgba(207, 48, 48, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 62.5%, 50%, 1)", "rgb(207, 48, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 62.5%, 62.5%)", "rgb(219, 100, 100)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 62.5%, 62.5%, 0)", "rgba(219, 100, 100, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 62.5%, 62.5%, 0.2)", "rgba(219, 100, 100, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 62.5%, 62.5%, 1)", "rgb(219, 100, 100)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 62.5%, 75%)", "rgb(231, 151, 151)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 62.5%, 75%, 0)", "rgba(231, 151, 151, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 62.5%, 75%, 0.2)", "rgba(231, 151, 151, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 62.5%, 75%, 1)", "rgb(231, 151, 151)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 62.5%, 87.5%)", "rgb(243, 203, 203)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 62.5%, 87.5%, 0)", "rgba(243, 203, 203, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 62.5%, 87.5%, 0.2)", "rgba(243, 203, 203, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 62.5%, 87.5%, 1)", "rgb(243, 203, 203)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 62.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 62.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 62.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 62.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 75%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 75%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 75%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 75%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 75%, 12.5%)", "rgb(56, 8, 8)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 75%, 12.5%, 0)", "rgba(56, 8, 8, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 75%, 12.5%, 0.2)", "rgba(56, 8, 8, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 75%, 12.5%, 1)", "rgb(56, 8, 8)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 75%, 25%)", "rgb(112, 16, 16)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 75%, 25%, 0)", "rgba(112, 16, 16, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 75%, 25%, 0.2)", "rgba(112, 16, 16, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 75%, 25%, 1)", "rgb(112, 16, 16)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 75%, 37.5%)", "rgb(167, 24, 24)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 75%, 37.5%, 0)", "rgba(167, 24, 24, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 75%, 37.5%, 0.2)", "rgba(167, 24, 24, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 75%, 37.5%, 1)", "rgb(167, 24, 24)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 75%, 50%)", "rgb(223, 32, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 75%, 50%, 0)", "rgba(223, 32, 32, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 75%, 50%, 0.2)", "rgba(223, 32, 32, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 75%, 50%, 1)", "rgb(223, 32, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 75%, 62.5%)", "rgb(231, 88, 88)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 75%, 62.5%, 0)", "rgba(231, 88, 88, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 75%, 62.5%, 0.2)", "rgba(231, 88, 88, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 75%, 62.5%, 1)", "rgb(231, 88, 88)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 75%, 75%)", "rgb(239, 143, 143)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 75%, 75%, 0)", "rgba(239, 143, 143, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 75%, 75%, 0.2)", "rgba(239, 143, 143, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 75%, 75%, 1)", "rgb(239, 143, 143)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 75%, 87.5%)", "rgb(247, 199, 199)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 75%, 87.5%, 0)", "rgba(247, 199, 199, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 75%, 87.5%, 0.2)", "rgba(247, 199, 199, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 75%, 87.5%, 1)", "rgb(247, 199, 199)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 75%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 75%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 75%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 75%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 87.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 87.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 87.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 87.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 87.5%, 12.5%)", "rgb(60, 4, 4)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 87.5%, 12.5%, 0)", "rgba(60, 4, 4, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 87.5%, 12.5%, 0.2)", "rgba(60, 4, 4, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 87.5%, 12.5%, 1)", "rgb(60, 4, 4)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 87.5%, 25%)", "rgb(120, 8, 8)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 87.5%, 25%, 0)", "rgba(120, 8, 8, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 87.5%, 25%, 0.2)", "rgba(120, 8, 8, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 87.5%, 25%, 1)", "rgb(120, 8, 8)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 87.5%, 37.5%)", "rgb(179, 12, 12)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 87.5%, 37.5%, 0)", "rgba(179, 12, 12, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 87.5%, 37.5%, 0.2)", "rgba(179, 12, 12, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 87.5%, 37.5%, 1)", "rgb(179, 12, 12)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 87.5%, 50%)", "rgb(239, 16, 16)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 87.5%, 50%, 0)", "rgba(239, 16, 16, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 87.5%, 50%, 0.2)", "rgba(239, 16, 16, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 87.5%, 50%, 1)", "rgb(239, 16, 16)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 87.5%, 62.5%)", "rgb(243, 76, 76)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 87.5%, 62.5%, 0)", "rgba(243, 76, 76, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 87.5%, 62.5%, 0.2)", "rgba(243, 76, 76, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 87.5%, 62.5%, 1)", "rgb(243, 76, 76)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 87.5%, 75%)", "rgb(247, 135, 135)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 87.5%, 75%, 0)", "rgba(247, 135, 135, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 87.5%, 75%, 0.2)", "rgba(247, 135, 135, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 87.5%, 75%, 1)", "rgb(247, 135, 135)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 87.5%, 87.5%)", "rgb(251, 195, 195)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 87.5%, 87.5%, 0)", "rgba(251, 195, 195, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 87.5%, 87.5%, 0.2)", "rgba(251, 195, 195, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 87.5%, 87.5%, 1)", "rgb(251, 195, 195)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 87.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 87.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 87.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 87.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 100%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 100%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 100%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 100%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 100%, 12.5%)", "rgb(64, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 100%, 12.5%, 0)", "rgba(64, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 100%, 12.5%, 0.2)", "rgba(64, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 100%, 12.5%, 1)", "rgb(64, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 100%, 25%)", "rgb(128, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 100%, 25%, 0)", "rgba(128, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 100%, 25%, 0.2)", "rgba(128, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 100%, 25%, 1)", "rgb(128, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 100%, 37.5%)", "rgb(191, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 100%, 37.5%, 0)", "rgba(191, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 100%, 37.5%, 0.2)", "rgba(191, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 100%, 37.5%, 1)", "rgb(191, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 100%, 50%)", "rgb(255, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 100%, 50%, 0)", "rgba(255, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 100%, 50%, 0.2)", "rgba(255, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 100%, 50%, 1)", "rgb(255, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 100%, 62.5%)", "rgb(255, 64, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 100%, 62.5%, 0)", "rgba(255, 64, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 100%, 62.5%, 0.2)", "rgba(255, 64, 64, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 100%, 62.5%, 1)", "rgb(255, 64, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 100%, 75%)", "rgb(255, 128, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 100%, 75%, 0)", "rgba(255, 128, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 100%, 75%, 0.2)", "rgba(255, 128, 128, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 100%, 75%, 1)", "rgb(255, 128, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 100%, 87.5%)", "rgb(255, 191, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 100%, 87.5%, 0)", "rgba(255, 191, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 100%, 87.5%, 0.2)", "rgba(255, 191, 191, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 100%, 87.5%, 1)", "rgb(255, 191, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsl(0, 100%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 100%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 100%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(0, 100%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 0%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 0%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 0%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 0%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 0%, 12.5%)", "rgb(32, 32, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 0%, 12.5%, 0)", "rgba(32, 32, 32, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 0%, 12.5%, 0.2)", "rgba(32, 32, 32, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 0%, 12.5%, 1)", "rgb(32, 32, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 0%, 25%)", "rgb(64, 64, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 0%, 25%, 0)", "rgba(64, 64, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 0%, 25%, 0.2)", "rgba(64, 64, 64, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 0%, 25%, 1)", "rgb(64, 64, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 0%, 37.5%)", "rgb(96, 96, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 0%, 37.5%, 0)", "rgba(96, 96, 96, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 0%, 37.5%, 0.2)", "rgba(96, 96, 96, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 0%, 37.5%, 1)", "rgb(96, 96, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 0%, 50%)", "rgb(128, 128, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 0%, 50%, 0)", "rgba(128, 128, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 0%, 50%, 0.2)", "rgba(128, 128, 128, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 0%, 50%, 1)", "rgb(128, 128, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 0%, 62.5%)", "rgb(159, 159, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 0%, 62.5%, 0)", "rgba(159, 159, 159, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 0%, 62.5%, 0.2)", "rgba(159, 159, 159, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 0%, 62.5%, 1)", "rgb(159, 159, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 0%, 75%)", "rgb(191, 191, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 0%, 75%, 0)", "rgba(191, 191, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 0%, 75%, 0.2)", "rgba(191, 191, 191, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 0%, 75%, 1)", "rgb(191, 191, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 0%, 87.5%)", "rgb(223, 223, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 0%, 87.5%, 0)", "rgba(223, 223, 223, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 0%, 87.5%, 0.2)", "rgba(223, 223, 223, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 0%, 87.5%, 1)", "rgb(223, 223, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 0%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 0%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 0%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 0%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 12.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 12.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 12.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 12.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 12.5%, 12.5%)", "rgb(36, 32, 28)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 12.5%, 12.5%, 0)", "rgba(36, 32, 28, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 12.5%, 12.5%, 0.2)", "rgba(36, 32, 28, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 12.5%, 12.5%, 1)", "rgb(36, 32, 28)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 12.5%, 25%)", "rgb(72, 64, 56)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 12.5%, 25%, 0)", "rgba(72, 64, 56, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 12.5%, 25%, 0.2)", "rgba(72, 64, 56, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 12.5%, 25%, 1)", "rgb(72, 64, 56)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 12.5%, 37.5%)", "rgb(108, 96, 84)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 12.5%, 37.5%, 0)", "rgba(108, 96, 84, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 12.5%, 37.5%, 0.2)", "rgba(108, 96, 84, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 12.5%, 37.5%, 1)", "rgb(108, 96, 84)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 12.5%, 50%)", "rgb(143, 128, 112)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 12.5%, 50%, 0)", "rgba(143, 128, 112, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 12.5%, 50%, 0.2)", "rgba(143, 128, 112, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 12.5%, 50%, 1)", "rgb(143, 128, 112)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 12.5%, 62.5%)", "rgb(171, 159, 147)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 12.5%, 62.5%, 0)", "rgba(171, 159, 147, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 12.5%, 62.5%, 0.2)", "rgba(171, 159, 147, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 12.5%, 62.5%, 1)", "rgb(171, 159, 147)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 12.5%, 75%)", "rgb(199, 191, 183)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 12.5%, 75%, 0)", "rgba(199, 191, 183, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 12.5%, 75%, 0.2)", "rgba(199, 191, 183, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 12.5%, 75%, 1)", "rgb(199, 191, 183)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 12.5%, 87.5%)", "rgb(227, 223, 219)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 12.5%, 87.5%, 0)", "rgba(227, 223, 219, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 12.5%, 87.5%, 0.2)", "rgba(227, 223, 219, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 12.5%, 87.5%, 1)", "rgb(227, 223, 219)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 12.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 12.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 12.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 12.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 25%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 25%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 25%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 25%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 25%, 12.5%)", "rgb(40, 32, 24)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 25%, 12.5%, 0)", "rgba(40, 32, 24, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 25%, 12.5%, 0.2)", "rgba(40, 32, 24, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 25%, 12.5%, 1)", "rgb(40, 32, 24)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 25%, 25%)", "rgb(80, 64, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 25%, 25%, 0)", "rgba(80, 64, 48, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 25%, 25%, 0.2)", "rgba(80, 64, 48, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 25%, 25%, 1)", "rgb(80, 64, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 25%, 37.5%)", "rgb(120, 96, 72)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 25%, 37.5%, 0)", "rgba(120, 96, 72, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 25%, 37.5%, 0.2)", "rgba(120, 96, 72, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 25%, 37.5%, 1)", "rgb(120, 96, 72)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 25%, 50%)", "rgb(159, 128, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 25%, 50%, 0)", "rgba(159, 128, 96, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 25%, 50%, 0.2)", "rgba(159, 128, 96, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 25%, 50%, 1)", "rgb(159, 128, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 25%, 62.5%)", "rgb(183, 159, 135)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 25%, 62.5%, 0)", "rgba(183, 159, 135, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 25%, 62.5%, 0.2)", "rgba(183, 159, 135, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 25%, 62.5%, 1)", "rgb(183, 159, 135)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 25%, 75%)", "rgb(207, 191, 175)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 25%, 75%, 0)", "rgba(207, 191, 175, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 25%, 75%, 0.2)", "rgba(207, 191, 175, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 25%, 75%, 1)", "rgb(207, 191, 175)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 25%, 87.5%)", "rgb(231, 223, 215)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 25%, 87.5%, 0)", "rgba(231, 223, 215, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 25%, 87.5%, 0.2)", "rgba(231, 223, 215, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 25%, 87.5%, 1)", "rgb(231, 223, 215)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 25%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 25%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 25%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 25%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 37.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 37.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 37.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 37.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 37.5%, 12.5%)", "rgb(44, 32, 20)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 37.5%, 12.5%, 0)", "rgba(44, 32, 20, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 37.5%, 12.5%, 0.2)", "rgba(44, 32, 20, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 37.5%, 12.5%, 1)", "rgb(44, 32, 20)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 37.5%, 25%)", "rgb(88, 64, 40)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 37.5%, 25%, 0)", "rgba(88, 64, 40, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 37.5%, 25%, 0.2)", "rgba(88, 64, 40, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 37.5%, 25%, 1)", "rgb(88, 64, 40)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 37.5%, 37.5%)", "rgb(131, 96, 60)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 37.5%, 37.5%, 0)", "rgba(131, 96, 60, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 37.5%, 37.5%, 0.2)", "rgba(131, 96, 60, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 37.5%, 37.5%, 1)", "rgb(131, 96, 60)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 37.5%, 50%)", "rgb(175, 128, 80)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 37.5%, 50%, 0)", "rgba(175, 128, 80, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 37.5%, 50%, 0.2)", "rgba(175, 128, 80, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 37.5%, 50%, 1)", "rgb(175, 128, 80)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 37.5%, 62.5%)", "rgb(195, 159, 124)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 37.5%, 62.5%, 0)", "rgba(195, 159, 124, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 37.5%, 62.5%, 0.2)", "rgba(195, 159, 124, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 37.5%, 62.5%, 1)", "rgb(195, 159, 124)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 37.5%, 75%)", "rgb(215, 191, 167)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 37.5%, 75%, 0)", "rgba(215, 191, 167, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 37.5%, 75%, 0.2)", "rgba(215, 191, 167, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 37.5%, 75%, 1)", "rgb(215, 191, 167)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 37.5%, 87.5%)", "rgb(235, 223, 211)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 37.5%, 87.5%, 0)", "rgba(235, 223, 211, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 37.5%, 87.5%, 0.2)", "rgba(235, 223, 211, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 37.5%, 87.5%, 1)", "rgb(235, 223, 211)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 37.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 37.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 37.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 37.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 50%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 50%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 50%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 50%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 50%, 12.5%)", "rgb(48, 32, 16)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 50%, 12.5%, 0)", "rgba(48, 32, 16, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 50%, 12.5%, 0.2)", "rgba(48, 32, 16, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 50%, 12.5%, 1)", "rgb(48, 32, 16)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 50%, 25%)", "rgb(96, 64, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 50%, 25%, 0)", "rgba(96, 64, 32, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 50%, 25%, 0.2)", "rgba(96, 64, 32, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 50%, 25%, 1)", "rgb(96, 64, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 50%, 37.5%)", "rgb(143, 96, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 50%, 37.5%, 0)", "rgba(143, 96, 48, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 50%, 37.5%, 0.2)", "rgba(143, 96, 48, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 50%, 37.5%, 1)", "rgb(143, 96, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 50%, 50%)", "rgb(191, 128, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 50%, 50%, 0)", "rgba(191, 128, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 50%, 50%, 0.2)", "rgba(191, 128, 64, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 50%, 50%, 1)", "rgb(191, 128, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 50%, 62.5%)", "rgb(207, 159, 112)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 50%, 62.5%, 0)", "rgba(207, 159, 112, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 50%, 62.5%, 0.2)", "rgba(207, 159, 112, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 50%, 62.5%, 1)", "rgb(207, 159, 112)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 50%, 75%)", "rgb(223, 191, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 50%, 75%, 0)", "rgba(223, 191, 159, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 50%, 75%, 0.2)", "rgba(223, 191, 159, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 50%, 75%, 1)", "rgb(223, 191, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 50%, 87.5%)", "rgb(239, 223, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 50%, 87.5%, 0)", "rgba(239, 223, 207, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 50%, 87.5%, 0.2)", "rgba(239, 223, 207, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 50%, 87.5%, 1)", "rgb(239, 223, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 50%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 50%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 50%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 50%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 62.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 62.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 62.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 62.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 62.5%, 12.5%)", "rgb(52, 32, 12)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 62.5%, 12.5%, 0)", "rgba(52, 32, 12, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 62.5%, 12.5%, 0.2)", "rgba(52, 32, 12, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 62.5%, 12.5%, 1)", "rgb(52, 32, 12)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 62.5%, 25%)", "rgb(104, 64, 24)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 62.5%, 25%, 0)", "rgba(104, 64, 24, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 62.5%, 25%, 0.2)", "rgba(104, 64, 24, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 62.5%, 25%, 1)", "rgb(104, 64, 24)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 62.5%, 37.5%)", "rgb(155, 96, 36)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 62.5%, 37.5%, 0)", "rgba(155, 96, 36, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 62.5%, 37.5%, 0.2)", "rgba(155, 96, 36, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 62.5%, 37.5%, 1)", "rgb(155, 96, 36)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 62.5%, 50%)", "rgb(207, 128, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 62.5%, 50%, 0)", "rgba(207, 128, 48, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 62.5%, 50%, 0.2)", "rgba(207, 128, 48, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 62.5%, 50%, 1)", "rgb(207, 128, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 62.5%, 62.5%)", "rgb(219, 159, 100)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 62.5%, 62.5%, 0)", "rgba(219, 159, 100, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 62.5%, 62.5%, 0.2)", "rgba(219, 159, 100, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 62.5%, 62.5%, 1)", "rgb(219, 159, 100)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 62.5%, 75%)", "rgb(231, 191, 151)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 62.5%, 75%, 0)", "rgba(231, 191, 151, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 62.5%, 75%, 0.2)", "rgba(231, 191, 151, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 62.5%, 75%, 1)", "rgb(231, 191, 151)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 62.5%, 87.5%)", "rgb(243, 223, 203)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 62.5%, 87.5%, 0)", "rgba(243, 223, 203, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 62.5%, 87.5%, 0.2)", "rgba(243, 223, 203, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 62.5%, 87.5%, 1)", "rgb(243, 223, 203)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 62.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 62.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 62.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 62.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 75%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 75%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 75%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 75%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 75%, 12.5%)", "rgb(56, 32, 8)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 75%, 12.5%, 0)", "rgba(56, 32, 8, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 75%, 12.5%, 0.2)", "rgba(56, 32, 8, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 75%, 12.5%, 1)", "rgb(56, 32, 8)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 75%, 25%)", "rgb(112, 64, 16)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 75%, 25%, 0)", "rgba(112, 64, 16, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 75%, 25%, 0.2)", "rgba(112, 64, 16, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 75%, 25%, 1)", "rgb(112, 64, 16)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 75%, 37.5%)", "rgb(167, 96, 24)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 75%, 37.5%, 0)", "rgba(167, 96, 24, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 75%, 37.5%, 0.2)", "rgba(167, 96, 24, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 75%, 37.5%, 1)", "rgb(167, 96, 24)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 75%, 50%)", "rgb(223, 128, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 75%, 50%, 0)", "rgba(223, 128, 32, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 75%, 50%, 0.2)", "rgba(223, 128, 32, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 75%, 50%, 1)", "rgb(223, 128, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 75%, 62.5%)", "rgb(231, 159, 88)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 75%, 62.5%, 0)", "rgba(231, 159, 88, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 75%, 62.5%, 0.2)", "rgba(231, 159, 88, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 75%, 62.5%, 1)", "rgb(231, 159, 88)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 75%, 75%)", "rgb(239, 191, 143)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 75%, 75%, 0)", "rgba(239, 191, 143, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 75%, 75%, 0.2)", "rgba(239, 191, 143, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 75%, 75%, 1)", "rgb(239, 191, 143)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 75%, 87.5%)", "rgb(247, 223, 199)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 75%, 87.5%, 0)", "rgba(247, 223, 199, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 75%, 87.5%, 0.2)", "rgba(247, 223, 199, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 75%, 87.5%, 1)", "rgb(247, 223, 199)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 75%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 75%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 75%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 75%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 87.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 87.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 87.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 87.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 87.5%, 12.5%)", "rgb(60, 32, 4)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 87.5%, 12.5%, 0)", "rgba(60, 32, 4, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 87.5%, 12.5%, 0.2)", "rgba(60, 32, 4, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 87.5%, 12.5%, 1)", "rgb(60, 32, 4)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 87.5%, 25%)", "rgb(120, 64, 8)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 87.5%, 25%, 0)", "rgba(120, 64, 8, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 87.5%, 25%, 0.2)", "rgba(120, 64, 8, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 87.5%, 25%, 1)", "rgb(120, 64, 8)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 87.5%, 37.5%)", "rgb(179, 96, 12)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 87.5%, 37.5%, 0)", "rgba(179, 96, 12, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 87.5%, 37.5%, 0.2)", "rgba(179, 96, 12, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 87.5%, 37.5%, 1)", "rgb(179, 96, 12)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 87.5%, 50%)", "rgb(239, 128, 16)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 87.5%, 50%, 0)", "rgba(239, 128, 16, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 87.5%, 50%, 0.2)", "rgba(239, 128, 16, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 87.5%, 50%, 1)", "rgb(239, 128, 16)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 87.5%, 62.5%)", "rgb(243, 159, 76)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 87.5%, 62.5%, 0)", "rgba(243, 159, 76, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 87.5%, 62.5%, 0.2)", "rgba(243, 159, 76, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 87.5%, 62.5%, 1)", "rgb(243, 159, 76)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 87.5%, 75%)", "rgb(247, 191, 135)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 87.5%, 75%, 0)", "rgba(247, 191, 135, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 87.5%, 75%, 0.2)", "rgba(247, 191, 135, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 87.5%, 75%, 1)", "rgb(247, 191, 135)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 87.5%, 87.5%)", "rgb(251, 223, 195)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 87.5%, 87.5%, 0)", "rgba(251, 223, 195, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 87.5%, 87.5%, 0.2)", "rgba(251, 223, 195, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 87.5%, 87.5%, 1)", "rgb(251, 223, 195)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 87.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 87.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 87.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 87.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 100%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 100%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 100%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 100%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 100%, 12.5%)", "rgb(64, 32, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 100%, 12.5%, 0)", "rgba(64, 32, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 100%, 12.5%, 0.2)", "rgba(64, 32, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 100%, 12.5%, 1)", "rgb(64, 32, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 100%, 25%)", "rgb(128, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 100%, 25%, 0)", "rgba(128, 64, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 100%, 25%, 0.2)", "rgba(128, 64, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 100%, 25%, 1)", "rgb(128, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 100%, 37.5%)", "rgb(191, 96, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 100%, 37.5%, 0)", "rgba(191, 96, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 100%, 37.5%, 0.2)", "rgba(191, 96, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 100%, 37.5%, 1)", "rgb(191, 96, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 100%, 50%)", "rgb(255, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 100%, 50%, 0)", "rgba(255, 128, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 100%, 50%, 0.2)", "rgba(255, 128, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 100%, 50%, 1)", "rgb(255, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 100%, 62.5%)", "rgb(255, 159, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 100%, 62.5%, 0)", "rgba(255, 159, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 100%, 62.5%, 0.2)", "rgba(255, 159, 64, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 100%, 62.5%, 1)", "rgb(255, 159, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 100%, 75%)", "rgb(255, 191, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 100%, 75%, 0)", "rgba(255, 191, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 100%, 75%, 0.2)", "rgba(255, 191, 128, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 100%, 75%, 1)", "rgb(255, 191, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 100%, 87.5%)", "rgb(255, 223, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 100%, 87.5%, 0)", "rgba(255, 223, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 100%, 87.5%, 0.2)", "rgba(255, 223, 191, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 100%, 87.5%, 1)", "rgb(255, 223, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsl(30, 100%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 100%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 100%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(30, 100%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 0%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 0%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 0%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 0%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 0%, 12.5%)", "rgb(32, 32, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 0%, 12.5%, 0)", "rgba(32, 32, 32, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 0%, 12.5%, 0.2)", "rgba(32, 32, 32, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 0%, 12.5%, 1)", "rgb(32, 32, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 0%, 25%)", "rgb(64, 64, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 0%, 25%, 0)", "rgba(64, 64, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 0%, 25%, 0.2)", "rgba(64, 64, 64, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 0%, 25%, 1)", "rgb(64, 64, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 0%, 37.5%)", "rgb(96, 96, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 0%, 37.5%, 0)", "rgba(96, 96, 96, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 0%, 37.5%, 0.2)", "rgba(96, 96, 96, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 0%, 37.5%, 1)", "rgb(96, 96, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 0%, 50%)", "rgb(128, 128, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 0%, 50%, 0)", "rgba(128, 128, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 0%, 50%, 0.2)", "rgba(128, 128, 128, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 0%, 50%, 1)", "rgb(128, 128, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 0%, 62.5%)", "rgb(159, 159, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 0%, 62.5%, 0)", "rgba(159, 159, 159, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 0%, 62.5%, 0.2)", "rgba(159, 159, 159, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 0%, 62.5%, 1)", "rgb(159, 159, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 0%, 75%)", "rgb(191, 191, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 0%, 75%, 0)", "rgba(191, 191, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 0%, 75%, 0.2)", "rgba(191, 191, 191, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 0%, 75%, 1)", "rgb(191, 191, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 0%, 87.5%)", "rgb(223, 223, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 0%, 87.5%, 0)", "rgba(223, 223, 223, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 0%, 87.5%, 0.2)", "rgba(223, 223, 223, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 0%, 87.5%, 1)", "rgb(223, 223, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 0%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 0%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 0%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 0%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 12.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 12.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 12.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 12.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 12.5%, 12.5%)", "rgb(36, 36, 28)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 12.5%, 12.5%, 0)", "rgba(36, 36, 28, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 12.5%, 12.5%, 0.2)", "rgba(36, 36, 28, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 12.5%, 12.5%, 1)", "rgb(36, 36, 28)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 12.5%, 25%)", "rgb(72, 72, 56)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 12.5%, 25%, 0)", "rgba(72, 72, 56, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 12.5%, 25%, 0.2)", "rgba(72, 72, 56, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 12.5%, 25%, 1)", "rgb(72, 72, 56)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 12.5%, 37.5%)", "rgb(108, 108, 84)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 12.5%, 37.5%, 0)", "rgba(108, 108, 84, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 12.5%, 37.5%, 0.2)", "rgba(108, 108, 84, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 12.5%, 37.5%, 1)", "rgb(108, 108, 84)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 12.5%, 50%)", "rgb(143, 143, 112)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 12.5%, 50%, 0)", "rgba(143, 143, 112, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 12.5%, 50%, 0.2)", "rgba(143, 143, 112, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 12.5%, 50%, 1)", "rgb(143, 143, 112)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 12.5%, 62.5%)", "rgb(171, 171, 147)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 12.5%, 62.5%, 0)", "rgba(171, 171, 147, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 12.5%, 62.5%, 0.2)", "rgba(171, 171, 147, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 12.5%, 62.5%, 1)", "rgb(171, 171, 147)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 12.5%, 75%)", "rgb(199, 199, 183)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 12.5%, 75%, 0)", "rgba(199, 199, 183, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 12.5%, 75%, 0.2)", "rgba(199, 199, 183, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 12.5%, 75%, 1)", "rgb(199, 199, 183)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 12.5%, 87.5%)", "rgb(227, 227, 219)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 12.5%, 87.5%, 0)", "rgba(227, 227, 219, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 12.5%, 87.5%, 0.2)", "rgba(227, 227, 219, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 12.5%, 87.5%, 1)", "rgb(227, 227, 219)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 12.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 12.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 12.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 12.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 25%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 25%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 25%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 25%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 25%, 12.5%)", "rgb(40, 40, 24)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 25%, 12.5%, 0)", "rgba(40, 40, 24, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 25%, 12.5%, 0.2)", "rgba(40, 40, 24, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 25%, 12.5%, 1)", "rgb(40, 40, 24)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 25%, 25%)", "rgb(80, 80, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 25%, 25%, 0)", "rgba(80, 80, 48, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 25%, 25%, 0.2)", "rgba(80, 80, 48, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 25%, 25%, 1)", "rgb(80, 80, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 25%, 37.5%)", "rgb(120, 120, 72)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 25%, 37.5%, 0)", "rgba(120, 120, 72, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 25%, 37.5%, 0.2)", "rgba(120, 120, 72, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 25%, 37.5%, 1)", "rgb(120, 120, 72)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 25%, 50%)", "rgb(159, 159, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 25%, 50%, 0)", "rgba(159, 159, 96, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 25%, 50%, 0.2)", "rgba(159, 159, 96, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 25%, 50%, 1)", "rgb(159, 159, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 25%, 62.5%)", "rgb(183, 183, 135)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 25%, 62.5%, 0)", "rgba(183, 183, 135, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 25%, 62.5%, 0.2)", "rgba(183, 183, 135, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 25%, 62.5%, 1)", "rgb(183, 183, 135)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 25%, 75%)", "rgb(207, 207, 175)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 25%, 75%, 0)", "rgba(207, 207, 175, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 25%, 75%, 0.2)", "rgba(207, 207, 175, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 25%, 75%, 1)", "rgb(207, 207, 175)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 25%, 87.5%)", "rgb(231, 231, 215)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 25%, 87.5%, 0)", "rgba(231, 231, 215, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 25%, 87.5%, 0.2)", "rgba(231, 231, 215, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 25%, 87.5%, 1)", "rgb(231, 231, 215)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 25%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 25%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 25%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 25%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 37.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 37.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 37.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 37.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 37.5%, 12.5%)", "rgb(44, 44, 20)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 37.5%, 12.5%, 0)", "rgba(44, 44, 20, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 37.5%, 12.5%, 0.2)", "rgba(44, 44, 20, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 37.5%, 12.5%, 1)", "rgb(44, 44, 20)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 37.5%, 25%)", "rgb(88, 88, 40)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 37.5%, 25%, 0)", "rgba(88, 88, 40, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 37.5%, 25%, 0.2)", "rgba(88, 88, 40, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 37.5%, 25%, 1)", "rgb(88, 88, 40)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 37.5%, 37.5%)", "rgb(131, 131, 60)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 37.5%, 37.5%, 0)", "rgba(131, 131, 60, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 37.5%, 37.5%, 0.2)", "rgba(131, 131, 60, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 37.5%, 37.5%, 1)", "rgb(131, 131, 60)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 37.5%, 50%)", "rgb(175, 175, 80)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 37.5%, 50%, 0)", "rgba(175, 175, 80, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 37.5%, 50%, 0.2)", "rgba(175, 175, 80, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 37.5%, 50%, 1)", "rgb(175, 175, 80)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 37.5%, 62.5%)", "rgb(195, 195, 124)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 37.5%, 62.5%, 0)", "rgba(195, 195, 124, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 37.5%, 62.5%, 0.2)", "rgba(195, 195, 124, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 37.5%, 62.5%, 1)", "rgb(195, 195, 124)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 37.5%, 75%)", "rgb(215, 215, 167)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 37.5%, 75%, 0)", "rgba(215, 215, 167, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 37.5%, 75%, 0.2)", "rgba(215, 215, 167, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 37.5%, 75%, 1)", "rgb(215, 215, 167)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 37.5%, 87.5%)", "rgb(235, 235, 211)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 37.5%, 87.5%, 0)", "rgba(235, 235, 211, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 37.5%, 87.5%, 0.2)", "rgba(235, 235, 211, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 37.5%, 87.5%, 1)", "rgb(235, 235, 211)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 37.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 37.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 37.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 37.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 50%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 50%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 50%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 50%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 50%, 12.5%)", "rgb(48, 48, 16)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 50%, 12.5%, 0)", "rgba(48, 48, 16, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 50%, 12.5%, 0.2)", "rgba(48, 48, 16, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 50%, 12.5%, 1)", "rgb(48, 48, 16)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 50%, 25%)", "rgb(96, 96, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 50%, 25%, 0)", "rgba(96, 96, 32, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 50%, 25%, 0.2)", "rgba(96, 96, 32, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 50%, 25%, 1)", "rgb(96, 96, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 50%, 37.5%)", "rgb(143, 143, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 50%, 37.5%, 0)", "rgba(143, 143, 48, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 50%, 37.5%, 0.2)", "rgba(143, 143, 48, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 50%, 37.5%, 1)", "rgb(143, 143, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 50%, 50%)", "rgb(191, 191, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 50%, 50%, 0)", "rgba(191, 191, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 50%, 50%, 0.2)", "rgba(191, 191, 64, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 50%, 50%, 1)", "rgb(191, 191, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 50%, 62.5%)", "rgb(207, 207, 112)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 50%, 62.5%, 0)", "rgba(207, 207, 112, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 50%, 62.5%, 0.2)", "rgba(207, 207, 112, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 50%, 62.5%, 1)", "rgb(207, 207, 112)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 50%, 75%)", "rgb(223, 223, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 50%, 75%, 0)", "rgba(223, 223, 159, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 50%, 75%, 0.2)", "rgba(223, 223, 159, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 50%, 75%, 1)", "rgb(223, 223, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 50%, 87.5%)", "rgb(239, 239, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 50%, 87.5%, 0)", "rgba(239, 239, 207, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 50%, 87.5%, 0.2)", "rgba(239, 239, 207, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 50%, 87.5%, 1)", "rgb(239, 239, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 50%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 50%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 50%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 50%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 62.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 62.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 62.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 62.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 62.5%, 12.5%)", "rgb(52, 52, 12)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 62.5%, 12.5%, 0)", "rgba(52, 52, 12, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 62.5%, 12.5%, 0.2)", "rgba(52, 52, 12, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 62.5%, 12.5%, 1)", "rgb(52, 52, 12)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 62.5%, 25%)", "rgb(104, 104, 24)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 62.5%, 25%, 0)", "rgba(104, 104, 24, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 62.5%, 25%, 0.2)", "rgba(104, 104, 24, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 62.5%, 25%, 1)", "rgb(104, 104, 24)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 62.5%, 37.5%)", "rgb(155, 155, 36)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 62.5%, 37.5%, 0)", "rgba(155, 155, 36, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 62.5%, 37.5%, 0.2)", "rgba(155, 155, 36, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 62.5%, 37.5%, 1)", "rgb(155, 155, 36)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 62.5%, 50%)", "rgb(207, 207, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 62.5%, 50%, 0)", "rgba(207, 207, 48, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 62.5%, 50%, 0.2)", "rgba(207, 207, 48, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 62.5%, 50%, 1)", "rgb(207, 207, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 62.5%, 62.5%)", "rgb(219, 219, 100)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 62.5%, 62.5%, 0)", "rgba(219, 219, 100, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 62.5%, 62.5%, 0.2)", "rgba(219, 219, 100, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 62.5%, 62.5%, 1)", "rgb(219, 219, 100)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 62.5%, 75%)", "rgb(231, 231, 151)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 62.5%, 75%, 0)", "rgba(231, 231, 151, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 62.5%, 75%, 0.2)", "rgba(231, 231, 151, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 62.5%, 75%, 1)", "rgb(231, 231, 151)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 62.5%, 87.5%)", "rgb(243, 243, 203)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 62.5%, 87.5%, 0)", "rgba(243, 243, 203, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 62.5%, 87.5%, 0.2)", "rgba(243, 243, 203, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 62.5%, 87.5%, 1)", "rgb(243, 243, 203)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 62.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 62.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 62.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 62.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 75%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 75%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 75%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 75%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 75%, 12.5%)", "rgb(56, 56, 8)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 75%, 12.5%, 0)", "rgba(56, 56, 8, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 75%, 12.5%, 0.2)", "rgba(56, 56, 8, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 75%, 12.5%, 1)", "rgb(56, 56, 8)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 75%, 25%)", "rgb(112, 112, 16)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 75%, 25%, 0)", "rgba(112, 112, 16, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 75%, 25%, 0.2)", "rgba(112, 112, 16, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 75%, 25%, 1)", "rgb(112, 112, 16)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 75%, 37.5%)", "rgb(167, 167, 24)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 75%, 37.5%, 0)", "rgba(167, 167, 24, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 75%, 37.5%, 0.2)", "rgba(167, 167, 24, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 75%, 37.5%, 1)", "rgb(167, 167, 24)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 75%, 50%)", "rgb(223, 223, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 75%, 50%, 0)", "rgba(223, 223, 32, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 75%, 50%, 0.2)", "rgba(223, 223, 32, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 75%, 50%, 1)", "rgb(223, 223, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 75%, 62.5%)", "rgb(231, 231, 88)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 75%, 62.5%, 0)", "rgba(231, 231, 88, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 75%, 62.5%, 0.2)", "rgba(231, 231, 88, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 75%, 62.5%, 1)", "rgb(231, 231, 88)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 75%, 75%)", "rgb(239, 239, 143)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 75%, 75%, 0)", "rgba(239, 239, 143, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 75%, 75%, 0.2)", "rgba(239, 239, 143, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 75%, 75%, 1)", "rgb(239, 239, 143)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 75%, 87.5%)", "rgb(247, 247, 199)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 75%, 87.5%, 0)", "rgba(247, 247, 199, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 75%, 87.5%, 0.2)", "rgba(247, 247, 199, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 75%, 87.5%, 1)", "rgb(247, 247, 199)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 75%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 75%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 75%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 75%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 87.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 87.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 87.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 87.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 87.5%, 12.5%)", "rgb(60, 60, 4)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 87.5%, 12.5%, 0)", "rgba(60, 60, 4, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 87.5%, 12.5%, 0.2)", "rgba(60, 60, 4, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 87.5%, 12.5%, 1)", "rgb(60, 60, 4)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 87.5%, 25%)", "rgb(120, 120, 8)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 87.5%, 25%, 0)", "rgba(120, 120, 8, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 87.5%, 25%, 0.2)", "rgba(120, 120, 8, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 87.5%, 25%, 1)", "rgb(120, 120, 8)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 87.5%, 37.5%)", "rgb(179, 179, 12)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 87.5%, 37.5%, 0)", "rgba(179, 179, 12, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 87.5%, 37.5%, 0.2)", "rgba(179, 179, 12, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 87.5%, 37.5%, 1)", "rgb(179, 179, 12)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 87.5%, 50%)", "rgb(239, 239, 16)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 87.5%, 50%, 0)", "rgba(239, 239, 16, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 87.5%, 50%, 0.2)", "rgba(239, 239, 16, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 87.5%, 50%, 1)", "rgb(239, 239, 16)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 87.5%, 62.5%)", "rgb(243, 243, 76)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 87.5%, 62.5%, 0)", "rgba(243, 243, 76, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 87.5%, 62.5%, 0.2)", "rgba(243, 243, 76, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 87.5%, 62.5%, 1)", "rgb(243, 243, 76)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 87.5%, 75%)", "rgb(247, 247, 135)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 87.5%, 75%, 0)", "rgba(247, 247, 135, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 87.5%, 75%, 0.2)", "rgba(247, 247, 135, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 87.5%, 75%, 1)", "rgb(247, 247, 135)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 87.5%, 87.5%)", "rgb(251, 251, 195)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 87.5%, 87.5%, 0)", "rgba(251, 251, 195, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 87.5%, 87.5%, 0.2)", "rgba(251, 251, 195, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 87.5%, 87.5%, 1)", "rgb(251, 251, 195)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 87.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 87.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 87.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 87.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 100%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 100%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 100%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 100%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 100%, 12.5%)", "rgb(64, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 100%, 12.5%, 0)", "rgba(64, 64, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 100%, 12.5%, 0.2)", "rgba(64, 64, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 100%, 12.5%, 1)", "rgb(64, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 100%, 25%)", "rgb(128, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 100%, 25%, 0)", "rgba(128, 128, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 100%, 25%, 0.2)", "rgba(128, 128, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 100%, 25%, 1)", "rgb(128, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 100%, 37.5%)", "rgb(191, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 100%, 37.5%, 0)", "rgba(191, 191, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 100%, 37.5%, 0.2)", "rgba(191, 191, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 100%, 37.5%, 1)", "rgb(191, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 100%, 50%)", "rgb(255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 100%, 50%, 0)", "rgba(255, 255, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 100%, 50%, 0.2)", "rgba(255, 255, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 100%, 50%, 1)", "rgb(255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 100%, 62.5%)", "rgb(255, 255, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 100%, 62.5%, 0)", "rgba(255, 255, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 100%, 62.5%, 0.2)", "rgba(255, 255, 64, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 100%, 62.5%, 1)", "rgb(255, 255, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 100%, 75%)", "rgb(255, 255, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 100%, 75%, 0)", "rgba(255, 255, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 100%, 75%, 0.2)", "rgba(255, 255, 128, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 100%, 75%, 1)", "rgb(255, 255, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 100%, 87.5%)", "rgb(255, 255, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 100%, 87.5%, 0)", "rgba(255, 255, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 100%, 87.5%, 0.2)", "rgba(255, 255, 191, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 100%, 87.5%, 1)", "rgb(255, 255, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsl(60, 100%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 100%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 100%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(60, 100%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 0%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 0%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 0%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 0%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 0%, 12.5%)", "rgb(32, 32, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 0%, 12.5%, 0)", "rgba(32, 32, 32, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 0%, 12.5%, 0.2)", "rgba(32, 32, 32, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 0%, 12.5%, 1)", "rgb(32, 32, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 0%, 25%)", "rgb(64, 64, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 0%, 25%, 0)", "rgba(64, 64, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 0%, 25%, 0.2)", "rgba(64, 64, 64, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 0%, 25%, 1)", "rgb(64, 64, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 0%, 37.5%)", "rgb(96, 96, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 0%, 37.5%, 0)", "rgba(96, 96, 96, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 0%, 37.5%, 0.2)", "rgba(96, 96, 96, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 0%, 37.5%, 1)", "rgb(96, 96, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 0%, 50%)", "rgb(128, 128, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 0%, 50%, 0)", "rgba(128, 128, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 0%, 50%, 0.2)", "rgba(128, 128, 128, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 0%, 50%, 1)", "rgb(128, 128, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 0%, 62.5%)", "rgb(159, 159, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 0%, 62.5%, 0)", "rgba(159, 159, 159, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 0%, 62.5%, 0.2)", "rgba(159, 159, 159, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 0%, 62.5%, 1)", "rgb(159, 159, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 0%, 75%)", "rgb(191, 191, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 0%, 75%, 0)", "rgba(191, 191, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 0%, 75%, 0.2)", "rgba(191, 191, 191, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 0%, 75%, 1)", "rgb(191, 191, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 0%, 87.5%)", "rgb(223, 223, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 0%, 87.5%, 0)", "rgba(223, 223, 223, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 0%, 87.5%, 0.2)", "rgba(223, 223, 223, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 0%, 87.5%, 1)", "rgb(223, 223, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 0%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 0%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 0%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 0%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 12.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 12.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 12.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 12.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 12.5%, 12.5%)", "rgb(32, 36, 28)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 12.5%, 12.5%, 0)", "rgba(32, 36, 28, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 12.5%, 12.5%, 0.2)", "rgba(32, 36, 28, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 12.5%, 12.5%, 1)", "rgb(32, 36, 28)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 12.5%, 25%)", "rgb(64, 72, 56)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 12.5%, 25%, 0)", "rgba(64, 72, 56, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 12.5%, 25%, 0.2)", "rgba(64, 72, 56, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 12.5%, 25%, 1)", "rgb(64, 72, 56)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 12.5%, 37.5%)", "rgb(96, 108, 84)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 12.5%, 37.5%, 0)", "rgba(96, 108, 84, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 12.5%, 37.5%, 0.2)", "rgba(96, 108, 84, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 12.5%, 37.5%, 1)", "rgb(96, 108, 84)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 12.5%, 50%)", "rgb(128, 143, 112)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 12.5%, 50%, 0)", "rgba(128, 143, 112, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 12.5%, 50%, 0.2)", "rgba(128, 143, 112, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 12.5%, 50%, 1)", "rgb(128, 143, 112)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 12.5%, 62.5%)", "rgb(159, 171, 147)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 12.5%, 62.5%, 0)", "rgba(159, 171, 147, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 12.5%, 62.5%, 0.2)", "rgba(159, 171, 147, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 12.5%, 62.5%, 1)", "rgb(159, 171, 147)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 12.5%, 75%)", "rgb(191, 199, 183)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 12.5%, 75%, 0)", "rgba(191, 199, 183, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 12.5%, 75%, 0.2)", "rgba(191, 199, 183, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 12.5%, 75%, 1)", "rgb(191, 199, 183)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 12.5%, 87.5%)", "rgb(223, 227, 219)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 12.5%, 87.5%, 0)", "rgba(223, 227, 219, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 12.5%, 87.5%, 0.2)", "rgba(223, 227, 219, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 12.5%, 87.5%, 1)", "rgb(223, 227, 219)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 12.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 12.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 12.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 12.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 25%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 25%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 25%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 25%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 25%, 12.5%)", "rgb(32, 40, 24)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 25%, 12.5%, 0)", "rgba(32, 40, 24, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 25%, 12.5%, 0.2)", "rgba(32, 40, 24, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 25%, 12.5%, 1)", "rgb(32, 40, 24)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 25%, 25%)", "rgb(64, 80, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 25%, 25%, 0)", "rgba(64, 80, 48, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 25%, 25%, 0.2)", "rgba(64, 80, 48, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 25%, 25%, 1)", "rgb(64, 80, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 25%, 37.5%)", "rgb(96, 120, 72)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 25%, 37.5%, 0)", "rgba(96, 120, 72, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 25%, 37.5%, 0.2)", "rgba(96, 120, 72, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 25%, 37.5%, 1)", "rgb(96, 120, 72)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 25%, 50%)", "rgb(128, 159, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 25%, 50%, 0)", "rgba(128, 159, 96, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 25%, 50%, 0.2)", "rgba(128, 159, 96, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 25%, 50%, 1)", "rgb(128, 159, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 25%, 62.5%)", "rgb(159, 183, 135)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 25%, 62.5%, 0)", "rgba(159, 183, 135, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 25%, 62.5%, 0.2)", "rgba(159, 183, 135, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 25%, 62.5%, 1)", "rgb(159, 183, 135)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 25%, 75%)", "rgb(191, 207, 175)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 25%, 75%, 0)", "rgba(191, 207, 175, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 25%, 75%, 0.2)", "rgba(191, 207, 175, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 25%, 75%, 1)", "rgb(191, 207, 175)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 25%, 87.5%)", "rgb(223, 231, 215)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 25%, 87.5%, 0)", "rgba(223, 231, 215, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 25%, 87.5%, 0.2)", "rgba(223, 231, 215, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 25%, 87.5%, 1)", "rgb(223, 231, 215)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 25%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 25%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 25%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 25%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 37.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 37.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 37.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 37.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 37.5%, 12.5%)", "rgb(32, 44, 20)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 37.5%, 12.5%, 0)", "rgba(32, 44, 20, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 37.5%, 12.5%, 0.2)", "rgba(32, 44, 20, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 37.5%, 12.5%, 1)", "rgb(32, 44, 20)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 37.5%, 25%)", "rgb(64, 88, 40)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 37.5%, 25%, 0)", "rgba(64, 88, 40, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 37.5%, 25%, 0.2)", "rgba(64, 88, 40, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 37.5%, 25%, 1)", "rgb(64, 88, 40)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 37.5%, 37.5%)", "rgb(96, 131, 60)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 37.5%, 37.5%, 0)", "rgba(96, 131, 60, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 37.5%, 37.5%, 0.2)", "rgba(96, 131, 60, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 37.5%, 37.5%, 1)", "rgb(96, 131, 60)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 37.5%, 50%)", "rgb(128, 175, 80)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 37.5%, 50%, 0)", "rgba(128, 175, 80, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 37.5%, 50%, 0.2)", "rgba(128, 175, 80, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 37.5%, 50%, 1)", "rgb(128, 175, 80)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 37.5%, 62.5%)", "rgb(159, 195, 124)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 37.5%, 62.5%, 0)", "rgba(159, 195, 124, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 37.5%, 62.5%, 0.2)", "rgba(159, 195, 124, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 37.5%, 62.5%, 1)", "rgb(159, 195, 124)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 37.5%, 75%)", "rgb(191, 215, 167)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 37.5%, 75%, 0)", "rgba(191, 215, 167, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 37.5%, 75%, 0.2)", "rgba(191, 215, 167, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 37.5%, 75%, 1)", "rgb(191, 215, 167)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 37.5%, 87.5%)", "rgb(223, 235, 211)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 37.5%, 87.5%, 0)", "rgba(223, 235, 211, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 37.5%, 87.5%, 0.2)", "rgba(223, 235, 211, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 37.5%, 87.5%, 1)", "rgb(223, 235, 211)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 37.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 37.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 37.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 37.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 50%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 50%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 50%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 50%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 50%, 12.5%)", "rgb(32, 48, 16)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 50%, 12.5%, 0)", "rgba(32, 48, 16, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 50%, 12.5%, 0.2)", "rgba(32, 48, 16, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 50%, 12.5%, 1)", "rgb(32, 48, 16)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 50%, 25%)", "rgb(64, 96, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 50%, 25%, 0)", "rgba(64, 96, 32, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 50%, 25%, 0.2)", "rgba(64, 96, 32, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 50%, 25%, 1)", "rgb(64, 96, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 50%, 37.5%)", "rgb(96, 143, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 50%, 37.5%, 0)", "rgba(96, 143, 48, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 50%, 37.5%, 0.2)", "rgba(96, 143, 48, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 50%, 37.5%, 1)", "rgb(96, 143, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 50%, 50%)", "rgb(128, 191, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 50%, 50%, 0)", "rgba(128, 191, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 50%, 50%, 0.2)", "rgba(128, 191, 64, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 50%, 50%, 1)", "rgb(128, 191, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 50%, 62.5%)", "rgb(159, 207, 112)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 50%, 62.5%, 0)", "rgba(159, 207, 112, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 50%, 62.5%, 0.2)", "rgba(159, 207, 112, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 50%, 62.5%, 1)", "rgb(159, 207, 112)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 50%, 75%)", "rgb(191, 223, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 50%, 75%, 0)", "rgba(191, 223, 159, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 50%, 75%, 0.2)", "rgba(191, 223, 159, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 50%, 75%, 1)", "rgb(191, 223, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 50%, 87.5%)", "rgb(223, 239, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 50%, 87.5%, 0)", "rgba(223, 239, 207, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 50%, 87.5%, 0.2)", "rgba(223, 239, 207, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 50%, 87.5%, 1)", "rgb(223, 239, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 50%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 50%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 50%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 50%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 62.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 62.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 62.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 62.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 62.5%, 12.5%)", "rgb(32, 52, 12)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 62.5%, 12.5%, 0)", "rgba(32, 52, 12, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 62.5%, 12.5%, 0.2)", "rgba(32, 52, 12, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 62.5%, 12.5%, 1)", "rgb(32, 52, 12)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 62.5%, 25%)", "rgb(64, 104, 24)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 62.5%, 25%, 0)", "rgba(64, 104, 24, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 62.5%, 25%, 0.2)", "rgba(64, 104, 24, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 62.5%, 25%, 1)", "rgb(64, 104, 24)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 62.5%, 37.5%)", "rgb(96, 155, 36)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 62.5%, 37.5%, 0)", "rgba(96, 155, 36, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 62.5%, 37.5%, 0.2)", "rgba(96, 155, 36, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 62.5%, 37.5%, 1)", "rgb(96, 155, 36)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 62.5%, 50%)", "rgb(128, 207, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 62.5%, 50%, 0)", "rgba(128, 207, 48, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 62.5%, 50%, 0.2)", "rgba(128, 207, 48, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 62.5%, 50%, 1)", "rgb(128, 207, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 62.5%, 62.5%)", "rgb(159, 219, 100)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 62.5%, 62.5%, 0)", "rgba(159, 219, 100, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 62.5%, 62.5%, 0.2)", "rgba(159, 219, 100, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 62.5%, 62.5%, 1)", "rgb(159, 219, 100)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 62.5%, 75%)", "rgb(191, 231, 151)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 62.5%, 75%, 0)", "rgba(191, 231, 151, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 62.5%, 75%, 0.2)", "rgba(191, 231, 151, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 62.5%, 75%, 1)", "rgb(191, 231, 151)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 62.5%, 87.5%)", "rgb(223, 243, 203)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 62.5%, 87.5%, 0)", "rgba(223, 243, 203, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 62.5%, 87.5%, 0.2)", "rgba(223, 243, 203, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 62.5%, 87.5%, 1)", "rgb(223, 243, 203)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 62.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 62.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 62.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 62.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 75%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 75%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 75%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 75%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 75%, 12.5%)", "rgb(32, 56, 8)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 75%, 12.5%, 0)", "rgba(32, 56, 8, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 75%, 12.5%, 0.2)", "rgba(32, 56, 8, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 75%, 12.5%, 1)", "rgb(32, 56, 8)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 75%, 25%)", "rgb(64, 112, 16)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 75%, 25%, 0)", "rgba(64, 112, 16, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 75%, 25%, 0.2)", "rgba(64, 112, 16, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 75%, 25%, 1)", "rgb(64, 112, 16)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 75%, 37.5%)", "rgb(96, 167, 24)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 75%, 37.5%, 0)", "rgba(96, 167, 24, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 75%, 37.5%, 0.2)", "rgba(96, 167, 24, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 75%, 37.5%, 1)", "rgb(96, 167, 24)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 75%, 50%)", "rgb(128, 223, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 75%, 50%, 0)", "rgba(128, 223, 32, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 75%, 50%, 0.2)", "rgba(128, 223, 32, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 75%, 50%, 1)", "rgb(128, 223, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 75%, 62.5%)", "rgb(159, 231, 88)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 75%, 62.5%, 0)", "rgba(159, 231, 88, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 75%, 62.5%, 0.2)", "rgba(159, 231, 88, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 75%, 62.5%, 1)", "rgb(159, 231, 88)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 75%, 75%)", "rgb(191, 239, 143)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 75%, 75%, 0)", "rgba(191, 239, 143, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 75%, 75%, 0.2)", "rgba(191, 239, 143, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 75%, 75%, 1)", "rgb(191, 239, 143)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 75%, 87.5%)", "rgb(223, 247, 199)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 75%, 87.5%, 0)", "rgba(223, 247, 199, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 75%, 87.5%, 0.2)", "rgba(223, 247, 199, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 75%, 87.5%, 1)", "rgb(223, 247, 199)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 75%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 75%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 75%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 75%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 87.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 87.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 87.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 87.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 87.5%, 12.5%)", "rgb(32, 60, 4)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 87.5%, 12.5%, 0)", "rgba(32, 60, 4, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 87.5%, 12.5%, 0.2)", "rgba(32, 60, 4, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 87.5%, 12.5%, 1)", "rgb(32, 60, 4)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 87.5%, 25%)", "rgb(64, 120, 8)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 87.5%, 25%, 0)", "rgba(64, 120, 8, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 87.5%, 25%, 0.2)", "rgba(64, 120, 8, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 87.5%, 25%, 1)", "rgb(64, 120, 8)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 87.5%, 37.5%)", "rgb(96, 179, 12)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 87.5%, 37.5%, 0)", "rgba(96, 179, 12, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 87.5%, 37.5%, 0.2)", "rgba(96, 179, 12, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 87.5%, 37.5%, 1)", "rgb(96, 179, 12)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 87.5%, 50%)", "rgb(128, 239, 16)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 87.5%, 50%, 0)", "rgba(128, 239, 16, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 87.5%, 50%, 0.2)", "rgba(128, 239, 16, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 87.5%, 50%, 1)", "rgb(128, 239, 16)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 87.5%, 62.5%)", "rgb(159, 243, 76)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 87.5%, 62.5%, 0)", "rgba(159, 243, 76, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 87.5%, 62.5%, 0.2)", "rgba(159, 243, 76, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 87.5%, 62.5%, 1)", "rgb(159, 243, 76)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 87.5%, 75%)", "rgb(191, 247, 135)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 87.5%, 75%, 0)", "rgba(191, 247, 135, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 87.5%, 75%, 0.2)", "rgba(191, 247, 135, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 87.5%, 75%, 1)", "rgb(191, 247, 135)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 87.5%, 87.5%)", "rgb(223, 251, 195)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 87.5%, 87.5%, 0)", "rgba(223, 251, 195, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 87.5%, 87.5%, 0.2)", "rgba(223, 251, 195, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 87.5%, 87.5%, 1)", "rgb(223, 251, 195)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 87.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 87.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 87.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 87.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 100%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 100%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 100%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 100%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 100%, 12.5%)", "rgb(32, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 100%, 12.5%, 0)", "rgba(32, 64, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 100%, 12.5%, 0.2)", "rgba(32, 64, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 100%, 12.5%, 1)", "rgb(32, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 100%, 25%)", "rgb(64, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 100%, 25%, 0)", "rgba(64, 128, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 100%, 25%, 0.2)", "rgba(64, 128, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 100%, 25%, 1)", "rgb(64, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 100%, 37.5%)", "rgb(96, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 100%, 37.5%, 0)", "rgba(96, 191, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 100%, 37.5%, 0.2)", "rgba(96, 191, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 100%, 37.5%, 1)", "rgb(96, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 100%, 50%)", "rgb(128, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 100%, 50%, 0)", "rgba(128, 255, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 100%, 50%, 0.2)", "rgba(128, 255, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 100%, 50%, 1)", "rgb(128, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 100%, 62.5%)", "rgb(159, 255, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 100%, 62.5%, 0)", "rgba(159, 255, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 100%, 62.5%, 0.2)", "rgba(159, 255, 64, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 100%, 62.5%, 1)", "rgb(159, 255, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 100%, 75%)", "rgb(191, 255, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 100%, 75%, 0)", "rgba(191, 255, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 100%, 75%, 0.2)", "rgba(191, 255, 128, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 100%, 75%, 1)", "rgb(191, 255, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 100%, 87.5%)", "rgb(223, 255, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 100%, 87.5%, 0)", "rgba(223, 255, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 100%, 87.5%, 0.2)", "rgba(223, 255, 191, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 100%, 87.5%, 1)", "rgb(223, 255, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsl(90, 100%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 100%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 100%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(90, 100%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 0%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 0%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 0%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 0%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 0%, 12.5%)", "rgb(32, 32, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 0%, 12.5%, 0)", "rgba(32, 32, 32, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 0%, 12.5%, 0.2)", "rgba(32, 32, 32, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 0%, 12.5%, 1)", "rgb(32, 32, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 0%, 25%)", "rgb(64, 64, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 0%, 25%, 0)", "rgba(64, 64, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 0%, 25%, 0.2)", "rgba(64, 64, 64, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 0%, 25%, 1)", "rgb(64, 64, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 0%, 37.5%)", "rgb(96, 96, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 0%, 37.5%, 0)", "rgba(96, 96, 96, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 0%, 37.5%, 0.2)", "rgba(96, 96, 96, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 0%, 37.5%, 1)", "rgb(96, 96, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 0%, 50%)", "rgb(128, 128, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 0%, 50%, 0)", "rgba(128, 128, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 0%, 50%, 0.2)", "rgba(128, 128, 128, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 0%, 50%, 1)", "rgb(128, 128, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 0%, 62.5%)", "rgb(159, 159, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 0%, 62.5%, 0)", "rgba(159, 159, 159, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 0%, 62.5%, 0.2)", "rgba(159, 159, 159, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 0%, 62.5%, 1)", "rgb(159, 159, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 0%, 75%)", "rgb(191, 191, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 0%, 75%, 0)", "rgba(191, 191, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 0%, 75%, 0.2)", "rgba(191, 191, 191, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 0%, 75%, 1)", "rgb(191, 191, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 0%, 87.5%)", "rgb(223, 223, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 0%, 87.5%, 0)", "rgba(223, 223, 223, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 0%, 87.5%, 0.2)", "rgba(223, 223, 223, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 0%, 87.5%, 1)", "rgb(223, 223, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 0%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 0%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 0%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 0%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 12.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 12.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 12.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 12.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 12.5%, 12.5%)", "rgb(28, 36, 28)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 12.5%, 12.5%, 0)", "rgba(28, 36, 28, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 12.5%, 12.5%, 0.2)", "rgba(28, 36, 28, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 12.5%, 12.5%, 1)", "rgb(28, 36, 28)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 12.5%, 25%)", "rgb(56, 72, 56)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 12.5%, 25%, 0)", "rgba(56, 72, 56, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 12.5%, 25%, 0.2)", "rgba(56, 72, 56, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 12.5%, 25%, 1)", "rgb(56, 72, 56)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 12.5%, 37.5%)", "rgb(84, 108, 84)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 12.5%, 37.5%, 0)", "rgba(84, 108, 84, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 12.5%, 37.5%, 0.2)", "rgba(84, 108, 84, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 12.5%, 37.5%, 1)", "rgb(84, 108, 84)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 12.5%, 50%)", "rgb(112, 143, 112)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 12.5%, 50%, 0)", "rgba(112, 143, 112, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 12.5%, 50%, 0.2)", "rgba(112, 143, 112, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 12.5%, 50%, 1)", "rgb(112, 143, 112)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 12.5%, 62.5%)", "rgb(147, 171, 147)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 12.5%, 62.5%, 0)", "rgba(147, 171, 147, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 12.5%, 62.5%, 0.2)", "rgba(147, 171, 147, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 12.5%, 62.5%, 1)", "rgb(147, 171, 147)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 12.5%, 75%)", "rgb(183, 199, 183)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 12.5%, 75%, 0)", "rgba(183, 199, 183, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 12.5%, 75%, 0.2)", "rgba(183, 199, 183, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 12.5%, 75%, 1)", "rgb(183, 199, 183)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 12.5%, 87.5%)", "rgb(219, 227, 219)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 12.5%, 87.5%, 0)", "rgba(219, 227, 219, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 12.5%, 87.5%, 0.2)", "rgba(219, 227, 219, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 12.5%, 87.5%, 1)", "rgb(219, 227, 219)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 12.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 12.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 12.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 12.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 25%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 25%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 25%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 25%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 25%, 12.5%)", "rgb(24, 40, 24)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 25%, 12.5%, 0)", "rgba(24, 40, 24, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 25%, 12.5%, 0.2)", "rgba(24, 40, 24, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 25%, 12.5%, 1)", "rgb(24, 40, 24)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 25%, 25%)", "rgb(48, 80, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 25%, 25%, 0)", "rgba(48, 80, 48, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 25%, 25%, 0.2)", "rgba(48, 80, 48, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 25%, 25%, 1)", "rgb(48, 80, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 25%, 37.5%)", "rgb(72, 120, 72)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 25%, 37.5%, 0)", "rgba(72, 120, 72, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 25%, 37.5%, 0.2)", "rgba(72, 120, 72, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 25%, 37.5%, 1)", "rgb(72, 120, 72)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 25%, 50%)", "rgb(96, 159, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 25%, 50%, 0)", "rgba(96, 159, 96, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 25%, 50%, 0.2)", "rgba(96, 159, 96, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 25%, 50%, 1)", "rgb(96, 159, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 25%, 62.5%)", "rgb(135, 183, 135)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 25%, 62.5%, 0)", "rgba(135, 183, 135, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 25%, 62.5%, 0.2)", "rgba(135, 183, 135, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 25%, 62.5%, 1)", "rgb(135, 183, 135)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 25%, 75%)", "rgb(175, 207, 175)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 25%, 75%, 0)", "rgba(175, 207, 175, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 25%, 75%, 0.2)", "rgba(175, 207, 175, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 25%, 75%, 1)", "rgb(175, 207, 175)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 25%, 87.5%)", "rgb(215, 231, 215)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 25%, 87.5%, 0)", "rgba(215, 231, 215, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 25%, 87.5%, 0.2)", "rgba(215, 231, 215, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 25%, 87.5%, 1)", "rgb(215, 231, 215)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 25%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 25%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 25%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 25%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 37.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 37.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 37.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 37.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 37.5%, 12.5%)", "rgb(20, 44, 20)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 37.5%, 12.5%, 0)", "rgba(20, 44, 20, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 37.5%, 12.5%, 0.2)", "rgba(20, 44, 20, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 37.5%, 12.5%, 1)", "rgb(20, 44, 20)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 37.5%, 25%)", "rgb(40, 88, 40)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 37.5%, 25%, 0)", "rgba(40, 88, 40, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 37.5%, 25%, 0.2)", "rgba(40, 88, 40, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 37.5%, 25%, 1)", "rgb(40, 88, 40)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 37.5%, 37.5%)", "rgb(60, 131, 60)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 37.5%, 37.5%, 0)", "rgba(60, 131, 60, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 37.5%, 37.5%, 0.2)", "rgba(60, 131, 60, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 37.5%, 37.5%, 1)", "rgb(60, 131, 60)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 37.5%, 50%)", "rgb(80, 175, 80)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 37.5%, 50%, 0)", "rgba(80, 175, 80, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 37.5%, 50%, 0.2)", "rgba(80, 175, 80, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 37.5%, 50%, 1)", "rgb(80, 175, 80)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 37.5%, 62.5%)", "rgb(124, 195, 124)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 37.5%, 62.5%, 0)", "rgba(124, 195, 124, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 37.5%, 62.5%, 0.2)", "rgba(124, 195, 124, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 37.5%, 62.5%, 1)", "rgb(124, 195, 124)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 37.5%, 75%)", "rgb(167, 215, 167)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 37.5%, 75%, 0)", "rgba(167, 215, 167, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 37.5%, 75%, 0.2)", "rgba(167, 215, 167, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 37.5%, 75%, 1)", "rgb(167, 215, 167)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 37.5%, 87.5%)", "rgb(211, 235, 211)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 37.5%, 87.5%, 0)", "rgba(211, 235, 211, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 37.5%, 87.5%, 0.2)", "rgba(211, 235, 211, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 37.5%, 87.5%, 1)", "rgb(211, 235, 211)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 37.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 37.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 37.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 37.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 50%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 50%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 50%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 50%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 50%, 12.5%)", "rgb(16, 48, 16)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 50%, 12.5%, 0)", "rgba(16, 48, 16, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 50%, 12.5%, 0.2)", "rgba(16, 48, 16, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 50%, 12.5%, 1)", "rgb(16, 48, 16)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 50%, 25%)", "rgb(32, 96, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 50%, 25%, 0)", "rgba(32, 96, 32, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 50%, 25%, 0.2)", "rgba(32, 96, 32, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 50%, 25%, 1)", "rgb(32, 96, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 50%, 37.5%)", "rgb(48, 143, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 50%, 37.5%, 0)", "rgba(48, 143, 48, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 50%, 37.5%, 0.2)", "rgba(48, 143, 48, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 50%, 37.5%, 1)", "rgb(48, 143, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 50%, 50%)", "rgb(64, 191, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 50%, 50%, 0)", "rgba(64, 191, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 50%, 50%, 0.2)", "rgba(64, 191, 64, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 50%, 50%, 1)", "rgb(64, 191, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 50%, 62.5%)", "rgb(112, 207, 112)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 50%, 62.5%, 0)", "rgba(112, 207, 112, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 50%, 62.5%, 0.2)", "rgba(112, 207, 112, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 50%, 62.5%, 1)", "rgb(112, 207, 112)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 50%, 75%)", "rgb(159, 223, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 50%, 75%, 0)", "rgba(159, 223, 159, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 50%, 75%, 0.2)", "rgba(159, 223, 159, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 50%, 75%, 1)", "rgb(159, 223, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 50%, 87.5%)", "rgb(207, 239, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 50%, 87.5%, 0)", "rgba(207, 239, 207, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 50%, 87.5%, 0.2)", "rgba(207, 239, 207, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 50%, 87.5%, 1)", "rgb(207, 239, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 50%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 50%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 50%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 50%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 62.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 62.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 62.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 62.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 62.5%, 12.5%)", "rgb(12, 52, 12)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 62.5%, 12.5%, 0)", "rgba(12, 52, 12, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 62.5%, 12.5%, 0.2)", "rgba(12, 52, 12, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 62.5%, 12.5%, 1)", "rgb(12, 52, 12)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 62.5%, 25%)", "rgb(24, 104, 24)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 62.5%, 25%, 0)", "rgba(24, 104, 24, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 62.5%, 25%, 0.2)", "rgba(24, 104, 24, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 62.5%, 25%, 1)", "rgb(24, 104, 24)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 62.5%, 37.5%)", "rgb(36, 155, 36)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 62.5%, 37.5%, 0)", "rgba(36, 155, 36, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 62.5%, 37.5%, 0.2)", "rgba(36, 155, 36, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 62.5%, 37.5%, 1)", "rgb(36, 155, 36)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 62.5%, 50%)", "rgb(48, 207, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 62.5%, 50%, 0)", "rgba(48, 207, 48, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 62.5%, 50%, 0.2)", "rgba(48, 207, 48, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 62.5%, 50%, 1)", "rgb(48, 207, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 62.5%, 62.5%)", "rgb(100, 219, 100)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 62.5%, 62.5%, 0)", "rgba(100, 219, 100, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 62.5%, 62.5%, 0.2)", "rgba(100, 219, 100, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 62.5%, 62.5%, 1)", "rgb(100, 219, 100)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 62.5%, 75%)", "rgb(151, 231, 151)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 62.5%, 75%, 0)", "rgba(151, 231, 151, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 62.5%, 75%, 0.2)", "rgba(151, 231, 151, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 62.5%, 75%, 1)", "rgb(151, 231, 151)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 62.5%, 87.5%)", "rgb(203, 243, 203)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 62.5%, 87.5%, 0)", "rgba(203, 243, 203, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 62.5%, 87.5%, 0.2)", "rgba(203, 243, 203, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 62.5%, 87.5%, 1)", "rgb(203, 243, 203)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 62.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 62.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 62.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 62.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 75%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 75%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 75%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 75%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 75%, 12.5%)", "rgb(8, 56, 8)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 75%, 12.5%, 0)", "rgba(8, 56, 8, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 75%, 12.5%, 0.2)", "rgba(8, 56, 8, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 75%, 12.5%, 1)", "rgb(8, 56, 8)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 75%, 25%)", "rgb(16, 112, 16)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 75%, 25%, 0)", "rgba(16, 112, 16, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 75%, 25%, 0.2)", "rgba(16, 112, 16, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 75%, 25%, 1)", "rgb(16, 112, 16)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 75%, 37.5%)", "rgb(24, 167, 24)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 75%, 37.5%, 0)", "rgba(24, 167, 24, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 75%, 37.5%, 0.2)", "rgba(24, 167, 24, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 75%, 37.5%, 1)", "rgb(24, 167, 24)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 75%, 50%)", "rgb(32, 223, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 75%, 50%, 0)", "rgba(32, 223, 32, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 75%, 50%, 0.2)", "rgba(32, 223, 32, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 75%, 50%, 1)", "rgb(32, 223, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 75%, 62.5%)", "rgb(88, 231, 88)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 75%, 62.5%, 0)", "rgba(88, 231, 88, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 75%, 62.5%, 0.2)", "rgba(88, 231, 88, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 75%, 62.5%, 1)", "rgb(88, 231, 88)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 75%, 75%)", "rgb(143, 239, 143)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 75%, 75%, 0)", "rgba(143, 239, 143, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 75%, 75%, 0.2)", "rgba(143, 239, 143, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 75%, 75%, 1)", "rgb(143, 239, 143)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 75%, 87.5%)", "rgb(199, 247, 199)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 75%, 87.5%, 0)", "rgba(199, 247, 199, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 75%, 87.5%, 0.2)", "rgba(199, 247, 199, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 75%, 87.5%, 1)", "rgb(199, 247, 199)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 75%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 75%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 75%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 75%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 87.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 87.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 87.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 87.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 87.5%, 12.5%)", "rgb(4, 60, 4)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 87.5%, 12.5%, 0)", "rgba(4, 60, 4, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 87.5%, 12.5%, 0.2)", "rgba(4, 60, 4, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 87.5%, 12.5%, 1)", "rgb(4, 60, 4)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 87.5%, 25%)", "rgb(8, 120, 8)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 87.5%, 25%, 0)", "rgba(8, 120, 8, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 87.5%, 25%, 0.2)", "rgba(8, 120, 8, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 87.5%, 25%, 1)", "rgb(8, 120, 8)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 87.5%, 37.5%)", "rgb(12, 179, 12)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 87.5%, 37.5%, 0)", "rgba(12, 179, 12, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 87.5%, 37.5%, 0.2)", "rgba(12, 179, 12, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 87.5%, 37.5%, 1)", "rgb(12, 179, 12)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 87.5%, 50%)", "rgb(16, 239, 16)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 87.5%, 50%, 0)", "rgba(16, 239, 16, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 87.5%, 50%, 0.2)", "rgba(16, 239, 16, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 87.5%, 50%, 1)", "rgb(16, 239, 16)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 87.5%, 62.5%)", "rgb(76, 243, 76)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 87.5%, 62.5%, 0)", "rgba(76, 243, 76, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 87.5%, 62.5%, 0.2)", "rgba(76, 243, 76, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 87.5%, 62.5%, 1)", "rgb(76, 243, 76)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 87.5%, 75%)", "rgb(135, 247, 135)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 87.5%, 75%, 0)", "rgba(135, 247, 135, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 87.5%, 75%, 0.2)", "rgba(135, 247, 135, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 87.5%, 75%, 1)", "rgb(135, 247, 135)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 87.5%, 87.5%)", "rgb(195, 251, 195)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 87.5%, 87.5%, 0)", "rgba(195, 251, 195, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 87.5%, 87.5%, 0.2)", "rgba(195, 251, 195, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 87.5%, 87.5%, 1)", "rgb(195, 251, 195)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 87.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 87.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 87.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 87.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 100%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 100%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 100%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 100%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 100%, 12.5%)", "rgb(0, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 100%, 12.5%, 0)", "rgba(0, 64, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 100%, 12.5%, 0.2)", "rgba(0, 64, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 100%, 12.5%, 1)", "rgb(0, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 100%, 25%)", "rgb(0, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 100%, 25%, 0)", "rgba(0, 128, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 100%, 25%, 0.2)", "rgba(0, 128, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 100%, 25%, 1)", "rgb(0, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 100%, 37.5%)", "rgb(0, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 100%, 37.5%, 0)", "rgba(0, 191, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 100%, 37.5%, 0.2)", "rgba(0, 191, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 100%, 37.5%, 1)", "rgb(0, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 100%, 50%)", "rgb(0, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 100%, 50%, 0)", "rgba(0, 255, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 100%, 50%, 0.2)", "rgba(0, 255, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 100%, 50%, 1)", "rgb(0, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 100%, 62.5%)", "rgb(64, 255, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 100%, 62.5%, 0)", "rgba(64, 255, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 100%, 62.5%, 0.2)", "rgba(64, 255, 64, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 100%, 62.5%, 1)", "rgb(64, 255, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 100%, 75%)", "rgb(128, 255, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 100%, 75%, 0)", "rgba(128, 255, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 100%, 75%, 0.2)", "rgba(128, 255, 128, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 100%, 75%, 1)", "rgb(128, 255, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 100%, 87.5%)", "rgb(191, 255, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 100%, 87.5%, 0)", "rgba(191, 255, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 100%, 87.5%, 0.2)", "rgba(191, 255, 191, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 100%, 87.5%, 1)", "rgb(191, 255, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsl(120, 100%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 100%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 100%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(120, 100%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 0%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 0%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 0%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 0%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 0%, 12.5%)", "rgb(32, 32, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 0%, 12.5%, 0)", "rgba(32, 32, 32, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 0%, 12.5%, 0.2)", "rgba(32, 32, 32, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 0%, 12.5%, 1)", "rgb(32, 32, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 0%, 25%)", "rgb(64, 64, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 0%, 25%, 0)", "rgba(64, 64, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 0%, 25%, 0.2)", "rgba(64, 64, 64, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 0%, 25%, 1)", "rgb(64, 64, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 0%, 37.5%)", "rgb(96, 96, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 0%, 37.5%, 0)", "rgba(96, 96, 96, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 0%, 37.5%, 0.2)", "rgba(96, 96, 96, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 0%, 37.5%, 1)", "rgb(96, 96, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 0%, 50%)", "rgb(128, 128, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 0%, 50%, 0)", "rgba(128, 128, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 0%, 50%, 0.2)", "rgba(128, 128, 128, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 0%, 50%, 1)", "rgb(128, 128, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 0%, 62.5%)", "rgb(159, 159, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 0%, 62.5%, 0)", "rgba(159, 159, 159, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 0%, 62.5%, 0.2)", "rgba(159, 159, 159, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 0%, 62.5%, 1)", "rgb(159, 159, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 0%, 75%)", "rgb(191, 191, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 0%, 75%, 0)", "rgba(191, 191, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 0%, 75%, 0.2)", "rgba(191, 191, 191, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 0%, 75%, 1)", "rgb(191, 191, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 0%, 87.5%)", "rgb(223, 223, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 0%, 87.5%, 0)", "rgba(223, 223, 223, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 0%, 87.5%, 0.2)", "rgba(223, 223, 223, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 0%, 87.5%, 1)", "rgb(223, 223, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 0%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 0%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 0%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 0%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 12.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 12.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 12.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 12.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 12.5%, 12.5%)", "rgb(28, 36, 36)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 12.5%, 12.5%, 0)", "rgba(28, 36, 36, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 12.5%, 12.5%, 0.2)", "rgba(28, 36, 36, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 12.5%, 12.5%, 1)", "rgb(28, 36, 36)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 12.5%, 25%)", "rgb(56, 72, 72)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 12.5%, 25%, 0)", "rgba(56, 72, 72, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 12.5%, 25%, 0.2)", "rgba(56, 72, 72, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 12.5%, 25%, 1)", "rgb(56, 72, 72)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 12.5%, 37.5%)", "rgb(84, 108, 108)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 12.5%, 37.5%, 0)", "rgba(84, 108, 108, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 12.5%, 37.5%, 0.2)", "rgba(84, 108, 108, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 12.5%, 37.5%, 1)", "rgb(84, 108, 108)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 12.5%, 50%)", "rgb(112, 143, 143)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 12.5%, 50%, 0)", "rgba(112, 143, 143, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 12.5%, 50%, 0.2)", "rgba(112, 143, 143, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 12.5%, 50%, 1)", "rgb(112, 143, 143)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 12.5%, 62.5%)", "rgb(147, 171, 171)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 12.5%, 62.5%, 0)", "rgba(147, 171, 171, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 12.5%, 62.5%, 0.2)", "rgba(147, 171, 171, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 12.5%, 62.5%, 1)", "rgb(147, 171, 171)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 12.5%, 75%)", "rgb(183, 199, 199)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 12.5%, 75%, 0)", "rgba(183, 199, 199, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 12.5%, 75%, 0.2)", "rgba(183, 199, 199, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 12.5%, 75%, 1)", "rgb(183, 199, 199)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 12.5%, 87.5%)", "rgb(219, 227, 227)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 12.5%, 87.5%, 0)", "rgba(219, 227, 227, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 12.5%, 87.5%, 0.2)", "rgba(219, 227, 227, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 12.5%, 87.5%, 1)", "rgb(219, 227, 227)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 12.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 12.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 12.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 12.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 25%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 25%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 25%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 25%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 25%, 12.5%)", "rgb(24, 40, 40)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 25%, 12.5%, 0)", "rgba(24, 40, 40, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 25%, 12.5%, 0.2)", "rgba(24, 40, 40, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 25%, 12.5%, 1)", "rgb(24, 40, 40)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 25%, 25%)", "rgb(48, 80, 80)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 25%, 25%, 0)", "rgba(48, 80, 80, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 25%, 25%, 0.2)", "rgba(48, 80, 80, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 25%, 25%, 1)", "rgb(48, 80, 80)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 25%, 37.5%)", "rgb(72, 120, 120)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 25%, 37.5%, 0)", "rgba(72, 120, 120, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 25%, 37.5%, 0.2)", "rgba(72, 120, 120, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 25%, 37.5%, 1)", "rgb(72, 120, 120)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 25%, 50%)", "rgb(96, 159, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 25%, 50%, 0)", "rgba(96, 159, 159, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 25%, 50%, 0.2)", "rgba(96, 159, 159, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 25%, 50%, 1)", "rgb(96, 159, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 25%, 62.5%)", "rgb(135, 183, 183)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 25%, 62.5%, 0)", "rgba(135, 183, 183, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 25%, 62.5%, 0.2)", "rgba(135, 183, 183, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 25%, 62.5%, 1)", "rgb(135, 183, 183)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 25%, 75%)", "rgb(175, 207, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 25%, 75%, 0)", "rgba(175, 207, 207, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 25%, 75%, 0.2)", "rgba(175, 207, 207, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 25%, 75%, 1)", "rgb(175, 207, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 25%, 87.5%)", "rgb(215, 231, 231)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 25%, 87.5%, 0)", "rgba(215, 231, 231, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 25%, 87.5%, 0.2)", "rgba(215, 231, 231, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 25%, 87.5%, 1)", "rgb(215, 231, 231)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 25%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 25%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 25%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 25%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 37.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 37.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 37.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 37.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 37.5%, 12.5%)", "rgb(20, 44, 44)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 37.5%, 12.5%, 0)", "rgba(20, 44, 44, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 37.5%, 12.5%, 0.2)", "rgba(20, 44, 44, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 37.5%, 12.5%, 1)", "rgb(20, 44, 44)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 37.5%, 25%)", "rgb(40, 88, 88)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 37.5%, 25%, 0)", "rgba(40, 88, 88, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 37.5%, 25%, 0.2)", "rgba(40, 88, 88, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 37.5%, 25%, 1)", "rgb(40, 88, 88)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 37.5%, 37.5%)", "rgb(60, 131, 131)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 37.5%, 37.5%, 0)", "rgba(60, 131, 131, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 37.5%, 37.5%, 0.2)", "rgba(60, 131, 131, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 37.5%, 37.5%, 1)", "rgb(60, 131, 131)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 37.5%, 50%)", "rgb(80, 175, 175)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 37.5%, 50%, 0)", "rgba(80, 175, 175, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 37.5%, 50%, 0.2)", "rgba(80, 175, 175, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 37.5%, 50%, 1)", "rgb(80, 175, 175)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 37.5%, 62.5%)", "rgb(124, 195, 195)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 37.5%, 62.5%, 0)", "rgba(124, 195, 195, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 37.5%, 62.5%, 0.2)", "rgba(124, 195, 195, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 37.5%, 62.5%, 1)", "rgb(124, 195, 195)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 37.5%, 75%)", "rgb(167, 215, 215)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 37.5%, 75%, 0)", "rgba(167, 215, 215, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 37.5%, 75%, 0.2)", "rgba(167, 215, 215, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 37.5%, 75%, 1)", "rgb(167, 215, 215)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 37.5%, 87.5%)", "rgb(211, 235, 235)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 37.5%, 87.5%, 0)", "rgba(211, 235, 235, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 37.5%, 87.5%, 0.2)", "rgba(211, 235, 235, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 37.5%, 87.5%, 1)", "rgb(211, 235, 235)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 37.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 37.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 37.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 37.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 50%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 50%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 50%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 50%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 50%, 12.5%)", "rgb(16, 48, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 50%, 12.5%, 0)", "rgba(16, 48, 48, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 50%, 12.5%, 0.2)", "rgba(16, 48, 48, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 50%, 12.5%, 1)", "rgb(16, 48, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 50%, 25%)", "rgb(32, 96, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 50%, 25%, 0)", "rgba(32, 96, 96, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 50%, 25%, 0.2)", "rgba(32, 96, 96, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 50%, 25%, 1)", "rgb(32, 96, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 50%, 37.5%)", "rgb(48, 143, 143)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 50%, 37.5%, 0)", "rgba(48, 143, 143, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 50%, 37.5%, 0.2)", "rgba(48, 143, 143, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 50%, 37.5%, 1)", "rgb(48, 143, 143)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 50%, 50%)", "rgb(64, 191, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 50%, 50%, 0)", "rgba(64, 191, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 50%, 50%, 0.2)", "rgba(64, 191, 191, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 50%, 50%, 1)", "rgb(64, 191, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 50%, 62.5%)", "rgb(112, 207, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 50%, 62.5%, 0)", "rgba(112, 207, 207, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 50%, 62.5%, 0.2)", "rgba(112, 207, 207, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 50%, 62.5%, 1)", "rgb(112, 207, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 50%, 75%)", "rgb(159, 223, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 50%, 75%, 0)", "rgba(159, 223, 223, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 50%, 75%, 0.2)", "rgba(159, 223, 223, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 50%, 75%, 1)", "rgb(159, 223, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 50%, 87.5%)", "rgb(207, 239, 239)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 50%, 87.5%, 0)", "rgba(207, 239, 239, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 50%, 87.5%, 0.2)", "rgba(207, 239, 239, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 50%, 87.5%, 1)", "rgb(207, 239, 239)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 50%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 50%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 50%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 50%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 62.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 62.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 62.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 62.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 62.5%, 12.5%)", "rgb(12, 52, 52)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 62.5%, 12.5%, 0)", "rgba(12, 52, 52, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 62.5%, 12.5%, 0.2)", "rgba(12, 52, 52, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 62.5%, 12.5%, 1)", "rgb(12, 52, 52)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 62.5%, 25%)", "rgb(24, 104, 104)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 62.5%, 25%, 0)", "rgba(24, 104, 104, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 62.5%, 25%, 0.2)", "rgba(24, 104, 104, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 62.5%, 25%, 1)", "rgb(24, 104, 104)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 62.5%, 37.5%)", "rgb(36, 155, 155)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 62.5%, 37.5%, 0)", "rgba(36, 155, 155, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 62.5%, 37.5%, 0.2)", "rgba(36, 155, 155, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 62.5%, 37.5%, 1)", "rgb(36, 155, 155)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 62.5%, 50%)", "rgb(48, 207, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 62.5%, 50%, 0)", "rgba(48, 207, 207, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 62.5%, 50%, 0.2)", "rgba(48, 207, 207, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 62.5%, 50%, 1)", "rgb(48, 207, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 62.5%, 62.5%)", "rgb(100, 219, 219)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 62.5%, 62.5%, 0)", "rgba(100, 219, 219, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 62.5%, 62.5%, 0.2)", "rgba(100, 219, 219, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 62.5%, 62.5%, 1)", "rgb(100, 219, 219)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 62.5%, 75%)", "rgb(151, 231, 231)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 62.5%, 75%, 0)", "rgba(151, 231, 231, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 62.5%, 75%, 0.2)", "rgba(151, 231, 231, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 62.5%, 75%, 1)", "rgb(151, 231, 231)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 62.5%, 87.5%)", "rgb(203, 243, 243)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 62.5%, 87.5%, 0)", "rgba(203, 243, 243, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 62.5%, 87.5%, 0.2)", "rgba(203, 243, 243, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 62.5%, 87.5%, 1)", "rgb(203, 243, 243)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 62.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 62.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 62.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 62.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 75%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 75%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 75%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 75%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 75%, 12.5%)", "rgb(8, 56, 56)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 75%, 12.5%, 0)", "rgba(8, 56, 56, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 75%, 12.5%, 0.2)", "rgba(8, 56, 56, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 75%, 12.5%, 1)", "rgb(8, 56, 56)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 75%, 25%)", "rgb(16, 112, 112)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 75%, 25%, 0)", "rgba(16, 112, 112, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 75%, 25%, 0.2)", "rgba(16, 112, 112, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 75%, 25%, 1)", "rgb(16, 112, 112)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 75%, 37.5%)", "rgb(24, 167, 167)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 75%, 37.5%, 0)", "rgba(24, 167, 167, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 75%, 37.5%, 0.2)", "rgba(24, 167, 167, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 75%, 37.5%, 1)", "rgb(24, 167, 167)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 75%, 50%)", "rgb(32, 223, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 75%, 50%, 0)", "rgba(32, 223, 223, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 75%, 50%, 0.2)", "rgba(32, 223, 223, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 75%, 50%, 1)", "rgb(32, 223, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 75%, 62.5%)", "rgb(88, 231, 231)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 75%, 62.5%, 0)", "rgba(88, 231, 231, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 75%, 62.5%, 0.2)", "rgba(88, 231, 231, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 75%, 62.5%, 1)", "rgb(88, 231, 231)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 75%, 75%)", "rgb(143, 239, 239)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 75%, 75%, 0)", "rgba(143, 239, 239, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 75%, 75%, 0.2)", "rgba(143, 239, 239, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 75%, 75%, 1)", "rgb(143, 239, 239)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 75%, 87.5%)", "rgb(199, 247, 247)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 75%, 87.5%, 0)", "rgba(199, 247, 247, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 75%, 87.5%, 0.2)", "rgba(199, 247, 247, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 75%, 87.5%, 1)", "rgb(199, 247, 247)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 75%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 75%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 75%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 75%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 87.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 87.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 87.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 87.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 87.5%, 12.5%)", "rgb(4, 60, 60)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 87.5%, 12.5%, 0)", "rgba(4, 60, 60, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 87.5%, 12.5%, 0.2)", "rgba(4, 60, 60, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 87.5%, 12.5%, 1)", "rgb(4, 60, 60)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 87.5%, 25%)", "rgb(8, 120, 120)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 87.5%, 25%, 0)", "rgba(8, 120, 120, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 87.5%, 25%, 0.2)", "rgba(8, 120, 120, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 87.5%, 25%, 1)", "rgb(8, 120, 120)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 87.5%, 37.5%)", "rgb(12, 179, 179)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 87.5%, 37.5%, 0)", "rgba(12, 179, 179, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 87.5%, 37.5%, 0.2)", "rgba(12, 179, 179, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 87.5%, 37.5%, 1)", "rgb(12, 179, 179)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 87.5%, 50%)", "rgb(16, 239, 239)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 87.5%, 50%, 0)", "rgba(16, 239, 239, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 87.5%, 50%, 0.2)", "rgba(16, 239, 239, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 87.5%, 50%, 1)", "rgb(16, 239, 239)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 87.5%, 62.5%)", "rgb(76, 243, 243)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 87.5%, 62.5%, 0)", "rgba(76, 243, 243, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 87.5%, 62.5%, 0.2)", "rgba(76, 243, 243, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 87.5%, 62.5%, 1)", "rgb(76, 243, 243)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 87.5%, 75%)", "rgb(135, 247, 247)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 87.5%, 75%, 0)", "rgba(135, 247, 247, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 87.5%, 75%, 0.2)", "rgba(135, 247, 247, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 87.5%, 75%, 1)", "rgb(135, 247, 247)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 87.5%, 87.5%)", "rgb(195, 251, 251)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 87.5%, 87.5%, 0)", "rgba(195, 251, 251, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 87.5%, 87.5%, 0.2)", "rgba(195, 251, 251, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 87.5%, 87.5%, 1)", "rgb(195, 251, 251)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 87.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 87.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 87.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 87.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 100%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 100%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 100%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 100%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 100%, 12.5%)", "rgb(0, 64, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 100%, 12.5%, 0)", "rgba(0, 64, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 100%, 12.5%, 0.2)", "rgba(0, 64, 64, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 100%, 12.5%, 1)", "rgb(0, 64, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 100%, 25%)", "rgb(0, 128, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 100%, 25%, 0)", "rgba(0, 128, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 100%, 25%, 0.2)", "rgba(0, 128, 128, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 100%, 25%, 1)", "rgb(0, 128, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 100%, 37.5%)", "rgb(0, 191, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 100%, 37.5%, 0)", "rgba(0, 191, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 100%, 37.5%, 0.2)", "rgba(0, 191, 191, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 100%, 37.5%, 1)", "rgb(0, 191, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 100%, 50%)", "rgb(0, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 100%, 50%, 0)", "rgba(0, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 100%, 50%, 0.2)", "rgba(0, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 100%, 50%, 1)", "rgb(0, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 100%, 62.5%)", "rgb(64, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 100%, 62.5%, 0)", "rgba(64, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 100%, 62.5%, 0.2)", "rgba(64, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 100%, 62.5%, 1)", "rgb(64, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 100%, 75%)", "rgb(128, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 100%, 75%, 0)", "rgba(128, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 100%, 75%, 0.2)", "rgba(128, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 100%, 75%, 1)", "rgb(128, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 100%, 87.5%)", "rgb(191, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 100%, 87.5%, 0)", "rgba(191, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 100%, 87.5%, 0.2)", "rgba(191, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 100%, 87.5%, 1)", "rgb(191, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(180, 100%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 100%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 100%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(180, 100%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 0%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 0%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 0%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 0%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 0%, 12.5%)", "rgb(32, 32, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 0%, 12.5%, 0)", "rgba(32, 32, 32, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 0%, 12.5%, 0.2)", "rgba(32, 32, 32, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 0%, 12.5%, 1)", "rgb(32, 32, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 0%, 25%)", "rgb(64, 64, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 0%, 25%, 0)", "rgba(64, 64, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 0%, 25%, 0.2)", "rgba(64, 64, 64, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 0%, 25%, 1)", "rgb(64, 64, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 0%, 37.5%)", "rgb(96, 96, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 0%, 37.5%, 0)", "rgba(96, 96, 96, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 0%, 37.5%, 0.2)", "rgba(96, 96, 96, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 0%, 37.5%, 1)", "rgb(96, 96, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 0%, 50%)", "rgb(128, 128, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 0%, 50%, 0)", "rgba(128, 128, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 0%, 50%, 0.2)", "rgba(128, 128, 128, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 0%, 50%, 1)", "rgb(128, 128, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 0%, 62.5%)", "rgb(159, 159, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 0%, 62.5%, 0)", "rgba(159, 159, 159, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 0%, 62.5%, 0.2)", "rgba(159, 159, 159, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 0%, 62.5%, 1)", "rgb(159, 159, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 0%, 75%)", "rgb(191, 191, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 0%, 75%, 0)", "rgba(191, 191, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 0%, 75%, 0.2)", "rgba(191, 191, 191, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 0%, 75%, 1)", "rgb(191, 191, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 0%, 87.5%)", "rgb(223, 223, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 0%, 87.5%, 0)", "rgba(223, 223, 223, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 0%, 87.5%, 0.2)", "rgba(223, 223, 223, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 0%, 87.5%, 1)", "rgb(223, 223, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 0%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 0%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 0%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 0%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 12.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 12.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 12.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 12.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 12.5%, 12.5%)", "rgb(28, 32, 36)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 12.5%, 12.5%, 0)", "rgba(28, 32, 36, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 12.5%, 12.5%, 0.2)", "rgba(28, 32, 36, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 12.5%, 12.5%, 1)", "rgb(28, 32, 36)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 12.5%, 25%)", "rgb(56, 64, 72)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 12.5%, 25%, 0)", "rgba(56, 64, 72, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 12.5%, 25%, 0.2)", "rgba(56, 64, 72, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 12.5%, 25%, 1)", "rgb(56, 64, 72)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 12.5%, 37.5%)", "rgb(84, 96, 108)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 12.5%, 37.5%, 0)", "rgba(84, 96, 108, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 12.5%, 37.5%, 0.2)", "rgba(84, 96, 108, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 12.5%, 37.5%, 1)", "rgb(84, 96, 108)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 12.5%, 50%)", "rgb(112, 128, 143)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 12.5%, 50%, 0)", "rgba(112, 128, 143, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 12.5%, 50%, 0.2)", "rgba(112, 128, 143, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 12.5%, 50%, 1)", "rgb(112, 128, 143)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 12.5%, 62.5%)", "rgb(147, 159, 171)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 12.5%, 62.5%, 0)", "rgba(147, 159, 171, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 12.5%, 62.5%, 0.2)", "rgba(147, 159, 171, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 12.5%, 62.5%, 1)", "rgb(147, 159, 171)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 12.5%, 75%)", "rgb(183, 191, 199)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 12.5%, 75%, 0)", "rgba(183, 191, 199, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 12.5%, 75%, 0.2)", "rgba(183, 191, 199, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 12.5%, 75%, 1)", "rgb(183, 191, 199)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 12.5%, 87.5%)", "rgb(219, 223, 227)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 12.5%, 87.5%, 0)", "rgba(219, 223, 227, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 12.5%, 87.5%, 0.2)", "rgba(219, 223, 227, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 12.5%, 87.5%, 1)", "rgb(219, 223, 227)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 12.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 12.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 12.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 12.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 25%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 25%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 25%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 25%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 25%, 12.5%)", "rgb(24, 32, 40)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 25%, 12.5%, 0)", "rgba(24, 32, 40, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 25%, 12.5%, 0.2)", "rgba(24, 32, 40, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 25%, 12.5%, 1)", "rgb(24, 32, 40)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 25%, 25%)", "rgb(48, 64, 80)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 25%, 25%, 0)", "rgba(48, 64, 80, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 25%, 25%, 0.2)", "rgba(48, 64, 80, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 25%, 25%, 1)", "rgb(48, 64, 80)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 25%, 37.5%)", "rgb(72, 96, 120)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 25%, 37.5%, 0)", "rgba(72, 96, 120, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 25%, 37.5%, 0.2)", "rgba(72, 96, 120, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 25%, 37.5%, 1)", "rgb(72, 96, 120)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 25%, 50%)", "rgb(96, 128, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 25%, 50%, 0)", "rgba(96, 128, 159, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 25%, 50%, 0.2)", "rgba(96, 128, 159, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 25%, 50%, 1)", "rgb(96, 128, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 25%, 62.5%)", "rgb(135, 159, 183)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 25%, 62.5%, 0)", "rgba(135, 159, 183, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 25%, 62.5%, 0.2)", "rgba(135, 159, 183, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 25%, 62.5%, 1)", "rgb(135, 159, 183)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 25%, 75%)", "rgb(175, 191, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 25%, 75%, 0)", "rgba(175, 191, 207, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 25%, 75%, 0.2)", "rgba(175, 191, 207, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 25%, 75%, 1)", "rgb(175, 191, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 25%, 87.5%)", "rgb(215, 223, 231)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 25%, 87.5%, 0)", "rgba(215, 223, 231, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 25%, 87.5%, 0.2)", "rgba(215, 223, 231, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 25%, 87.5%, 1)", "rgb(215, 223, 231)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 25%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 25%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 25%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 25%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 37.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 37.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 37.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 37.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 37.5%, 12.5%)", "rgb(20, 32, 44)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 37.5%, 12.5%, 0)", "rgba(20, 32, 44, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 37.5%, 12.5%, 0.2)", "rgba(20, 32, 44, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 37.5%, 12.5%, 1)", "rgb(20, 32, 44)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 37.5%, 25%)", "rgb(40, 64, 88)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 37.5%, 25%, 0)", "rgba(40, 64, 88, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 37.5%, 25%, 0.2)", "rgba(40, 64, 88, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 37.5%, 25%, 1)", "rgb(40, 64, 88)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 37.5%, 37.5%)", "rgb(60, 96, 131)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 37.5%, 37.5%, 0)", "rgba(60, 96, 131, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 37.5%, 37.5%, 0.2)", "rgba(60, 96, 131, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 37.5%, 37.5%, 1)", "rgb(60, 96, 131)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 37.5%, 50%)", "rgb(80, 128, 175)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 37.5%, 50%, 0)", "rgba(80, 128, 175, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 37.5%, 50%, 0.2)", "rgba(80, 128, 175, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 37.5%, 50%, 1)", "rgb(80, 128, 175)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 37.5%, 62.5%)", "rgb(124, 159, 195)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 37.5%, 62.5%, 0)", "rgba(124, 159, 195, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 37.5%, 62.5%, 0.2)", "rgba(124, 159, 195, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 37.5%, 62.5%, 1)", "rgb(124, 159, 195)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 37.5%, 75%)", "rgb(167, 191, 215)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 37.5%, 75%, 0)", "rgba(167, 191, 215, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 37.5%, 75%, 0.2)", "rgba(167, 191, 215, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 37.5%, 75%, 1)", "rgb(167, 191, 215)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 37.5%, 87.5%)", "rgb(211, 223, 235)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 37.5%, 87.5%, 0)", "rgba(211, 223, 235, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 37.5%, 87.5%, 0.2)", "rgba(211, 223, 235, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 37.5%, 87.5%, 1)", "rgb(211, 223, 235)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 37.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 37.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 37.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 37.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 50%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 50%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 50%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 50%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 50%, 12.5%)", "rgb(16, 32, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 50%, 12.5%, 0)", "rgba(16, 32, 48, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 50%, 12.5%, 0.2)", "rgba(16, 32, 48, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 50%, 12.5%, 1)", "rgb(16, 32, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 50%, 25%)", "rgb(32, 64, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 50%, 25%, 0)", "rgba(32, 64, 96, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 50%, 25%, 0.2)", "rgba(32, 64, 96, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 50%, 25%, 1)", "rgb(32, 64, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 50%, 37.5%)", "rgb(48, 96, 143)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 50%, 37.5%, 0)", "rgba(48, 96, 143, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 50%, 37.5%, 0.2)", "rgba(48, 96, 143, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 50%, 37.5%, 1)", "rgb(48, 96, 143)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 50%, 50%)", "rgb(64, 128, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 50%, 50%, 0)", "rgba(64, 128, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 50%, 50%, 0.2)", "rgba(64, 128, 191, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 50%, 50%, 1)", "rgb(64, 128, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 50%, 62.5%)", "rgb(112, 159, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 50%, 62.5%, 0)", "rgba(112, 159, 207, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 50%, 62.5%, 0.2)", "rgba(112, 159, 207, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 50%, 62.5%, 1)", "rgb(112, 159, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 50%, 75%)", "rgb(159, 191, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 50%, 75%, 0)", "rgba(159, 191, 223, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 50%, 75%, 0.2)", "rgba(159, 191, 223, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 50%, 75%, 1)", "rgb(159, 191, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 50%, 87.5%)", "rgb(207, 223, 239)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 50%, 87.5%, 0)", "rgba(207, 223, 239, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 50%, 87.5%, 0.2)", "rgba(207, 223, 239, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 50%, 87.5%, 1)", "rgb(207, 223, 239)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 50%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 50%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 50%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 50%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 62.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 62.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 62.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 62.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 62.5%, 12.5%)", "rgb(12, 32, 52)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 62.5%, 12.5%, 0)", "rgba(12, 32, 52, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 62.5%, 12.5%, 0.2)", "rgba(12, 32, 52, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 62.5%, 12.5%, 1)", "rgb(12, 32, 52)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 62.5%, 25%)", "rgb(24, 64, 104)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 62.5%, 25%, 0)", "rgba(24, 64, 104, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 62.5%, 25%, 0.2)", "rgba(24, 64, 104, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 62.5%, 25%, 1)", "rgb(24, 64, 104)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 62.5%, 37.5%)", "rgb(36, 96, 155)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 62.5%, 37.5%, 0)", "rgba(36, 96, 155, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 62.5%, 37.5%, 0.2)", "rgba(36, 96, 155, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 62.5%, 37.5%, 1)", "rgb(36, 96, 155)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 62.5%, 50%)", "rgb(48, 128, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 62.5%, 50%, 0)", "rgba(48, 128, 207, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 62.5%, 50%, 0.2)", "rgba(48, 128, 207, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 62.5%, 50%, 1)", "rgb(48, 128, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 62.5%, 62.5%)", "rgb(100, 159, 219)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 62.5%, 62.5%, 0)", "rgba(100, 159, 219, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 62.5%, 62.5%, 0.2)", "rgba(100, 159, 219, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 62.5%, 62.5%, 1)", "rgb(100, 159, 219)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 62.5%, 75%)", "rgb(151, 191, 231)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 62.5%, 75%, 0)", "rgba(151, 191, 231, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 62.5%, 75%, 0.2)", "rgba(151, 191, 231, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 62.5%, 75%, 1)", "rgb(151, 191, 231)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 62.5%, 87.5%)", "rgb(203, 223, 243)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 62.5%, 87.5%, 0)", "rgba(203, 223, 243, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 62.5%, 87.5%, 0.2)", "rgba(203, 223, 243, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 62.5%, 87.5%, 1)", "rgb(203, 223, 243)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 62.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 62.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 62.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 62.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 75%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 75%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 75%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 75%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 75%, 12.5%)", "rgb(8, 32, 56)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 75%, 12.5%, 0)", "rgba(8, 32, 56, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 75%, 12.5%, 0.2)", "rgba(8, 32, 56, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 75%, 12.5%, 1)", "rgb(8, 32, 56)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 75%, 25%)", "rgb(16, 64, 112)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 75%, 25%, 0)", "rgba(16, 64, 112, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 75%, 25%, 0.2)", "rgba(16, 64, 112, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 75%, 25%, 1)", "rgb(16, 64, 112)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 75%, 37.5%)", "rgb(24, 96, 167)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 75%, 37.5%, 0)", "rgba(24, 96, 167, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 75%, 37.5%, 0.2)", "rgba(24, 96, 167, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 75%, 37.5%, 1)", "rgb(24, 96, 167)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 75%, 50%)", "rgb(32, 128, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 75%, 50%, 0)", "rgba(32, 128, 223, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 75%, 50%, 0.2)", "rgba(32, 128, 223, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 75%, 50%, 1)", "rgb(32, 128, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 75%, 62.5%)", "rgb(88, 159, 231)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 75%, 62.5%, 0)", "rgba(88, 159, 231, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 75%, 62.5%, 0.2)", "rgba(88, 159, 231, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 75%, 62.5%, 1)", "rgb(88, 159, 231)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 75%, 75%)", "rgb(143, 191, 239)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 75%, 75%, 0)", "rgba(143, 191, 239, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 75%, 75%, 0.2)", "rgba(143, 191, 239, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 75%, 75%, 1)", "rgb(143, 191, 239)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 75%, 87.5%)", "rgb(199, 223, 247)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 75%, 87.5%, 0)", "rgba(199, 223, 247, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 75%, 87.5%, 0.2)", "rgba(199, 223, 247, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 75%, 87.5%, 1)", "rgb(199, 223, 247)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 75%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 75%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 75%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 75%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 87.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 87.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 87.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 87.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 87.5%, 12.5%)", "rgb(4, 32, 60)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 87.5%, 12.5%, 0)", "rgba(4, 32, 60, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 87.5%, 12.5%, 0.2)", "rgba(4, 32, 60, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 87.5%, 12.5%, 1)", "rgb(4, 32, 60)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 87.5%, 25%)", "rgb(8, 64, 120)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 87.5%, 25%, 0)", "rgba(8, 64, 120, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 87.5%, 25%, 0.2)", "rgba(8, 64, 120, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 87.5%, 25%, 1)", "rgb(8, 64, 120)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 87.5%, 37.5%)", "rgb(12, 96, 179)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 87.5%, 37.5%, 0)", "rgba(12, 96, 179, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 87.5%, 37.5%, 0.2)", "rgba(12, 96, 179, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 87.5%, 37.5%, 1)", "rgb(12, 96, 179)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 87.5%, 50%)", "rgb(16, 128, 239)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 87.5%, 50%, 0)", "rgba(16, 128, 239, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 87.5%, 50%, 0.2)", "rgba(16, 128, 239, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 87.5%, 50%, 1)", "rgb(16, 128, 239)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 87.5%, 62.5%)", "rgb(76, 159, 243)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 87.5%, 62.5%, 0)", "rgba(76, 159, 243, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 87.5%, 62.5%, 0.2)", "rgba(76, 159, 243, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 87.5%, 62.5%, 1)", "rgb(76, 159, 243)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 87.5%, 75%)", "rgb(135, 191, 247)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 87.5%, 75%, 0)", "rgba(135, 191, 247, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 87.5%, 75%, 0.2)", "rgba(135, 191, 247, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 87.5%, 75%, 1)", "rgb(135, 191, 247)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 87.5%, 87.5%)", "rgb(195, 223, 251)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 87.5%, 87.5%, 0)", "rgba(195, 223, 251, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 87.5%, 87.5%, 0.2)", "rgba(195, 223, 251, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 87.5%, 87.5%, 1)", "rgb(195, 223, 251)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 87.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 87.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 87.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 87.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 100%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 100%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 100%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 100%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 100%, 12.5%)", "rgb(0, 32, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 100%, 12.5%, 0)", "rgba(0, 32, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 100%, 12.5%, 0.2)", "rgba(0, 32, 64, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 100%, 12.5%, 1)", "rgb(0, 32, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 100%, 25%)", "rgb(0, 64, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 100%, 25%, 0)", "rgba(0, 64, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 100%, 25%, 0.2)", "rgba(0, 64, 128, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 100%, 25%, 1)", "rgb(0, 64, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 100%, 37.5%)", "rgb(0, 96, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 100%, 37.5%, 0)", "rgba(0, 96, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 100%, 37.5%, 0.2)", "rgba(0, 96, 191, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 100%, 37.5%, 1)", "rgb(0, 96, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 100%, 50%)", "rgb(0, 128, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 100%, 50%, 0)", "rgba(0, 128, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 100%, 50%, 0.2)", "rgba(0, 128, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 100%, 50%, 1)", "rgb(0, 128, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 100%, 62.5%)", "rgb(64, 159, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 100%, 62.5%, 0)", "rgba(64, 159, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 100%, 62.5%, 0.2)", "rgba(64, 159, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 100%, 62.5%, 1)", "rgb(64, 159, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 100%, 75%)", "rgb(128, 191, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 100%, 75%, 0)", "rgba(128, 191, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 100%, 75%, 0.2)", "rgba(128, 191, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 100%, 75%, 1)", "rgb(128, 191, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 100%, 87.5%)", "rgb(191, 223, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 100%, 87.5%, 0)", "rgba(191, 223, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 100%, 87.5%, 0.2)", "rgba(191, 223, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 100%, 87.5%, 1)", "rgb(191, 223, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(210, 100%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 100%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 100%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(210, 100%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 0%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 0%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 0%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 0%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 0%, 12.5%)", "rgb(32, 32, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 0%, 12.5%, 0)", "rgba(32, 32, 32, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 0%, 12.5%, 0.2)", "rgba(32, 32, 32, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 0%, 12.5%, 1)", "rgb(32, 32, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 0%, 25%)", "rgb(64, 64, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 0%, 25%, 0)", "rgba(64, 64, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 0%, 25%, 0.2)", "rgba(64, 64, 64, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 0%, 25%, 1)", "rgb(64, 64, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 0%, 37.5%)", "rgb(96, 96, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 0%, 37.5%, 0)", "rgba(96, 96, 96, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 0%, 37.5%, 0.2)", "rgba(96, 96, 96, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 0%, 37.5%, 1)", "rgb(96, 96, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 0%, 50%)", "rgb(128, 128, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 0%, 50%, 0)", "rgba(128, 128, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 0%, 50%, 0.2)", "rgba(128, 128, 128, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 0%, 50%, 1)", "rgb(128, 128, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 0%, 62.5%)", "rgb(159, 159, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 0%, 62.5%, 0)", "rgba(159, 159, 159, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 0%, 62.5%, 0.2)", "rgba(159, 159, 159, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 0%, 62.5%, 1)", "rgb(159, 159, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 0%, 75%)", "rgb(191, 191, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 0%, 75%, 0)", "rgba(191, 191, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 0%, 75%, 0.2)", "rgba(191, 191, 191, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 0%, 75%, 1)", "rgb(191, 191, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 0%, 87.5%)", "rgb(223, 223, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 0%, 87.5%, 0)", "rgba(223, 223, 223, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 0%, 87.5%, 0.2)", "rgba(223, 223, 223, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 0%, 87.5%, 1)", "rgb(223, 223, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 0%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 0%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 0%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 0%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 12.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 12.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 12.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 12.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 12.5%, 12.5%)", "rgb(28, 28, 36)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 12.5%, 12.5%, 0)", "rgba(28, 28, 36, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 12.5%, 12.5%, 0.2)", "rgba(28, 28, 36, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 12.5%, 12.5%, 1)", "rgb(28, 28, 36)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 12.5%, 25%)", "rgb(56, 56, 72)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 12.5%, 25%, 0)", "rgba(56, 56, 72, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 12.5%, 25%, 0.2)", "rgba(56, 56, 72, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 12.5%, 25%, 1)", "rgb(56, 56, 72)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 12.5%, 37.5%)", "rgb(84, 84, 108)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 12.5%, 37.5%, 0)", "rgba(84, 84, 108, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 12.5%, 37.5%, 0.2)", "rgba(84, 84, 108, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 12.5%, 37.5%, 1)", "rgb(84, 84, 108)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 12.5%, 50%)", "rgb(112, 112, 143)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 12.5%, 50%, 0)", "rgba(112, 112, 143, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 12.5%, 50%, 0.2)", "rgba(112, 112, 143, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 12.5%, 50%, 1)", "rgb(112, 112, 143)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 12.5%, 62.5%)", "rgb(147, 147, 171)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 12.5%, 62.5%, 0)", "rgba(147, 147, 171, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 12.5%, 62.5%, 0.2)", "rgba(147, 147, 171, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 12.5%, 62.5%, 1)", "rgb(147, 147, 171)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 12.5%, 75%)", "rgb(183, 183, 199)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 12.5%, 75%, 0)", "rgba(183, 183, 199, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 12.5%, 75%, 0.2)", "rgba(183, 183, 199, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 12.5%, 75%, 1)", "rgb(183, 183, 199)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 12.5%, 87.5%)", "rgb(219, 219, 227)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 12.5%, 87.5%, 0)", "rgba(219, 219, 227, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 12.5%, 87.5%, 0.2)", "rgba(219, 219, 227, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 12.5%, 87.5%, 1)", "rgb(219, 219, 227)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 12.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 12.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 12.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 12.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 25%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 25%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 25%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 25%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 25%, 12.5%)", "rgb(24, 24, 40)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 25%, 12.5%, 0)", "rgba(24, 24, 40, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 25%, 12.5%, 0.2)", "rgba(24, 24, 40, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 25%, 12.5%, 1)", "rgb(24, 24, 40)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 25%, 25%)", "rgb(48, 48, 80)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 25%, 25%, 0)", "rgba(48, 48, 80, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 25%, 25%, 0.2)", "rgba(48, 48, 80, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 25%, 25%, 1)", "rgb(48, 48, 80)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 25%, 37.5%)", "rgb(72, 72, 120)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 25%, 37.5%, 0)", "rgba(72, 72, 120, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 25%, 37.5%, 0.2)", "rgba(72, 72, 120, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 25%, 37.5%, 1)", "rgb(72, 72, 120)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 25%, 50%)", "rgb(96, 96, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 25%, 50%, 0)", "rgba(96, 96, 159, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 25%, 50%, 0.2)", "rgba(96, 96, 159, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 25%, 50%, 1)", "rgb(96, 96, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 25%, 62.5%)", "rgb(135, 135, 183)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 25%, 62.5%, 0)", "rgba(135, 135, 183, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 25%, 62.5%, 0.2)", "rgba(135, 135, 183, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 25%, 62.5%, 1)", "rgb(135, 135, 183)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 25%, 75%)", "rgb(175, 175, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 25%, 75%, 0)", "rgba(175, 175, 207, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 25%, 75%, 0.2)", "rgba(175, 175, 207, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 25%, 75%, 1)", "rgb(175, 175, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 25%, 87.5%)", "rgb(215, 215, 231)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 25%, 87.5%, 0)", "rgba(215, 215, 231, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 25%, 87.5%, 0.2)", "rgba(215, 215, 231, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 25%, 87.5%, 1)", "rgb(215, 215, 231)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 25%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 25%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 25%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 25%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 37.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 37.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 37.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 37.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 37.5%, 12.5%)", "rgb(20, 20, 44)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 37.5%, 12.5%, 0)", "rgba(20, 20, 44, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 37.5%, 12.5%, 0.2)", "rgba(20, 20, 44, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 37.5%, 12.5%, 1)", "rgb(20, 20, 44)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 37.5%, 25%)", "rgb(40, 40, 88)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 37.5%, 25%, 0)", "rgba(40, 40, 88, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 37.5%, 25%, 0.2)", "rgba(40, 40, 88, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 37.5%, 25%, 1)", "rgb(40, 40, 88)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 37.5%, 37.5%)", "rgb(60, 60, 131)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 37.5%, 37.5%, 0)", "rgba(60, 60, 131, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 37.5%, 37.5%, 0.2)", "rgba(60, 60, 131, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 37.5%, 37.5%, 1)", "rgb(60, 60, 131)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 37.5%, 50%)", "rgb(80, 80, 175)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 37.5%, 50%, 0)", "rgba(80, 80, 175, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 37.5%, 50%, 0.2)", "rgba(80, 80, 175, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 37.5%, 50%, 1)", "rgb(80, 80, 175)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 37.5%, 62.5%)", "rgb(124, 124, 195)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 37.5%, 62.5%, 0)", "rgba(124, 124, 195, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 37.5%, 62.5%, 0.2)", "rgba(124, 124, 195, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 37.5%, 62.5%, 1)", "rgb(124, 124, 195)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 37.5%, 75%)", "rgb(167, 167, 215)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 37.5%, 75%, 0)", "rgba(167, 167, 215, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 37.5%, 75%, 0.2)", "rgba(167, 167, 215, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 37.5%, 75%, 1)", "rgb(167, 167, 215)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 37.5%, 87.5%)", "rgb(211, 211, 235)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 37.5%, 87.5%, 0)", "rgba(211, 211, 235, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 37.5%, 87.5%, 0.2)", "rgba(211, 211, 235, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 37.5%, 87.5%, 1)", "rgb(211, 211, 235)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 37.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 37.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 37.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 37.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 50%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 50%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 50%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 50%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 50%, 12.5%)", "rgb(16, 16, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 50%, 12.5%, 0)", "rgba(16, 16, 48, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 50%, 12.5%, 0.2)", "rgba(16, 16, 48, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 50%, 12.5%, 1)", "rgb(16, 16, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 50%, 25%)", "rgb(32, 32, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 50%, 25%, 0)", "rgba(32, 32, 96, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 50%, 25%, 0.2)", "rgba(32, 32, 96, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 50%, 25%, 1)", "rgb(32, 32, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 50%, 37.5%)", "rgb(48, 48, 143)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 50%, 37.5%, 0)", "rgba(48, 48, 143, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 50%, 37.5%, 0.2)", "rgba(48, 48, 143, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 50%, 37.5%, 1)", "rgb(48, 48, 143)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 50%, 50%)", "rgb(64, 64, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 50%, 50%, 0)", "rgba(64, 64, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 50%, 50%, 0.2)", "rgba(64, 64, 191, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 50%, 50%, 1)", "rgb(64, 64, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 50%, 62.5%)", "rgb(112, 112, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 50%, 62.5%, 0)", "rgba(112, 112, 207, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 50%, 62.5%, 0.2)", "rgba(112, 112, 207, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 50%, 62.5%, 1)", "rgb(112, 112, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 50%, 75%)", "rgb(159, 159, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 50%, 75%, 0)", "rgba(159, 159, 223, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 50%, 75%, 0.2)", "rgba(159, 159, 223, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 50%, 75%, 1)", "rgb(159, 159, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 50%, 87.5%)", "rgb(207, 207, 239)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 50%, 87.5%, 0)", "rgba(207, 207, 239, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 50%, 87.5%, 0.2)", "rgba(207, 207, 239, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 50%, 87.5%, 1)", "rgb(207, 207, 239)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 50%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 50%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 50%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 50%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 62.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 62.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 62.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 62.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 62.5%, 12.5%)", "rgb(12, 12, 52)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 62.5%, 12.5%, 0)", "rgba(12, 12, 52, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 62.5%, 12.5%, 0.2)", "rgba(12, 12, 52, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 62.5%, 12.5%, 1)", "rgb(12, 12, 52)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 62.5%, 25%)", "rgb(24, 24, 104)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 62.5%, 25%, 0)", "rgba(24, 24, 104, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 62.5%, 25%, 0.2)", "rgba(24, 24, 104, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 62.5%, 25%, 1)", "rgb(24, 24, 104)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 62.5%, 37.5%)", "rgb(36, 36, 155)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 62.5%, 37.5%, 0)", "rgba(36, 36, 155, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 62.5%, 37.5%, 0.2)", "rgba(36, 36, 155, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 62.5%, 37.5%, 1)", "rgb(36, 36, 155)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 62.5%, 50%)", "rgb(48, 48, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 62.5%, 50%, 0)", "rgba(48, 48, 207, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 62.5%, 50%, 0.2)", "rgba(48, 48, 207, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 62.5%, 50%, 1)", "rgb(48, 48, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 62.5%, 62.5%)", "rgb(100, 100, 219)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 62.5%, 62.5%, 0)", "rgba(100, 100, 219, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 62.5%, 62.5%, 0.2)", "rgba(100, 100, 219, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 62.5%, 62.5%, 1)", "rgb(100, 100, 219)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 62.5%, 75%)", "rgb(151, 151, 231)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 62.5%, 75%, 0)", "rgba(151, 151, 231, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 62.5%, 75%, 0.2)", "rgba(151, 151, 231, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 62.5%, 75%, 1)", "rgb(151, 151, 231)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 62.5%, 87.5%)", "rgb(203, 203, 243)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 62.5%, 87.5%, 0)", "rgba(203, 203, 243, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 62.5%, 87.5%, 0.2)", "rgba(203, 203, 243, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 62.5%, 87.5%, 1)", "rgb(203, 203, 243)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 62.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 62.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 62.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 62.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 75%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 75%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 75%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 75%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 75%, 12.5%)", "rgb(8, 8, 56)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 75%, 12.5%, 0)", "rgba(8, 8, 56, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 75%, 12.5%, 0.2)", "rgba(8, 8, 56, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 75%, 12.5%, 1)", "rgb(8, 8, 56)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 75%, 25%)", "rgb(16, 16, 112)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 75%, 25%, 0)", "rgba(16, 16, 112, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 75%, 25%, 0.2)", "rgba(16, 16, 112, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 75%, 25%, 1)", "rgb(16, 16, 112)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 75%, 37.5%)", "rgb(24, 24, 167)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 75%, 37.5%, 0)", "rgba(24, 24, 167, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 75%, 37.5%, 0.2)", "rgba(24, 24, 167, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 75%, 37.5%, 1)", "rgb(24, 24, 167)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 75%, 50%)", "rgb(32, 32, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 75%, 50%, 0)", "rgba(32, 32, 223, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 75%, 50%, 0.2)", "rgba(32, 32, 223, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 75%, 50%, 1)", "rgb(32, 32, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 75%, 62.5%)", "rgb(88, 88, 231)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 75%, 62.5%, 0)", "rgba(88, 88, 231, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 75%, 62.5%, 0.2)", "rgba(88, 88, 231, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 75%, 62.5%, 1)", "rgb(88, 88, 231)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 75%, 75%)", "rgb(143, 143, 239)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 75%, 75%, 0)", "rgba(143, 143, 239, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 75%, 75%, 0.2)", "rgba(143, 143, 239, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 75%, 75%, 1)", "rgb(143, 143, 239)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 75%, 87.5%)", "rgb(199, 199, 247)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 75%, 87.5%, 0)", "rgba(199, 199, 247, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 75%, 87.5%, 0.2)", "rgba(199, 199, 247, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 75%, 87.5%, 1)", "rgb(199, 199, 247)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 75%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 75%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 75%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 75%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 87.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 87.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 87.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 87.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 87.5%, 12.5%)", "rgb(4, 4, 60)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 87.5%, 12.5%, 0)", "rgba(4, 4, 60, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 87.5%, 12.5%, 0.2)", "rgba(4, 4, 60, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 87.5%, 12.5%, 1)", "rgb(4, 4, 60)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 87.5%, 25%)", "rgb(8, 8, 120)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 87.5%, 25%, 0)", "rgba(8, 8, 120, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 87.5%, 25%, 0.2)", "rgba(8, 8, 120, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 87.5%, 25%, 1)", "rgb(8, 8, 120)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 87.5%, 37.5%)", "rgb(12, 12, 179)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 87.5%, 37.5%, 0)", "rgba(12, 12, 179, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 87.5%, 37.5%, 0.2)", "rgba(12, 12, 179, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 87.5%, 37.5%, 1)", "rgb(12, 12, 179)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 87.5%, 50%)", "rgb(16, 16, 239)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 87.5%, 50%, 0)", "rgba(16, 16, 239, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 87.5%, 50%, 0.2)", "rgba(16, 16, 239, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 87.5%, 50%, 1)", "rgb(16, 16, 239)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 87.5%, 62.5%)", "rgb(76, 76, 243)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 87.5%, 62.5%, 0)", "rgba(76, 76, 243, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 87.5%, 62.5%, 0.2)", "rgba(76, 76, 243, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 87.5%, 62.5%, 1)", "rgb(76, 76, 243)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 87.5%, 75%)", "rgb(135, 135, 247)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 87.5%, 75%, 0)", "rgba(135, 135, 247, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 87.5%, 75%, 0.2)", "rgba(135, 135, 247, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 87.5%, 75%, 1)", "rgb(135, 135, 247)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 87.5%, 87.5%)", "rgb(195, 195, 251)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 87.5%, 87.5%, 0)", "rgba(195, 195, 251, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 87.5%, 87.5%, 0.2)", "rgba(195, 195, 251, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 87.5%, 87.5%, 1)", "rgb(195, 195, 251)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 87.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 87.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 87.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 87.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 100%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 100%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 100%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 100%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 100%, 12.5%)", "rgb(0, 0, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 100%, 12.5%, 0)", "rgba(0, 0, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 100%, 12.5%, 0.2)", "rgba(0, 0, 64, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 100%, 12.5%, 1)", "rgb(0, 0, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 100%, 25%)", "rgb(0, 0, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 100%, 25%, 0)", "rgba(0, 0, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 100%, 25%, 0.2)", "rgba(0, 0, 128, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 100%, 25%, 1)", "rgb(0, 0, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 100%, 37.5%)", "rgb(0, 0, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 100%, 37.5%, 0)", "rgba(0, 0, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 100%, 37.5%, 0.2)", "rgba(0, 0, 191, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 100%, 37.5%, 1)", "rgb(0, 0, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 100%, 50%)", "rgb(0, 0, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 100%, 50%, 0)", "rgba(0, 0, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 100%, 50%, 0.2)", "rgba(0, 0, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 100%, 50%, 1)", "rgb(0, 0, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 100%, 62.5%)", "rgb(64, 64, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 100%, 62.5%, 0)", "rgba(64, 64, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 100%, 62.5%, 0.2)", "rgba(64, 64, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 100%, 62.5%, 1)", "rgb(64, 64, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 100%, 75%)", "rgb(128, 128, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 100%, 75%, 0)", "rgba(128, 128, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 100%, 75%, 0.2)", "rgba(128, 128, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 100%, 75%, 1)", "rgb(128, 128, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 100%, 87.5%)", "rgb(191, 191, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 100%, 87.5%, 0)", "rgba(191, 191, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 100%, 87.5%, 0.2)", "rgba(191, 191, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 100%, 87.5%, 1)", "rgb(191, 191, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(240, 100%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 100%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 100%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(240, 100%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 0%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 0%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 0%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 0%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 0%, 12.5%)", "rgb(32, 32, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 0%, 12.5%, 0)", "rgba(32, 32, 32, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 0%, 12.5%, 0.2)", "rgba(32, 32, 32, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 0%, 12.5%, 1)", "rgb(32, 32, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 0%, 25%)", "rgb(64, 64, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 0%, 25%, 0)", "rgba(64, 64, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 0%, 25%, 0.2)", "rgba(64, 64, 64, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 0%, 25%, 1)", "rgb(64, 64, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 0%, 37.5%)", "rgb(96, 96, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 0%, 37.5%, 0)", "rgba(96, 96, 96, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 0%, 37.5%, 0.2)", "rgba(96, 96, 96, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 0%, 37.5%, 1)", "rgb(96, 96, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 0%, 50%)", "rgb(128, 128, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 0%, 50%, 0)", "rgba(128, 128, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 0%, 50%, 0.2)", "rgba(128, 128, 128, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 0%, 50%, 1)", "rgb(128, 128, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 0%, 62.5%)", "rgb(159, 159, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 0%, 62.5%, 0)", "rgba(159, 159, 159, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 0%, 62.5%, 0.2)", "rgba(159, 159, 159, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 0%, 62.5%, 1)", "rgb(159, 159, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 0%, 75%)", "rgb(191, 191, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 0%, 75%, 0)", "rgba(191, 191, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 0%, 75%, 0.2)", "rgba(191, 191, 191, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 0%, 75%, 1)", "rgb(191, 191, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 0%, 87.5%)", "rgb(223, 223, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 0%, 87.5%, 0)", "rgba(223, 223, 223, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 0%, 87.5%, 0.2)", "rgba(223, 223, 223, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 0%, 87.5%, 1)", "rgb(223, 223, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 0%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 0%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 0%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 0%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 12.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 12.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 12.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 12.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 12.5%, 12.5%)", "rgb(32, 28, 36)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 12.5%, 12.5%, 0)", "rgba(32, 28, 36, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 12.5%, 12.5%, 0.2)", "rgba(32, 28, 36, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 12.5%, 12.5%, 1)", "rgb(32, 28, 36)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 12.5%, 25%)", "rgb(64, 56, 72)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 12.5%, 25%, 0)", "rgba(64, 56, 72, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 12.5%, 25%, 0.2)", "rgba(64, 56, 72, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 12.5%, 25%, 1)", "rgb(64, 56, 72)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 12.5%, 37.5%)", "rgb(96, 84, 108)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 12.5%, 37.5%, 0)", "rgba(96, 84, 108, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 12.5%, 37.5%, 0.2)", "rgba(96, 84, 108, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 12.5%, 37.5%, 1)", "rgb(96, 84, 108)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 12.5%, 50%)", "rgb(128, 112, 143)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 12.5%, 50%, 0)", "rgba(128, 112, 143, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 12.5%, 50%, 0.2)", "rgba(128, 112, 143, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 12.5%, 50%, 1)", "rgb(128, 112, 143)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 12.5%, 62.5%)", "rgb(159, 147, 171)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 12.5%, 62.5%, 0)", "rgba(159, 147, 171, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 12.5%, 62.5%, 0.2)", "rgba(159, 147, 171, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 12.5%, 62.5%, 1)", "rgb(159, 147, 171)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 12.5%, 75%)", "rgb(191, 183, 199)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 12.5%, 75%, 0)", "rgba(191, 183, 199, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 12.5%, 75%, 0.2)", "rgba(191, 183, 199, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 12.5%, 75%, 1)", "rgb(191, 183, 199)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 12.5%, 87.5%)", "rgb(223, 219, 227)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 12.5%, 87.5%, 0)", "rgba(223, 219, 227, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 12.5%, 87.5%, 0.2)", "rgba(223, 219, 227, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 12.5%, 87.5%, 1)", "rgb(223, 219, 227)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 12.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 12.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 12.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 12.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 25%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 25%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 25%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 25%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 25%, 12.5%)", "rgb(32, 24, 40)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 25%, 12.5%, 0)", "rgba(32, 24, 40, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 25%, 12.5%, 0.2)", "rgba(32, 24, 40, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 25%, 12.5%, 1)", "rgb(32, 24, 40)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 25%, 25%)", "rgb(64, 48, 80)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 25%, 25%, 0)", "rgba(64, 48, 80, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 25%, 25%, 0.2)", "rgba(64, 48, 80, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 25%, 25%, 1)", "rgb(64, 48, 80)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 25%, 37.5%)", "rgb(96, 72, 120)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 25%, 37.5%, 0)", "rgba(96, 72, 120, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 25%, 37.5%, 0.2)", "rgba(96, 72, 120, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 25%, 37.5%, 1)", "rgb(96, 72, 120)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 25%, 50%)", "rgb(128, 96, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 25%, 50%, 0)", "rgba(128, 96, 159, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 25%, 50%, 0.2)", "rgba(128, 96, 159, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 25%, 50%, 1)", "rgb(128, 96, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 25%, 62.5%)", "rgb(159, 135, 183)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 25%, 62.5%, 0)", "rgba(159, 135, 183, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 25%, 62.5%, 0.2)", "rgba(159, 135, 183, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 25%, 62.5%, 1)", "rgb(159, 135, 183)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 25%, 75%)", "rgb(191, 175, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 25%, 75%, 0)", "rgba(191, 175, 207, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 25%, 75%, 0.2)", "rgba(191, 175, 207, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 25%, 75%, 1)", "rgb(191, 175, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 25%, 87.5%)", "rgb(223, 215, 231)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 25%, 87.5%, 0)", "rgba(223, 215, 231, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 25%, 87.5%, 0.2)", "rgba(223, 215, 231, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 25%, 87.5%, 1)", "rgb(223, 215, 231)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 25%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 25%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 25%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 25%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 37.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 37.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 37.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 37.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 37.5%, 12.5%)", "rgb(32, 20, 44)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 37.5%, 12.5%, 0)", "rgba(32, 20, 44, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 37.5%, 12.5%, 0.2)", "rgba(32, 20, 44, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 37.5%, 12.5%, 1)", "rgb(32, 20, 44)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 37.5%, 25%)", "rgb(64, 40, 88)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 37.5%, 25%, 0)", "rgba(64, 40, 88, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 37.5%, 25%, 0.2)", "rgba(64, 40, 88, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 37.5%, 25%, 1)", "rgb(64, 40, 88)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 37.5%, 37.5%)", "rgb(96, 60, 131)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 37.5%, 37.5%, 0)", "rgba(96, 60, 131, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 37.5%, 37.5%, 0.2)", "rgba(96, 60, 131, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 37.5%, 37.5%, 1)", "rgb(96, 60, 131)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 37.5%, 50%)", "rgb(128, 80, 175)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 37.5%, 50%, 0)", "rgba(128, 80, 175, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 37.5%, 50%, 0.2)", "rgba(128, 80, 175, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 37.5%, 50%, 1)", "rgb(128, 80, 175)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 37.5%, 62.5%)", "rgb(159, 124, 195)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 37.5%, 62.5%, 0)", "rgba(159, 124, 195, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 37.5%, 62.5%, 0.2)", "rgba(159, 124, 195, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 37.5%, 62.5%, 1)", "rgb(159, 124, 195)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 37.5%, 75%)", "rgb(191, 167, 215)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 37.5%, 75%, 0)", "rgba(191, 167, 215, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 37.5%, 75%, 0.2)", "rgba(191, 167, 215, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 37.5%, 75%, 1)", "rgb(191, 167, 215)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 37.5%, 87.5%)", "rgb(223, 211, 235)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 37.5%, 87.5%, 0)", "rgba(223, 211, 235, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 37.5%, 87.5%, 0.2)", "rgba(223, 211, 235, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 37.5%, 87.5%, 1)", "rgb(223, 211, 235)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 37.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 37.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 37.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 37.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 50%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 50%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 50%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 50%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 50%, 12.5%)", "rgb(32, 16, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 50%, 12.5%, 0)", "rgba(32, 16, 48, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 50%, 12.5%, 0.2)", "rgba(32, 16, 48, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 50%, 12.5%, 1)", "rgb(32, 16, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 50%, 25%)", "rgb(64, 32, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 50%, 25%, 0)", "rgba(64, 32, 96, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 50%, 25%, 0.2)", "rgba(64, 32, 96, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 50%, 25%, 1)", "rgb(64, 32, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 50%, 37.5%)", "rgb(96, 48, 143)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 50%, 37.5%, 0)", "rgba(96, 48, 143, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 50%, 37.5%, 0.2)", "rgba(96, 48, 143, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 50%, 37.5%, 1)", "rgb(96, 48, 143)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 50%, 50%)", "rgb(128, 64, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 50%, 50%, 0)", "rgba(128, 64, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 50%, 50%, 0.2)", "rgba(128, 64, 191, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 50%, 50%, 1)", "rgb(128, 64, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 50%, 62.5%)", "rgb(159, 112, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 50%, 62.5%, 0)", "rgba(159, 112, 207, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 50%, 62.5%, 0.2)", "rgba(159, 112, 207, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 50%, 62.5%, 1)", "rgb(159, 112, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 50%, 75%)", "rgb(191, 159, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 50%, 75%, 0)", "rgba(191, 159, 223, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 50%, 75%, 0.2)", "rgba(191, 159, 223, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 50%, 75%, 1)", "rgb(191, 159, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 50%, 87.5%)", "rgb(223, 207, 239)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 50%, 87.5%, 0)", "rgba(223, 207, 239, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 50%, 87.5%, 0.2)", "rgba(223, 207, 239, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 50%, 87.5%, 1)", "rgb(223, 207, 239)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 50%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 50%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 50%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 50%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 62.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 62.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 62.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 62.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 62.5%, 12.5%)", "rgb(32, 12, 52)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 62.5%, 12.5%, 0)", "rgba(32, 12, 52, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 62.5%, 12.5%, 0.2)", "rgba(32, 12, 52, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 62.5%, 12.5%, 1)", "rgb(32, 12, 52)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 62.5%, 25%)", "rgb(64, 24, 104)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 62.5%, 25%, 0)", "rgba(64, 24, 104, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 62.5%, 25%, 0.2)", "rgba(64, 24, 104, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 62.5%, 25%, 1)", "rgb(64, 24, 104)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 62.5%, 37.5%)", "rgb(96, 36, 155)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 62.5%, 37.5%, 0)", "rgba(96, 36, 155, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 62.5%, 37.5%, 0.2)", "rgba(96, 36, 155, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 62.5%, 37.5%, 1)", "rgb(96, 36, 155)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 62.5%, 50%)", "rgb(128, 48, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 62.5%, 50%, 0)", "rgba(128, 48, 207, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 62.5%, 50%, 0.2)", "rgba(128, 48, 207, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 62.5%, 50%, 1)", "rgb(128, 48, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 62.5%, 62.5%)", "rgb(159, 100, 219)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 62.5%, 62.5%, 0)", "rgba(159, 100, 219, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 62.5%, 62.5%, 0.2)", "rgba(159, 100, 219, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 62.5%, 62.5%, 1)", "rgb(159, 100, 219)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 62.5%, 75%)", "rgb(191, 151, 231)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 62.5%, 75%, 0)", "rgba(191, 151, 231, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 62.5%, 75%, 0.2)", "rgba(191, 151, 231, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 62.5%, 75%, 1)", "rgb(191, 151, 231)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 62.5%, 87.5%)", "rgb(223, 203, 243)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 62.5%, 87.5%, 0)", "rgba(223, 203, 243, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 62.5%, 87.5%, 0.2)", "rgba(223, 203, 243, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 62.5%, 87.5%, 1)", "rgb(223, 203, 243)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 62.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 62.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 62.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 62.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 75%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 75%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 75%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 75%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 75%, 12.5%)", "rgb(32, 8, 56)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 75%, 12.5%, 0)", "rgba(32, 8, 56, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 75%, 12.5%, 0.2)", "rgba(32, 8, 56, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 75%, 12.5%, 1)", "rgb(32, 8, 56)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 75%, 25%)", "rgb(64, 16, 112)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 75%, 25%, 0)", "rgba(64, 16, 112, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 75%, 25%, 0.2)", "rgba(64, 16, 112, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 75%, 25%, 1)", "rgb(64, 16, 112)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 75%, 37.5%)", "rgb(96, 24, 167)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 75%, 37.5%, 0)", "rgba(96, 24, 167, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 75%, 37.5%, 0.2)", "rgba(96, 24, 167, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 75%, 37.5%, 1)", "rgb(96, 24, 167)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 75%, 50%)", "rgb(128, 32, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 75%, 50%, 0)", "rgba(128, 32, 223, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 75%, 50%, 0.2)", "rgba(128, 32, 223, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 75%, 50%, 1)", "rgb(128, 32, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 75%, 62.5%)", "rgb(159, 88, 231)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 75%, 62.5%, 0)", "rgba(159, 88, 231, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 75%, 62.5%, 0.2)", "rgba(159, 88, 231, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 75%, 62.5%, 1)", "rgb(159, 88, 231)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 75%, 75%)", "rgb(191, 143, 239)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 75%, 75%, 0)", "rgba(191, 143, 239, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 75%, 75%, 0.2)", "rgba(191, 143, 239, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 75%, 75%, 1)", "rgb(191, 143, 239)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 75%, 87.5%)", "rgb(223, 199, 247)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 75%, 87.5%, 0)", "rgba(223, 199, 247, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 75%, 87.5%, 0.2)", "rgba(223, 199, 247, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 75%, 87.5%, 1)", "rgb(223, 199, 247)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 75%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 75%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 75%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 75%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 87.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 87.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 87.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 87.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 87.5%, 12.5%)", "rgb(32, 4, 60)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 87.5%, 12.5%, 0)", "rgba(32, 4, 60, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 87.5%, 12.5%, 0.2)", "rgba(32, 4, 60, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 87.5%, 12.5%, 1)", "rgb(32, 4, 60)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 87.5%, 25%)", "rgb(64, 8, 120)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 87.5%, 25%, 0)", "rgba(64, 8, 120, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 87.5%, 25%, 0.2)", "rgba(64, 8, 120, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 87.5%, 25%, 1)", "rgb(64, 8, 120)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 87.5%, 37.5%)", "rgb(96, 12, 179)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 87.5%, 37.5%, 0)", "rgba(96, 12, 179, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 87.5%, 37.5%, 0.2)", "rgba(96, 12, 179, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 87.5%, 37.5%, 1)", "rgb(96, 12, 179)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 87.5%, 50%)", "rgb(128, 16, 239)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 87.5%, 50%, 0)", "rgba(128, 16, 239, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 87.5%, 50%, 0.2)", "rgba(128, 16, 239, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 87.5%, 50%, 1)", "rgb(128, 16, 239)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 87.5%, 62.5%)", "rgb(159, 76, 243)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 87.5%, 62.5%, 0)", "rgba(159, 76, 243, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 87.5%, 62.5%, 0.2)", "rgba(159, 76, 243, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 87.5%, 62.5%, 1)", "rgb(159, 76, 243)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 87.5%, 75%)", "rgb(191, 135, 247)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 87.5%, 75%, 0)", "rgba(191, 135, 247, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 87.5%, 75%, 0.2)", "rgba(191, 135, 247, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 87.5%, 75%, 1)", "rgb(191, 135, 247)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 87.5%, 87.5%)", "rgb(223, 195, 251)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 87.5%, 87.5%, 0)", "rgba(223, 195, 251, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 87.5%, 87.5%, 0.2)", "rgba(223, 195, 251, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 87.5%, 87.5%, 1)", "rgb(223, 195, 251)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 87.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 87.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 87.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 87.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 100%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 100%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 100%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 100%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 100%, 12.5%)", "rgb(32, 0, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 100%, 12.5%, 0)", "rgba(32, 0, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 100%, 12.5%, 0.2)", "rgba(32, 0, 64, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 100%, 12.5%, 1)", "rgb(32, 0, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 100%, 25%)", "rgb(64, 0, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 100%, 25%, 0)", "rgba(64, 0, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 100%, 25%, 0.2)", "rgba(64, 0, 128, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 100%, 25%, 1)", "rgb(64, 0, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 100%, 37.5%)", "rgb(96, 0, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 100%, 37.5%, 0)", "rgba(96, 0, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 100%, 37.5%, 0.2)", "rgba(96, 0, 191, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 100%, 37.5%, 1)", "rgb(96, 0, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 100%, 50%)", "rgb(128, 0, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 100%, 50%, 0)", "rgba(128, 0, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 100%, 50%, 0.2)", "rgba(128, 0, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 100%, 50%, 1)", "rgb(128, 0, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 100%, 62.5%)", "rgb(159, 64, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 100%, 62.5%, 0)", "rgba(159, 64, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 100%, 62.5%, 0.2)", "rgba(159, 64, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 100%, 62.5%, 1)", "rgb(159, 64, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 100%, 75%)", "rgb(191, 128, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 100%, 75%, 0)", "rgba(191, 128, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 100%, 75%, 0.2)", "rgba(191, 128, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 100%, 75%, 1)", "rgb(191, 128, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 100%, 87.5%)", "rgb(223, 191, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 100%, 87.5%, 0)", "rgba(223, 191, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 100%, 87.5%, 0.2)", "rgba(223, 191, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 100%, 87.5%, 1)", "rgb(223, 191, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(270, 100%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 100%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 100%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(270, 100%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 0%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 0%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 0%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 0%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 0%, 12.5%)", "rgb(32, 32, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 0%, 12.5%, 0)", "rgba(32, 32, 32, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 0%, 12.5%, 0.2)", "rgba(32, 32, 32, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 0%, 12.5%, 1)", "rgb(32, 32, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 0%, 25%)", "rgb(64, 64, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 0%, 25%, 0)", "rgba(64, 64, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 0%, 25%, 0.2)", "rgba(64, 64, 64, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 0%, 25%, 1)", "rgb(64, 64, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 0%, 37.5%)", "rgb(96, 96, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 0%, 37.5%, 0)", "rgba(96, 96, 96, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 0%, 37.5%, 0.2)", "rgba(96, 96, 96, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 0%, 37.5%, 1)", "rgb(96, 96, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 0%, 50%)", "rgb(128, 128, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 0%, 50%, 0)", "rgba(128, 128, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 0%, 50%, 0.2)", "rgba(128, 128, 128, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 0%, 50%, 1)", "rgb(128, 128, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 0%, 62.5%)", "rgb(159, 159, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 0%, 62.5%, 0)", "rgba(159, 159, 159, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 0%, 62.5%, 0.2)", "rgba(159, 159, 159, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 0%, 62.5%, 1)", "rgb(159, 159, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 0%, 75%)", "rgb(191, 191, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 0%, 75%, 0)", "rgba(191, 191, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 0%, 75%, 0.2)", "rgba(191, 191, 191, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 0%, 75%, 1)", "rgb(191, 191, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 0%, 87.5%)", "rgb(223, 223, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 0%, 87.5%, 0)", "rgba(223, 223, 223, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 0%, 87.5%, 0.2)", "rgba(223, 223, 223, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 0%, 87.5%, 1)", "rgb(223, 223, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 0%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 0%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 0%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 0%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 12.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 12.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 12.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 12.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 12.5%, 12.5%)", "rgb(36, 28, 36)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 12.5%, 12.5%, 0)", "rgba(36, 28, 36, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 12.5%, 12.5%, 0.2)", "rgba(36, 28, 36, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 12.5%, 12.5%, 1)", "rgb(36, 28, 36)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 12.5%, 25%)", "rgb(72, 56, 72)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 12.5%, 25%, 0)", "rgba(72, 56, 72, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 12.5%, 25%, 0.2)", "rgba(72, 56, 72, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 12.5%, 25%, 1)", "rgb(72, 56, 72)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 12.5%, 37.5%)", "rgb(108, 84, 108)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 12.5%, 37.5%, 0)", "rgba(108, 84, 108, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 12.5%, 37.5%, 0.2)", "rgba(108, 84, 108, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 12.5%, 37.5%, 1)", "rgb(108, 84, 108)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 12.5%, 50%)", "rgb(143, 112, 143)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 12.5%, 50%, 0)", "rgba(143, 112, 143, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 12.5%, 50%, 0.2)", "rgba(143, 112, 143, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 12.5%, 50%, 1)", "rgb(143, 112, 143)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 12.5%, 62.5%)", "rgb(171, 147, 171)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 12.5%, 62.5%, 0)", "rgba(171, 147, 171, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 12.5%, 62.5%, 0.2)", "rgba(171, 147, 171, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 12.5%, 62.5%, 1)", "rgb(171, 147, 171)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 12.5%, 75%)", "rgb(199, 183, 199)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 12.5%, 75%, 0)", "rgba(199, 183, 199, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 12.5%, 75%, 0.2)", "rgba(199, 183, 199, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 12.5%, 75%, 1)", "rgb(199, 183, 199)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 12.5%, 87.5%)", "rgb(227, 219, 227)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 12.5%, 87.5%, 0)", "rgba(227, 219, 227, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 12.5%, 87.5%, 0.2)", "rgba(227, 219, 227, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 12.5%, 87.5%, 1)", "rgb(227, 219, 227)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 12.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 12.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 12.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 12.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 25%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 25%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 25%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 25%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 25%, 12.5%)", "rgb(40, 24, 40)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 25%, 12.5%, 0)", "rgba(40, 24, 40, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 25%, 12.5%, 0.2)", "rgba(40, 24, 40, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 25%, 12.5%, 1)", "rgb(40, 24, 40)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 25%, 25%)", "rgb(80, 48, 80)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 25%, 25%, 0)", "rgba(80, 48, 80, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 25%, 25%, 0.2)", "rgba(80, 48, 80, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 25%, 25%, 1)", "rgb(80, 48, 80)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 25%, 37.5%)", "rgb(120, 72, 120)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 25%, 37.5%, 0)", "rgba(120, 72, 120, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 25%, 37.5%, 0.2)", "rgba(120, 72, 120, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 25%, 37.5%, 1)", "rgb(120, 72, 120)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 25%, 50%)", "rgb(159, 96, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 25%, 50%, 0)", "rgba(159, 96, 159, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 25%, 50%, 0.2)", "rgba(159, 96, 159, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 25%, 50%, 1)", "rgb(159, 96, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 25%, 62.5%)", "rgb(183, 135, 183)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 25%, 62.5%, 0)", "rgba(183, 135, 183, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 25%, 62.5%, 0.2)", "rgba(183, 135, 183, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 25%, 62.5%, 1)", "rgb(183, 135, 183)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 25%, 75%)", "rgb(207, 175, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 25%, 75%, 0)", "rgba(207, 175, 207, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 25%, 75%, 0.2)", "rgba(207, 175, 207, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 25%, 75%, 1)", "rgb(207, 175, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 25%, 87.5%)", "rgb(231, 215, 231)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 25%, 87.5%, 0)", "rgba(231, 215, 231, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 25%, 87.5%, 0.2)", "rgba(231, 215, 231, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 25%, 87.5%, 1)", "rgb(231, 215, 231)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 25%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 25%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 25%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 25%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 37.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 37.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 37.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 37.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 37.5%, 12.5%)", "rgb(44, 20, 44)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 37.5%, 12.5%, 0)", "rgba(44, 20, 44, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 37.5%, 12.5%, 0.2)", "rgba(44, 20, 44, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 37.5%, 12.5%, 1)", "rgb(44, 20, 44)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 37.5%, 25%)", "rgb(88, 40, 88)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 37.5%, 25%, 0)", "rgba(88, 40, 88, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 37.5%, 25%, 0.2)", "rgba(88, 40, 88, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 37.5%, 25%, 1)", "rgb(88, 40, 88)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 37.5%, 37.5%)", "rgb(131, 60, 131)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 37.5%, 37.5%, 0)", "rgba(131, 60, 131, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 37.5%, 37.5%, 0.2)", "rgba(131, 60, 131, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 37.5%, 37.5%, 1)", "rgb(131, 60, 131)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 37.5%, 50%)", "rgb(175, 80, 175)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 37.5%, 50%, 0)", "rgba(175, 80, 175, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 37.5%, 50%, 0.2)", "rgba(175, 80, 175, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 37.5%, 50%, 1)", "rgb(175, 80, 175)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 37.5%, 62.5%)", "rgb(195, 124, 195)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 37.5%, 62.5%, 0)", "rgba(195, 124, 195, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 37.5%, 62.5%, 0.2)", "rgba(195, 124, 195, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 37.5%, 62.5%, 1)", "rgb(195, 124, 195)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 37.5%, 75%)", "rgb(215, 167, 215)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 37.5%, 75%, 0)", "rgba(215, 167, 215, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 37.5%, 75%, 0.2)", "rgba(215, 167, 215, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 37.5%, 75%, 1)", "rgb(215, 167, 215)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 37.5%, 87.5%)", "rgb(235, 211, 235)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 37.5%, 87.5%, 0)", "rgba(235, 211, 235, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 37.5%, 87.5%, 0.2)", "rgba(235, 211, 235, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 37.5%, 87.5%, 1)", "rgb(235, 211, 235)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 37.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 37.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 37.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 37.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 50%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 50%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 50%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 50%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 50%, 12.5%)", "rgb(48, 16, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 50%, 12.5%, 0)", "rgba(48, 16, 48, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 50%, 12.5%, 0.2)", "rgba(48, 16, 48, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 50%, 12.5%, 1)", "rgb(48, 16, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 50%, 25%)", "rgb(96, 32, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 50%, 25%, 0)", "rgba(96, 32, 96, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 50%, 25%, 0.2)", "rgba(96, 32, 96, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 50%, 25%, 1)", "rgb(96, 32, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 50%, 37.5%)", "rgb(143, 48, 143)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 50%, 37.5%, 0)", "rgba(143, 48, 143, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 50%, 37.5%, 0.2)", "rgba(143, 48, 143, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 50%, 37.5%, 1)", "rgb(143, 48, 143)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 50%, 50%)", "rgb(191, 64, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 50%, 50%, 0)", "rgba(191, 64, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 50%, 50%, 0.2)", "rgba(191, 64, 191, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 50%, 50%, 1)", "rgb(191, 64, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 50%, 62.5%)", "rgb(207, 112, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 50%, 62.5%, 0)", "rgba(207, 112, 207, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 50%, 62.5%, 0.2)", "rgba(207, 112, 207, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 50%, 62.5%, 1)", "rgb(207, 112, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 50%, 75%)", "rgb(223, 159, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 50%, 75%, 0)", "rgba(223, 159, 223, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 50%, 75%, 0.2)", "rgba(223, 159, 223, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 50%, 75%, 1)", "rgb(223, 159, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 50%, 87.5%)", "rgb(239, 207, 239)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 50%, 87.5%, 0)", "rgba(239, 207, 239, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 50%, 87.5%, 0.2)", "rgba(239, 207, 239, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 50%, 87.5%, 1)", "rgb(239, 207, 239)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 50%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 50%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 50%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 50%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 62.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 62.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 62.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 62.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 62.5%, 12.5%)", "rgb(52, 12, 52)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 62.5%, 12.5%, 0)", "rgba(52, 12, 52, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 62.5%, 12.5%, 0.2)", "rgba(52, 12, 52, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 62.5%, 12.5%, 1)", "rgb(52, 12, 52)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 62.5%, 25%)", "rgb(104, 24, 104)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 62.5%, 25%, 0)", "rgba(104, 24, 104, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 62.5%, 25%, 0.2)", "rgba(104, 24, 104, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 62.5%, 25%, 1)", "rgb(104, 24, 104)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 62.5%, 37.5%)", "rgb(155, 36, 155)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 62.5%, 37.5%, 0)", "rgba(155, 36, 155, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 62.5%, 37.5%, 0.2)", "rgba(155, 36, 155, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 62.5%, 37.5%, 1)", "rgb(155, 36, 155)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 62.5%, 50%)", "rgb(207, 48, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 62.5%, 50%, 0)", "rgba(207, 48, 207, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 62.5%, 50%, 0.2)", "rgba(207, 48, 207, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 62.5%, 50%, 1)", "rgb(207, 48, 207)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 62.5%, 62.5%)", "rgb(219, 100, 219)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 62.5%, 62.5%, 0)", "rgba(219, 100, 219, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 62.5%, 62.5%, 0.2)", "rgba(219, 100, 219, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 62.5%, 62.5%, 1)", "rgb(219, 100, 219)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 62.5%, 75%)", "rgb(231, 151, 231)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 62.5%, 75%, 0)", "rgba(231, 151, 231, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 62.5%, 75%, 0.2)", "rgba(231, 151, 231, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 62.5%, 75%, 1)", "rgb(231, 151, 231)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 62.5%, 87.5%)", "rgb(243, 203, 243)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 62.5%, 87.5%, 0)", "rgba(243, 203, 243, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 62.5%, 87.5%, 0.2)", "rgba(243, 203, 243, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 62.5%, 87.5%, 1)", "rgb(243, 203, 243)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 62.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 62.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 62.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 62.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 75%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 75%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 75%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 75%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 75%, 12.5%)", "rgb(56, 8, 56)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 75%, 12.5%, 0)", "rgba(56, 8, 56, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 75%, 12.5%, 0.2)", "rgba(56, 8, 56, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 75%, 12.5%, 1)", "rgb(56, 8, 56)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 75%, 25%)", "rgb(112, 16, 112)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 75%, 25%, 0)", "rgba(112, 16, 112, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 75%, 25%, 0.2)", "rgba(112, 16, 112, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 75%, 25%, 1)", "rgb(112, 16, 112)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 75%, 37.5%)", "rgb(167, 24, 167)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 75%, 37.5%, 0)", "rgba(167, 24, 167, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 75%, 37.5%, 0.2)", "rgba(167, 24, 167, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 75%, 37.5%, 1)", "rgb(167, 24, 167)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 75%, 50%)", "rgb(223, 32, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 75%, 50%, 0)", "rgba(223, 32, 223, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 75%, 50%, 0.2)", "rgba(223, 32, 223, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 75%, 50%, 1)", "rgb(223, 32, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 75%, 62.5%)", "rgb(231, 88, 231)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 75%, 62.5%, 0)", "rgba(231, 88, 231, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 75%, 62.5%, 0.2)", "rgba(231, 88, 231, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 75%, 62.5%, 1)", "rgb(231, 88, 231)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 75%, 75%)", "rgb(239, 143, 239)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 75%, 75%, 0)", "rgba(239, 143, 239, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 75%, 75%, 0.2)", "rgba(239, 143, 239, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 75%, 75%, 1)", "rgb(239, 143, 239)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 75%, 87.5%)", "rgb(247, 199, 247)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 75%, 87.5%, 0)", "rgba(247, 199, 247, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 75%, 87.5%, 0.2)", "rgba(247, 199, 247, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 75%, 87.5%, 1)", "rgb(247, 199, 247)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 75%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 75%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 75%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 75%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 87.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 87.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 87.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 87.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 87.5%, 12.5%)", "rgb(60, 4, 60)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 87.5%, 12.5%, 0)", "rgba(60, 4, 60, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 87.5%, 12.5%, 0.2)", "rgba(60, 4, 60, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 87.5%, 12.5%, 1)", "rgb(60, 4, 60)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 87.5%, 25%)", "rgb(120, 8, 120)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 87.5%, 25%, 0)", "rgba(120, 8, 120, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 87.5%, 25%, 0.2)", "rgba(120, 8, 120, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 87.5%, 25%, 1)", "rgb(120, 8, 120)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 87.5%, 37.5%)", "rgb(179, 12, 179)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 87.5%, 37.5%, 0)", "rgba(179, 12, 179, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 87.5%, 37.5%, 0.2)", "rgba(179, 12, 179, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 87.5%, 37.5%, 1)", "rgb(179, 12, 179)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 87.5%, 50%)", "rgb(239, 16, 239)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 87.5%, 50%, 0)", "rgba(239, 16, 239, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 87.5%, 50%, 0.2)", "rgba(239, 16, 239, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 87.5%, 50%, 1)", "rgb(239, 16, 239)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 87.5%, 62.5%)", "rgb(243, 76, 243)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 87.5%, 62.5%, 0)", "rgba(243, 76, 243, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 87.5%, 62.5%, 0.2)", "rgba(243, 76, 243, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 87.5%, 62.5%, 1)", "rgb(243, 76, 243)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 87.5%, 75%)", "rgb(247, 135, 247)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 87.5%, 75%, 0)", "rgba(247, 135, 247, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 87.5%, 75%, 0.2)", "rgba(247, 135, 247, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 87.5%, 75%, 1)", "rgb(247, 135, 247)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 87.5%, 87.5%)", "rgb(251, 195, 251)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 87.5%, 87.5%, 0)", "rgba(251, 195, 251, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 87.5%, 87.5%, 0.2)", "rgba(251, 195, 251, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 87.5%, 87.5%, 1)", "rgb(251, 195, 251)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 87.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 87.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 87.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 87.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 100%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 100%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 100%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 100%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 100%, 12.5%)", "rgb(64, 0, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 100%, 12.5%, 0)", "rgba(64, 0, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 100%, 12.5%, 0.2)", "rgba(64, 0, 64, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 100%, 12.5%, 1)", "rgb(64, 0, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 100%, 25%)", "rgb(128, 0, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 100%, 25%, 0)", "rgba(128, 0, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 100%, 25%, 0.2)", "rgba(128, 0, 128, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 100%, 25%, 1)", "rgb(128, 0, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 100%, 37.5%)", "rgb(191, 0, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 100%, 37.5%, 0)", "rgba(191, 0, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 100%, 37.5%, 0.2)", "rgba(191, 0, 191, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 100%, 37.5%, 1)", "rgb(191, 0, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 100%, 50%)", "rgb(255, 0, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 100%, 50%, 0)", "rgba(255, 0, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 100%, 50%, 0.2)", "rgba(255, 0, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 100%, 50%, 1)", "rgb(255, 0, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 100%, 62.5%)", "rgb(255, 64, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 100%, 62.5%, 0)", "rgba(255, 64, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 100%, 62.5%, 0.2)", "rgba(255, 64, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 100%, 62.5%, 1)", "rgb(255, 64, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 100%, 75%)", "rgb(255, 128, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 100%, 75%, 0)", "rgba(255, 128, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 100%, 75%, 0.2)", "rgba(255, 128, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 100%, 75%, 1)", "rgb(255, 128, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 100%, 87.5%)", "rgb(255, 191, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 100%, 87.5%, 0)", "rgba(255, 191, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 100%, 87.5%, 0.2)", "rgba(255, 191, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 100%, 87.5%, 1)", "rgb(255, 191, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(300, 100%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 100%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 100%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(300, 100%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 0%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 0%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 0%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 0%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 0%, 12.5%)", "rgb(32, 32, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 0%, 12.5%, 0)", "rgba(32, 32, 32, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 0%, 12.5%, 0.2)", "rgba(32, 32, 32, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 0%, 12.5%, 1)", "rgb(32, 32, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 0%, 25%)", "rgb(64, 64, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 0%, 25%, 0)", "rgba(64, 64, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 0%, 25%, 0.2)", "rgba(64, 64, 64, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 0%, 25%, 1)", "rgb(64, 64, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 0%, 37.5%)", "rgb(96, 96, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 0%, 37.5%, 0)", "rgba(96, 96, 96, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 0%, 37.5%, 0.2)", "rgba(96, 96, 96, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 0%, 37.5%, 1)", "rgb(96, 96, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 0%, 50%)", "rgb(128, 128, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 0%, 50%, 0)", "rgba(128, 128, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 0%, 50%, 0.2)", "rgba(128, 128, 128, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 0%, 50%, 1)", "rgb(128, 128, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 0%, 62.5%)", "rgb(159, 159, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 0%, 62.5%, 0)", "rgba(159, 159, 159, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 0%, 62.5%, 0.2)", "rgba(159, 159, 159, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 0%, 62.5%, 1)", "rgb(159, 159, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 0%, 75%)", "rgb(191, 191, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 0%, 75%, 0)", "rgba(191, 191, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 0%, 75%, 0.2)", "rgba(191, 191, 191, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 0%, 75%, 1)", "rgb(191, 191, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 0%, 87.5%)", "rgb(223, 223, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 0%, 87.5%, 0)", "rgba(223, 223, 223, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 0%, 87.5%, 0.2)", "rgba(223, 223, 223, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 0%, 87.5%, 1)", "rgb(223, 223, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 0%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 0%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 0%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 0%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 12.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 12.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 12.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 12.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 12.5%, 12.5%)", "rgb(36, 28, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 12.5%, 12.5%, 0)", "rgba(36, 28, 32, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 12.5%, 12.5%, 0.2)", "rgba(36, 28, 32, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 12.5%, 12.5%, 1)", "rgb(36, 28, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 12.5%, 25%)", "rgb(72, 56, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 12.5%, 25%, 0)", "rgba(72, 56, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 12.5%, 25%, 0.2)", "rgba(72, 56, 64, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 12.5%, 25%, 1)", "rgb(72, 56, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 12.5%, 37.5%)", "rgb(108, 84, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 12.5%, 37.5%, 0)", "rgba(108, 84, 96, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 12.5%, 37.5%, 0.2)", "rgba(108, 84, 96, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 12.5%, 37.5%, 1)", "rgb(108, 84, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 12.5%, 50%)", "rgb(143, 112, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 12.5%, 50%, 0)", "rgba(143, 112, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 12.5%, 50%, 0.2)", "rgba(143, 112, 128, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 12.5%, 50%, 1)", "rgb(143, 112, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 12.5%, 62.5%)", "rgb(171, 147, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 12.5%, 62.5%, 0)", "rgba(171, 147, 159, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 12.5%, 62.5%, 0.2)", "rgba(171, 147, 159, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 12.5%, 62.5%, 1)", "rgb(171, 147, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 12.5%, 75%)", "rgb(199, 183, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 12.5%, 75%, 0)", "rgba(199, 183, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 12.5%, 75%, 0.2)", "rgba(199, 183, 191, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 12.5%, 75%, 1)", "rgb(199, 183, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 12.5%, 87.5%)", "rgb(227, 219, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 12.5%, 87.5%, 0)", "rgba(227, 219, 223, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 12.5%, 87.5%, 0.2)", "rgba(227, 219, 223, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 12.5%, 87.5%, 1)", "rgb(227, 219, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 12.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 12.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 12.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 12.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 25%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 25%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 25%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 25%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 25%, 12.5%)", "rgb(40, 24, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 25%, 12.5%, 0)", "rgba(40, 24, 32, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 25%, 12.5%, 0.2)", "rgba(40, 24, 32, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 25%, 12.5%, 1)", "rgb(40, 24, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 25%, 25%)", "rgb(80, 48, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 25%, 25%, 0)", "rgba(80, 48, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 25%, 25%, 0.2)", "rgba(80, 48, 64, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 25%, 25%, 1)", "rgb(80, 48, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 25%, 37.5%)", "rgb(120, 72, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 25%, 37.5%, 0)", "rgba(120, 72, 96, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 25%, 37.5%, 0.2)", "rgba(120, 72, 96, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 25%, 37.5%, 1)", "rgb(120, 72, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 25%, 50%)", "rgb(159, 96, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 25%, 50%, 0)", "rgba(159, 96, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 25%, 50%, 0.2)", "rgba(159, 96, 128, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 25%, 50%, 1)", "rgb(159, 96, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 25%, 62.5%)", "rgb(183, 135, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 25%, 62.5%, 0)", "rgba(183, 135, 159, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 25%, 62.5%, 0.2)", "rgba(183, 135, 159, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 25%, 62.5%, 1)", "rgb(183, 135, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 25%, 75%)", "rgb(207, 175, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 25%, 75%, 0)", "rgba(207, 175, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 25%, 75%, 0.2)", "rgba(207, 175, 191, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 25%, 75%, 1)", "rgb(207, 175, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 25%, 87.5%)", "rgb(231, 215, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 25%, 87.5%, 0)", "rgba(231, 215, 223, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 25%, 87.5%, 0.2)", "rgba(231, 215, 223, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 25%, 87.5%, 1)", "rgb(231, 215, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 25%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 25%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 25%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 25%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 37.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 37.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 37.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 37.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 37.5%, 12.5%)", "rgb(44, 20, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 37.5%, 12.5%, 0)", "rgba(44, 20, 32, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 37.5%, 12.5%, 0.2)", "rgba(44, 20, 32, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 37.5%, 12.5%, 1)", "rgb(44, 20, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 37.5%, 25%)", "rgb(88, 40, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 37.5%, 25%, 0)", "rgba(88, 40, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 37.5%, 25%, 0.2)", "rgba(88, 40, 64, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 37.5%, 25%, 1)", "rgb(88, 40, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 37.5%, 37.5%)", "rgb(131, 60, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 37.5%, 37.5%, 0)", "rgba(131, 60, 96, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 37.5%, 37.5%, 0.2)", "rgba(131, 60, 96, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 37.5%, 37.5%, 1)", "rgb(131, 60, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 37.5%, 50%)", "rgb(175, 80, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 37.5%, 50%, 0)", "rgba(175, 80, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 37.5%, 50%, 0.2)", "rgba(175, 80, 128, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 37.5%, 50%, 1)", "rgb(175, 80, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 37.5%, 62.5%)", "rgb(195, 124, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 37.5%, 62.5%, 0)", "rgba(195, 124, 159, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 37.5%, 62.5%, 0.2)", "rgba(195, 124, 159, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 37.5%, 62.5%, 1)", "rgb(195, 124, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 37.5%, 75%)", "rgb(215, 167, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 37.5%, 75%, 0)", "rgba(215, 167, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 37.5%, 75%, 0.2)", "rgba(215, 167, 191, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 37.5%, 75%, 1)", "rgb(215, 167, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 37.5%, 87.5%)", "rgb(235, 211, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 37.5%, 87.5%, 0)", "rgba(235, 211, 223, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 37.5%, 87.5%, 0.2)", "rgba(235, 211, 223, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 37.5%, 87.5%, 1)", "rgb(235, 211, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 37.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 37.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 37.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 37.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 50%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 50%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 50%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 50%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 50%, 12.5%)", "rgb(48, 16, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 50%, 12.5%, 0)", "rgba(48, 16, 32, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 50%, 12.5%, 0.2)", "rgba(48, 16, 32, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 50%, 12.5%, 1)", "rgb(48, 16, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 50%, 25%)", "rgb(96, 32, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 50%, 25%, 0)", "rgba(96, 32, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 50%, 25%, 0.2)", "rgba(96, 32, 64, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 50%, 25%, 1)", "rgb(96, 32, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 50%, 37.5%)", "rgb(143, 48, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 50%, 37.5%, 0)", "rgba(143, 48, 96, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 50%, 37.5%, 0.2)", "rgba(143, 48, 96, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 50%, 37.5%, 1)", "rgb(143, 48, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 50%, 50%)", "rgb(191, 64, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 50%, 50%, 0)", "rgba(191, 64, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 50%, 50%, 0.2)", "rgba(191, 64, 128, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 50%, 50%, 1)", "rgb(191, 64, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 50%, 62.5%)", "rgb(207, 112, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 50%, 62.5%, 0)", "rgba(207, 112, 159, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 50%, 62.5%, 0.2)", "rgba(207, 112, 159, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 50%, 62.5%, 1)", "rgb(207, 112, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 50%, 75%)", "rgb(223, 159, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 50%, 75%, 0)", "rgba(223, 159, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 50%, 75%, 0.2)", "rgba(223, 159, 191, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 50%, 75%, 1)", "rgb(223, 159, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 50%, 87.5%)", "rgb(239, 207, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 50%, 87.5%, 0)", "rgba(239, 207, 223, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 50%, 87.5%, 0.2)", "rgba(239, 207, 223, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 50%, 87.5%, 1)", "rgb(239, 207, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 50%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 50%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 50%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 50%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 62.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 62.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 62.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 62.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 62.5%, 12.5%)", "rgb(52, 12, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 62.5%, 12.5%, 0)", "rgba(52, 12, 32, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 62.5%, 12.5%, 0.2)", "rgba(52, 12, 32, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 62.5%, 12.5%, 1)", "rgb(52, 12, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 62.5%, 25%)", "rgb(104, 24, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 62.5%, 25%, 0)", "rgba(104, 24, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 62.5%, 25%, 0.2)", "rgba(104, 24, 64, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 62.5%, 25%, 1)", "rgb(104, 24, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 62.5%, 37.5%)", "rgb(155, 36, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 62.5%, 37.5%, 0)", "rgba(155, 36, 96, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 62.5%, 37.5%, 0.2)", "rgba(155, 36, 96, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 62.5%, 37.5%, 1)", "rgb(155, 36, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 62.5%, 50%)", "rgb(207, 48, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 62.5%, 50%, 0)", "rgba(207, 48, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 62.5%, 50%, 0.2)", "rgba(207, 48, 128, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 62.5%, 50%, 1)", "rgb(207, 48, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 62.5%, 62.5%)", "rgb(219, 100, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 62.5%, 62.5%, 0)", "rgba(219, 100, 159, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 62.5%, 62.5%, 0.2)", "rgba(219, 100, 159, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 62.5%, 62.5%, 1)", "rgb(219, 100, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 62.5%, 75%)", "rgb(231, 151, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 62.5%, 75%, 0)", "rgba(231, 151, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 62.5%, 75%, 0.2)", "rgba(231, 151, 191, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 62.5%, 75%, 1)", "rgb(231, 151, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 62.5%, 87.5%)", "rgb(243, 203, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 62.5%, 87.5%, 0)", "rgba(243, 203, 223, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 62.5%, 87.5%, 0.2)", "rgba(243, 203, 223, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 62.5%, 87.5%, 1)", "rgb(243, 203, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 62.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 62.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 62.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 62.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 75%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 75%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 75%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 75%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 75%, 12.5%)", "rgb(56, 8, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 75%, 12.5%, 0)", "rgba(56, 8, 32, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 75%, 12.5%, 0.2)", "rgba(56, 8, 32, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 75%, 12.5%, 1)", "rgb(56, 8, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 75%, 25%)", "rgb(112, 16, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 75%, 25%, 0)", "rgba(112, 16, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 75%, 25%, 0.2)", "rgba(112, 16, 64, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 75%, 25%, 1)", "rgb(112, 16, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 75%, 37.5%)", "rgb(167, 24, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 75%, 37.5%, 0)", "rgba(167, 24, 96, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 75%, 37.5%, 0.2)", "rgba(167, 24, 96, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 75%, 37.5%, 1)", "rgb(167, 24, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 75%, 50%)", "rgb(223, 32, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 75%, 50%, 0)", "rgba(223, 32, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 75%, 50%, 0.2)", "rgba(223, 32, 128, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 75%, 50%, 1)", "rgb(223, 32, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 75%, 62.5%)", "rgb(231, 88, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 75%, 62.5%, 0)", "rgba(231, 88, 159, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 75%, 62.5%, 0.2)", "rgba(231, 88, 159, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 75%, 62.5%, 1)", "rgb(231, 88, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 75%, 75%)", "rgb(239, 143, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 75%, 75%, 0)", "rgba(239, 143, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 75%, 75%, 0.2)", "rgba(239, 143, 191, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 75%, 75%, 1)", "rgb(239, 143, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 75%, 87.5%)", "rgb(247, 199, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 75%, 87.5%, 0)", "rgba(247, 199, 223, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 75%, 87.5%, 0.2)", "rgba(247, 199, 223, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 75%, 87.5%, 1)", "rgb(247, 199, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 75%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 75%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 75%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 75%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 87.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 87.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 87.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 87.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 87.5%, 12.5%)", "rgb(60, 4, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 87.5%, 12.5%, 0)", "rgba(60, 4, 32, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 87.5%, 12.5%, 0.2)", "rgba(60, 4, 32, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 87.5%, 12.5%, 1)", "rgb(60, 4, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 87.5%, 25%)", "rgb(120, 8, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 87.5%, 25%, 0)", "rgba(120, 8, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 87.5%, 25%, 0.2)", "rgba(120, 8, 64, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 87.5%, 25%, 1)", "rgb(120, 8, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 87.5%, 37.5%)", "rgb(179, 12, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 87.5%, 37.5%, 0)", "rgba(179, 12, 96, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 87.5%, 37.5%, 0.2)", "rgba(179, 12, 96, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 87.5%, 37.5%, 1)", "rgb(179, 12, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 87.5%, 50%)", "rgb(239, 16, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 87.5%, 50%, 0)", "rgba(239, 16, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 87.5%, 50%, 0.2)", "rgba(239, 16, 128, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 87.5%, 50%, 1)", "rgb(239, 16, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 87.5%, 62.5%)", "rgb(243, 76, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 87.5%, 62.5%, 0)", "rgba(243, 76, 159, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 87.5%, 62.5%, 0.2)", "rgba(243, 76, 159, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 87.5%, 62.5%, 1)", "rgb(243, 76, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 87.5%, 75%)", "rgb(247, 135, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 87.5%, 75%, 0)", "rgba(247, 135, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 87.5%, 75%, 0.2)", "rgba(247, 135, 191, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 87.5%, 75%, 1)", "rgb(247, 135, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 87.5%, 87.5%)", "rgb(251, 195, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 87.5%, 87.5%, 0)", "rgba(251, 195, 223, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 87.5%, 87.5%, 0.2)", "rgba(251, 195, 223, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 87.5%, 87.5%, 1)", "rgb(251, 195, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 87.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 87.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 87.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 87.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 100%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 100%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 100%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 100%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 100%, 12.5%)", "rgb(64, 0, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 100%, 12.5%, 0)", "rgba(64, 0, 32, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 100%, 12.5%, 0.2)", "rgba(64, 0, 32, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 100%, 12.5%, 1)", "rgb(64, 0, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 100%, 25%)", "rgb(128, 0, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 100%, 25%, 0)", "rgba(128, 0, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 100%, 25%, 0.2)", "rgba(128, 0, 64, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 100%, 25%, 1)", "rgb(128, 0, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 100%, 37.5%)", "rgb(191, 0, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 100%, 37.5%, 0)", "rgba(191, 0, 96, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 100%, 37.5%, 0.2)", "rgba(191, 0, 96, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 100%, 37.5%, 1)", "rgb(191, 0, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 100%, 50%)", "rgb(255, 0, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 100%, 50%, 0)", "rgba(255, 0, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 100%, 50%, 0.2)", "rgba(255, 0, 128, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 100%, 50%, 1)", "rgb(255, 0, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 100%, 62.5%)", "rgb(255, 64, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 100%, 62.5%, 0)", "rgba(255, 64, 159, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 100%, 62.5%, 0.2)", "rgba(255, 64, 159, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 100%, 62.5%, 1)", "rgb(255, 64, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 100%, 75%)", "rgb(255, 128, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 100%, 75%, 0)", "rgba(255, 128, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 100%, 75%, 0.2)", "rgba(255, 128, 191, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 100%, 75%, 1)", "rgb(255, 128, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 100%, 87.5%)", "rgb(255, 191, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 100%, 87.5%, 0)", "rgba(255, 191, 223, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 100%, 87.5%, 0.2)", "rgba(255, 191, 223, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 100%, 87.5%, 1)", "rgb(255, 191, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsl(330, 100%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 100%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 100%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(330, 100%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(360, 0%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 0%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 0%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 0%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(360, 0%, 12.5%)", "rgb(32, 32, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 0%, 12.5%, 0)", "rgba(32, 32, 32, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 0%, 12.5%, 0.2)", "rgba(32, 32, 32, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 0%, 12.5%, 1)", "rgb(32, 32, 32)", "HSL/HSLA value should parse and round correctly"], + ["hsl(360, 0%, 25%)", "rgb(64, 64, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 0%, 25%, 0)", "rgba(64, 64, 64, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 0%, 25%, 0.2)", "rgba(64, 64, 64, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 0%, 25%, 1)", "rgb(64, 64, 64)", "HSL/HSLA value should parse and round correctly"], + ["hsl(360, 0%, 37.5%)", "rgb(96, 96, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 0%, 37.5%, 0)", "rgba(96, 96, 96, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 0%, 37.5%, 0.2)", "rgba(96, 96, 96, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 0%, 37.5%, 1)", "rgb(96, 96, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsl(360, 0%, 50%)", "rgb(128, 128, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 0%, 50%, 0)", "rgba(128, 128, 128, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 0%, 50%, 0.2)", "rgba(128, 128, 128, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 0%, 50%, 1)", "rgb(128, 128, 128)", "HSL/HSLA value should parse and round correctly"], + ["hsl(360, 0%, 62.5%)", "rgb(159, 159, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 0%, 62.5%, 0)", "rgba(159, 159, 159, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 0%, 62.5%, 0.2)", "rgba(159, 159, 159, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 0%, 62.5%, 1)", "rgb(159, 159, 159)", "HSL/HSLA value should parse and round correctly"], + ["hsl(360, 0%, 75%)", "rgb(191, 191, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 0%, 75%, 0)", "rgba(191, 191, 191, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 0%, 75%, 0.2)", "rgba(191, 191, 191, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 0%, 75%, 1)", "rgb(191, 191, 191)", "HSL/HSLA value should parse and round correctly"], + ["hsl(360, 0%, 87.5%)", "rgb(223, 223, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 0%, 87.5%, 0)", "rgba(223, 223, 223, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 0%, 87.5%, 0.2)", "rgba(223, 223, 223, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 0%, 87.5%, 1)", "rgb(223, 223, 223)", "HSL/HSLA value should parse and round correctly"], + ["hsl(360, 0%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 0%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 0%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 0%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(360, 12.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 12.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 12.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 12.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(360, 12.5%, 12.5%)", "rgb(36, 28, 28)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 12.5%, 12.5%, 0)", "rgba(36, 28, 28, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 12.5%, 12.5%, 0.2)", "rgba(36, 28, 28, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 12.5%, 12.5%, 1)", "rgb(36, 28, 28)", "HSL/HSLA value should parse and round correctly"], + ["hsl(360, 12.5%, 25%)", "rgb(72, 56, 56)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 12.5%, 25%, 0)", "rgba(72, 56, 56, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 12.5%, 25%, 0.2)", "rgba(72, 56, 56, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 12.5%, 25%, 1)", "rgb(72, 56, 56)", "HSL/HSLA value should parse and round correctly"], + ["hsl(360, 12.5%, 37.5%)", "rgb(108, 84, 84)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 12.5%, 37.5%, 0)", "rgba(108, 84, 84, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 12.5%, 37.5%, 0.2)", "rgba(108, 84, 84, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 12.5%, 37.5%, 1)", "rgb(108, 84, 84)", "HSL/HSLA value should parse and round correctly"], + ["hsl(360, 12.5%, 50%)", "rgb(143, 112, 112)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 12.5%, 50%, 0)", "rgba(143, 112, 112, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 12.5%, 50%, 0.2)", "rgba(143, 112, 112, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 12.5%, 50%, 1)", "rgb(143, 112, 112)", "HSL/HSLA value should parse and round correctly"], + ["hsl(360, 12.5%, 62.5%)", "rgb(171, 147, 147)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 12.5%, 62.5%, 0)", "rgba(171, 147, 147, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 12.5%, 62.5%, 0.2)", "rgba(171, 147, 147, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 12.5%, 62.5%, 1)", "rgb(171, 147, 147)", "HSL/HSLA value should parse and round correctly"], + ["hsl(360, 12.5%, 75%)", "rgb(199, 183, 183)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 12.5%, 75%, 0)", "rgba(199, 183, 183, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 12.5%, 75%, 0.2)", "rgba(199, 183, 183, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 12.5%, 75%, 1)", "rgb(199, 183, 183)", "HSL/HSLA value should parse and round correctly"], + ["hsl(360, 12.5%, 87.5%)", "rgb(227, 219, 219)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 12.5%, 87.5%, 0)", "rgba(227, 219, 219, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 12.5%, 87.5%, 0.2)", "rgba(227, 219, 219, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 12.5%, 87.5%, 1)", "rgb(227, 219, 219)", "HSL/HSLA value should parse and round correctly"], + ["hsl(360, 12.5%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 12.5%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 12.5%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 12.5%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(360, 25%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 25%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 25%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 25%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(360, 25%, 12.5%)", "rgb(40, 24, 24)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 25%, 12.5%, 0)", "rgba(40, 24, 24, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 25%, 12.5%, 0.2)", "rgba(40, 24, 24, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 25%, 12.5%, 1)", "rgb(40, 24, 24)", "HSL/HSLA value should parse and round correctly"], + ["hsl(360, 25%, 25%)", "rgb(80, 48, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 25%, 25%, 0)", "rgba(80, 48, 48, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 25%, 25%, 0.2)", "rgba(80, 48, 48, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 25%, 25%, 1)", "rgb(80, 48, 48)", "HSL/HSLA value should parse and round correctly"], + ["hsl(360, 25%, 37.5%)", "rgb(120, 72, 72)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 25%, 37.5%, 0)", "rgba(120, 72, 72, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 25%, 37.5%, 0.2)", "rgba(120, 72, 72, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 25%, 37.5%, 1)", "rgb(120, 72, 72)", "HSL/HSLA value should parse and round correctly"], + ["hsl(360, 25%, 50%)", "rgb(159, 96, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 25%, 50%, 0)", "rgba(159, 96, 96, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 25%, 50%, 0.2)", "rgba(159, 96, 96, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 25%, 50%, 1)", "rgb(159, 96, 96)", "HSL/HSLA value should parse and round correctly"], + ["hsl(360, 25%, 62.5%)", "rgb(183, 135, 135)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 25%, 62.5%, 0)", "rgba(183, 135, 135, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 25%, 62.5%, 0.2)", "rgba(183, 135, 135, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 25%, 62.5%, 1)", "rgb(183, 135, 135)", "HSL/HSLA value should parse and round correctly"], + ["hsl(360, 25%, 75%)", "rgb(207, 175, 175)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 25%, 75%, 0)", "rgba(207, 175, 175, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 25%, 75%, 0.2)", "rgba(207, 175, 175, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 25%, 75%, 1)", "rgb(207, 175, 175)", "HSL/HSLA value should parse and round correctly"], + ["hsl(360, 25%, 87.5%)", "rgb(231, 215, 215)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 25%, 87.5%, 0)", "rgba(231, 215, 215, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 25%, 87.5%, 0.2)", "rgba(231, 215, 215, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 25%, 87.5%, 1)", "rgb(231, 215, 215)", "HSL/HSLA value should parse and round correctly"], + ["hsl(360, 25%, 100%)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 25%, 100%, 0)", "rgba(255, 255, 255, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 25%, 100%, 0.2)", "rgba(255, 255, 255, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 25%, 100%, 1)", "rgb(255, 255, 255)", "HSL/HSLA value should parse and round correctly"], + ["hsl(360, 37.5%, 0%)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 37.5%, 0%, 0)", "rgba(0, 0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 37.5%, 0%, 0.2)", "rgba(0, 0, 0, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 37.5%, 0%, 1)", "rgb(0, 0, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsl(360, 37.5%, 12.5%)", "rgb(44, 20, 20)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 37.5%, 12.5%, 0)", "rgba(44, 20, 20, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 37.5%, 12.5%, 0.2)", "rgba(44, 20, 20, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 37.5%, 12.5%, 1)", "rgb(44, 20, 20)", "HSL/HSLA value should parse and round correctly"], + ["hsl(360, 37.5%, 25%)", "rgb(88, 40, 40)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 37.5%, 25%, 0)", "rgba(88, 40, 40, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 37.5%, 25%, 0.2)", "rgba(88, 40, 40, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 37.5%, 25%, 1)", "rgb(88, 40, 40)", "HSL/HSLA value should parse and round correctly"], + ["hsl(360, 37.5%, 37.5%)", "rgb(131, 60, 60)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 37.5%, 37.5%, 0)", "rgba(131, 60, 60, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 37.5%, 37.5%, 0.2)", "rgba(131, 60, 60, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 37.5%, 37.5%, 1)", "rgb(131, 60, 60)", "HSL/HSLA value should parse and round correctly"], + ["hsl(360, 37.5%, 50%)", "rgb(175, 80, 80)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 37.5%, 50%, 0)", "rgba(175, 80, 80, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 37.5%, 50%, 0.2)", "rgba(175, 80, 80, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 37.5%, 50%, 1)", "rgb(175, 80, 80)", "HSL/HSLA value should parse and round correctly"], + ["hsl(360, 37.5%, 62.5%)", "rgb(195, 124, 124)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 37.5%, 62.5%, 0)", "rgba(195, 124, 124, 0)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 37.5%, 62.5%, 0.2)", "rgba(195, 124, 124, 0.2)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 37.5%, 62.5%, 1)", "rgb(195, 124, 124)", "HSL/HSLA value should parse and round correctly"], + ["hsl(360, 37.5%, 75%)", "rgb(215, 167, 167)", "HSL/HSLA value should parse and round correctly"], + ["hsla(360, 37.5%, 75%, 0)", "rgba(215, 167, 167, 0)", "HSL/HSLA value should parse and round correctly"], +]; + +for (const test of tests) { + test_computed_value("color", test[0], test[1], test[2] ? `[${test[2]}]` : undefined); +} +</script> +</body> +</html> diff --git a/testing/web-platform/tests/css/css-color/parsing/color-computed-hwb.html b/testing/web-platform/tests/css/css-color/parsing/color-computed-hwb.html new file mode 100644 index 0000000000..d51351bb6d --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/color-computed-hwb.html @@ -0,0 +1,83 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 4: Computation of colors using HWB notation</title> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#the-hwb-notation"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#resolving-sRGB-values"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#serializing-sRGB-values"> +<link rel="author" title="Sam Weinig" href="mailto:weinig@apple.com"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/computed-testcommon.js"></script> +</head> +<body> +<div id="container"> + <div id="target"></div> +</div> +<style> + #container { + color: rgb(255, 0, 0); + } +</style> +<script> +tests = [ + ["hwb(120 30% 50%)", "rgb(77, 128, 77)"], + ["hwb(120 30% 50% / 0.5)", "rgba(77, 128, 77, 0.5)"], + ["hwb(120 30% 50% / 50%)", "rgba(77, 128, 77, 0.5)"], + ["hwb(none none none)", "rgb(255, 0, 0)"], + ["hwb(0 0% 0%)", "rgb(255, 0, 0)"], + ["hwb(none none none / none)", "rgba(255, 0, 0, 0)"], + ["hwb(0 0% 0% / 0)", "rgba(255, 0, 0, 0)"], + ["hwb(120 none none)", "rgb(0, 255, 0)"], + ["hwb(120 0% 0%)", "rgb(0, 255, 0)"], + ["hwb(120 80% none)", "rgb(204, 255, 204)"], + ["hwb(120 80% 0%)", "rgb(204, 255, 204)"], + ["hwb(120 none 50%)", "rgb(0, 128, 0)"], + ["hwb(120 0% 50%)", "rgb(0, 128, 0)"], + ["hwb(120 30% 50% / none)", "rgba(77, 128, 77, 0)"], + ["hwb(120 30% 50% / 0)", "rgba(77, 128, 77, 0)"], + ["hwb(120 30% 50% / 0%)", "rgba(77, 128, 77, 0)"], + ["hwb(none 100% 50% / none)", "rgba(170, 170, 170, 0)"], + ["hwb(0 100% 50% / 0)", "rgba(170, 170, 170, 0)"], + + ["hwb(0 50% 50%)", "rgb(128, 128, 128)", "HWB value should parse and round correctly"], + ["hwb(30 50% 50%)", "rgb(128, 128, 128)", "HWB value should parse and round correctly"], + ["hwb(60 50% 50%)", "rgb(128, 128, 128)", "HWB value should parse and round correctly"], + ["hwb(90 50% 50%)", "rgb(128, 128, 128)", "HWB value should parse and round correctly"], + ["hwb(120 50% 50%)", "rgb(128, 128, 128)", "HWB value should parse and round correctly"], + ["hwb(180 50% 50%)", "rgb(128, 128, 128)", "HWB value should parse and round correctly"], + ["hwb(210 50% 50%)", "rgb(128, 128, 128)", "HWB value should parse and round correctly"], + ["hwb(240 50% 50%)", "rgb(128, 128, 128)", "HWB value should parse and round correctly"], + ["hwb(270 50% 50%)", "rgb(128, 128, 128)", "HWB value should parse and round correctly"], + ["hwb(300 50% 50%)", "rgb(128, 128, 128)", "HWB value should parse and round correctly"], + ["hwb(330 50% 50%)", "rgb(128, 128, 128)", "HWB value should parse and round correctly"], + ["hwb(360 50% 50%)", "rgb(128, 128, 128)", "HWB value should parse and round correctly"], + ["hwb(90deg 50% 50%)", "rgb(128, 128, 128)", "HWB value should parse and round correctly"], + ["hwb(90 0% 50%)", "rgb(64, 128, 0)", "HWB value should parse and round correctly"], + ["hwb(90 12.5% 50%)", "rgb(80, 128, 32)", "HWB value should parse and round correctly"], + ["hwb(90 25% 50%)", "rgb(96, 128, 64)", "HWB value should parse and round correctly"], + ["hwb(90 37.5% 50%)", "rgb(112, 128, 96)", "HWB value should parse and round correctly"], + ["hwb(90 62.5% 50%)", "rgb(142, 142, 142)", "HWB value should parse and round correctly"], + ["hwb(90 75% 50%)", "rgb(153, 153, 153)", "HWB value should parse and round correctly"], + ["hwb(90 87.5% 50%)", "rgb(162, 162, 162)", "HWB value should parse and round correctly"], + ["hwb(90 100% 50%)", "rgb(170, 170, 170)", "HWB value should parse and round correctly"], + ["hwb(90 50% 0%)", "rgb(191, 255, 128)", "HWB value should parse and round correctly"], + ["hwb(90 50% 12.5%)", "rgb(175, 223, 128)", "HWB value should parse and round correctly"], + ["hwb(90 50% 25%)", "rgb(159, 191, 128)", "HWB value should parse and round correctly"], + ["hwb(90 50% 37.5%)", "rgb(143, 159, 128)", "HWB value should parse and round correctly"], + ["hwb(90 50% 62.5%)", "rgb(113, 113, 113)", "HWB value should parse and round correctly"], + ["hwb(90 50% 75%)", "rgb(102, 102, 102)", "HWB value should parse and round correctly"], + ["hwb(90 50% 87.5%)", "rgb(93, 93, 93)", "HWB value should parse and round correctly"], + ["hwb(90 50% 100%)", "rgb(85, 85, 85)", "HWB value should parse and round correctly"], + ["hwb(90 50% 50% / 0)", "rgba(128, 128, 128, 0)", "HWB value should parse and round correctly"], + ["hwb(90 50% 50% / 0.2)", "rgba(128, 128, 128, 0.2)", "HWB value should parse and round correctly"], + ["hwb(90 50% 50% / 1)", "rgb(128, 128, 128)", "HWB value should parse and round correctly"], +]; + +for (const test of tests) { + test_computed_value("color", test[0], test[1], test[2] ? `[${test[2]}]` : undefined); +} +</script> +</body> +</html> diff --git a/testing/web-platform/tests/css/css-color/parsing/color-computed-lab.html b/testing/web-platform/tests/css/css-color/parsing/color-computed-lab.html new file mode 100644 index 0000000000..c1c6b662e1 --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/color-computed-lab.html @@ -0,0 +1,152 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 4: Computation of colors using Lab notation</title> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#lab-colors"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#resolving-lab-lch-values"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#resolving-oklab-oklch-values"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#serializing-lab-lch"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#serializing-oklab-oklch"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/computed-testcommon.js"></script> +</head> +<body> +<div id="container"> + <div id="target"></div> +</div> +<style> + #container { + color: rgb(255, 0, 0); + } +</style> +<script> + +// lab() +test_computed_value("color", "lab(0 0 0)", "lab(0 0 0)"); +test_computed_value("color", "lab(0 0 0 / 1)", "lab(0 0 0)"); +test_computed_value("color", "lab(0 0 0 / 0.5)", "lab(0 0 0 / 0.5)"); +test_computed_value("color", "lab(20 0 10/0.5)", "lab(20 0 10 / 0.5)"); +test_computed_value("color", "lab(20 0 10/50%)", "lab(20 0 10 / 0.5)"); +test_computed_value("color", "lab(400 0 10/50%)", "lab(100 0 10 / 0.5)"); +test_computed_value("color", "lab(50 -160 160)", "lab(50 -160 160)"); +test_computed_value("color", "lab(50 -200 200)", "lab(50 -200 200)"); +test_computed_value("color", "lab(0 0 0 / -10%)", "lab(0 0 0 / 0)"); +test_computed_value("color", "lab(0 0 0 / 110%)", "lab(0 0 0)"); +test_computed_value("color", "lab(0 0 0 / 300%)", "lab(0 0 0)"); +test_computed_value("color", "lab(-40 0 0)", "lab(0 0 0)"); +test_computed_value("color", "lab(50 -20 0)", "lab(50 -20 0)"); +test_computed_value("color", "lab(50 0 -20)", "lab(50 0 -20)"); +test_computed_value("color", "lab(calc(50 * 3) calc(0.5 - 1) calc(1.5) / calc(-0.5 + 1))", "lab(100 -0.5 1.5 / 0.5)"); +test_computed_value("color", "lab(calc(-50 * 3) calc(0.5 + 1) calc(-1.5) / calc(-0.5 * 2))", "lab(0 1.5 -1.5 / 0)"); + +test_computed_value("color", "lab(none none none / none)", "lab(none none none / none)"); +test_computed_value("color", "lab(none none none)", "lab(none none none)"); +test_computed_value("color", "lab(20 none none / none)", "lab(20 none none / none)"); +test_computed_value("color", "lab(none none none / 0.5)", "lab(none none none / 0.5)"); +test_computed_value("color", "lab(0 0 0 / none)", "lab(0 0 0 / none)"); + +test_computed_value("color", "lab(calc(NaN) 0 0)", "lab(0 0 0)"); +test_computed_value("color", "lab(calc(0 / 0) 0 0)", "lab(0 0 0)"); + +// oklab() +test_computed_value("color", "oklab(0 0 0)", "oklab(0 0 0)"); +test_computed_value("color", "oklab(0 0 0 / 1)", "oklab(0 0 0)"); +test_computed_value("color", "oklab(0 0 0 / 0.5)", "oklab(0 0 0 / 0.5)"); +test_computed_value("color", "oklab(0.2 0 0.1/0.5)", "oklab(0.2 0 0.1 / 0.5)"); +test_computed_value("color", "oklab(0.2 0 0.1/50%)", "oklab(0.2 0 0.1 / 0.5)"); +test_computed_value("color", "oklab(4 0 0.1/50%)", "oklab(1 0 0.1 / 0.5)"); +test_computed_value("color", "oklab(0.5 -1.6 1.6)", "oklab(0.5 -1.6 1.6)"); +test_computed_value("color", "oklab(0.5 -2 2)", "oklab(0.5 -2 2)"); +test_computed_value("color", "oklab(0 0 0 / -10%)", "oklab(0 0 0 / 0)"); +test_computed_value("color", "oklab(0 0 0 / 110%)", "oklab(0 0 0)"); +test_computed_value("color", "oklab(0 0 0 / 300%)", "oklab(0 0 0)"); +test_computed_value("color", "oklab(-0.4 0 0)", "oklab(0 0 0)"); +test_computed_value("color", "oklab(0.5 -0.2 0)", "oklab(0.5 -0.2 0)"); +test_computed_value("color", "oklab(0.5 0 -0.2)", "oklab(0.5 0 -0.2)"); +test_computed_value("color", "oklab(calc(0.5 * 3) calc(0.5 - 1) calc(1.5) / calc(-0.5 + 1))", "oklab(1 -0.5 1.5 / 0.5)"); +test_computed_value("color", "oklab(calc(-0.5 * 3) calc(0.5 + 1) calc(-1.5) / calc(-0.5 * 2))", "oklab(0 1.5 -1.5 / 0)"); + +test_computed_value("color", "oklab(none none none / none)", "oklab(none none none / none)"); +test_computed_value("color", "oklab(none none none)", "oklab(none none none)"); +test_computed_value("color", "oklab(0.2 none none / none)", "oklab(0.2 none none / none)"); +test_computed_value("color", "oklab(none none none / 0.5)", "oklab(none none none / 0.5)"); +test_computed_value("color", "oklab(0 0 0 / none)", "oklab(0 0 0 / none)"); + +// These tests validate the ranges of lab() vs. oklab() components +test_computed_value("color", "lab(20% -50% 90%/0.5)", "lab(20 -62.5 112.5 / 0.5)"); +test_computed_value("color", "oklab(20% 70% -80%/0.5)", "oklab(0.2 0.28 -0.32 / 0.5)"); + +test_computed_value("color", "oklab(calc(NaN) 0 0)", "oklab(0 0 0)"); +test_computed_value("color", "oklab(calc(0 / 0) 0 0)", "oklab(0 0 0)"); + +// lch() +test_computed_value("color", "lch(0 0 0deg)", "lch(0 0 0)"); +test_computed_value("color", "lch(0 0 0deg / 1)", "lch(0 0 0)"); +test_computed_value("color", "lch(0 0 0deg / 0.5)", "lch(0 0 0 / 0.5)"); +test_computed_value("color", "lch(100 230 0deg / 0.5)", "lch(100 230 0 / 0.5)"); +test_computed_value("color", "lch(20 50 20deg/0.5)", "lch(20 50 20 / 0.5)"); +test_computed_value("color", "lch(20 50 20deg/50%)", "lch(20 50 20 / 0.5)"); +test_computed_value("color", "lch(10 20 20deg / -10%)", "lch(10 20 20 / 0)"); +test_computed_value("color", "lch(10 20 20deg / 110%)", "lch(10 20 20)"); +test_computed_value("color", "lch(10 20 1.28rad)", "lch(10 20 73.3386)"); +test_computed_value("color", "lch(10 20 380deg)", "lch(10 20 20)"); +test_computed_value("color", "lch(10 20 -340deg)", "lch(10 20 20)"); +test_computed_value("color", "lch(10 20 740deg)", "lch(10 20 20)"); +test_computed_value("color", "lch(10 20 -700deg)", "lch(10 20 20)"); +test_computed_value("color", "lch(-40 0 0)", "lch(0 0 0)"); +test_computed_value("color", "lch(20 -20 0)", "lch(20 0 0)"); +test_computed_value("color", "lch(0 0 0 / 0.5)", "lch(0 0 0 / 0.5)"); +test_computed_value("color", "lch(10 20 20 / 110%)", "lch(10 20 20)"); +test_computed_value("color", "lch(10 20 -700)", "lch(10 20 20)"); +test_computed_value("color", "lch(calc(50 * 3) calc(0.5 - 1) calc(20deg * 2) / calc(-0.5 + 1))", "lch(100 0 40 / 0.5)"); +test_computed_value("color", "lch(calc(-50 * 3) calc(0.5 + 1) calc(-20deg * 2) / calc(-0.5 * 2))", "lch(0 1.5 320 / 0)"); + +test_computed_value("color", "lch(none none none / none)", "lch(none none none / none)"); +test_computed_value("color", "lch(none none none)", "lch(none none none)"); +test_computed_value("color", "lch(20 none none / none)", "lch(20 none none / none)"); +test_computed_value("color", "lch(none none none / 0.5)", "lch(none none none / 0.5)"); +test_computed_value("color", "lch(0 0 0 / none)", "lch(0 0 0 / none)"); + +test_computed_value("color", "lch(calc(NaN) 0 0)", "lch(0 0 0)"); +test_computed_value("color", "lch(calc(0 / 0) 0 0)", "lch(0 0 0)"); + +// oklch() +test_computed_value("color", "oklch(0 0 0deg)", "oklch(0 0 0)"); +test_computed_value("color", "oklch(0 0 0deg / 1)", "oklch(0 0 0)"); +test_computed_value("color", "oklch(0 0 0deg / 0.5)", "oklch(0 0 0 / 0.5)"); +test_computed_value("color", "oklch(1 2.3 0deg / 0.5)", "oklch(1 2.3 0 / 0.5)"); +test_computed_value("color", "oklch(0.2 0.5 20deg/0.5)", "oklch(0.2 0.5 20 / 0.5)"); +test_computed_value("color", "oklch(0.2 0.5 20deg/50%)", "oklch(0.2 0.5 20 / 0.5)"); +test_computed_value("color", "oklch(0.1 0.2 20deg / -10%)", "oklch(0.1 0.2 20 / 0)"); +test_computed_value("color", "oklch(0.1 0.2 20deg / 110%)", "oklch(0.1 0.2 20)"); +test_computed_value("color", "oklch(0.1 0.2 1.28rad)", "oklch(0.1 0.2 73.3386)"); +test_computed_value("color", "oklch(0.1 0.2 380deg)", "oklch(0.1 0.2 20)"); +test_computed_value("color", "oklch(0.1 0.2 -340deg)", "oklch(0.1 0.2 20)"); +test_computed_value("color", "oklch(0.1 0.2 740deg)", "oklch(0.1 0.2 20)"); +test_computed_value("color", "oklch(0.1 0.2 -700deg)", "oklch(0.1 0.2 20)"); +test_computed_value("color", "oklch(-0.4 0 0)", "oklch(0 0 0)"); +test_computed_value("color", "oklch(0.2 -0.2 0)", "oklch(0.2 0 0)"); +test_computed_value("color", "oklch(0 0 0 / 0.5)", "oklch(0 0 0 / 0.5)"); +test_computed_value("color", "oklch(0.1 0.2 20 / 110%)", "oklch(0.1 0.2 20)"); +test_computed_value("color", "oklch(0.1 0.2 -700)", "oklch(0.1 0.2 20)"); +test_computed_value("color", "oklch(calc(0.5 * 3) calc(0.5 - 1) calc(20deg * 2) / calc(-0.5 + 1))", "oklch(1 0 40 / 0.5)"); +test_computed_value("color", "oklch(calc(-0.5 * 3) calc(0.5 + 1) calc(-20deg * 2) / calc(-0.5 * 2))", "oklch(0 1.5 320 / 0)"); + +test_computed_value("color", "oklch(none none none / none)", "oklch(none none none / none)"); +test_computed_value("color", "oklch(none none none)", "oklch(none none none)"); +test_computed_value("color", "oklch(0.2 none none / none)", "oklch(0.2 none none / none)"); +test_computed_value("color", "oklch(none none none / 0.5)", "oklch(none none none / 0.5)"); +test_computed_value("color", "oklch(0 0 0 / none)", "oklch(0 0 0 / none)"); + +// These tests validate the ranges of lch() vs. oklch() lightness and chroma +test_computed_value("color", "lch(20% 80% 10/0.5)", "lch(20 120 10 / 0.5)"); +test_computed_value("color", "oklch(20% 60% 10/0.5)", "oklch(0.2 0.24 10 / 0.5)"); + +test_computed_value("color", "oklch(calc(NaN) 0 0)", "oklch(0 0 0)"); +test_computed_value("color", "oklch(calc(0 / 0) 0 0)", "oklch(0 0 0)"); + +</script> +</body> +</html> diff --git a/testing/web-platform/tests/css/css-color/parsing/color-computed-named-color.html b/testing/web-platform/tests/css/css-color/parsing/color-computed-named-color.html new file mode 100644 index 0000000000..0fe639093a --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/color-computed-named-color.html @@ -0,0 +1,488 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 4: Computation of colors using named color notation</title> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#named-colors"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#resolving-sRGB-values"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#serializing-sRGB-values"> +<link rel="author" title="Chris Nardi" href="mailto:cnardi@chromium.org"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/computed-testcommon.js"></script> +</head> +<body> +<div id="container"> + <div id="target"></div> +</div> +<style> + #container { + color: rgb(255, 0, 0); + } +</style> +<script> +tests = [ + ["/**/transparent", "rgba(0, 0, 0, 0)", "Should parse to completely transparent"], + ["transparent", "rgba(0, 0, 0, 0)", "Should parse to completely transparent"], + [" transparent\n", "rgba(0, 0, 0, 0)", "Should parse to completely transparent"], + ["TransParent", "rgba(0, 0, 0, 0)", "Should parse to completely transparent"], + ["currentColor", "rgb(255, 0, 0)", "Should be same as parent color"], + ["CURRENTcolor", "rgb(255, 0, 0)", "Should be same as parent color"], + ["black", "rgb(0, 0, 0)", "Should parse as correct value"], + ["white", "rgb(255, 255, 255)", "Should parse as correct value"], + ["fuchsia", "rgb(255, 0, 255)", "Should parse as correct value"], + ["cyan", "rgb(0, 255, 255)", "Should parse as correct value"], + ["CyAn", "rgb(0, 255, 255)", "Should parse as cyan"], + + ["transparent", "rgba(0, 0, 0, 0)", "Keyword should parse properly"], + ["TRANSPARENT", "rgba(0, 0, 0, 0)", "Keywords should be case-insensitive"], + ["transparent", "rgba(0, 0, 0, 0)", "Code point should parse"], + ["aliceblue", "rgb(240, 248, 255)", "Keyword should parse properly"], + ["ALICEBLUE", "rgb(240, 248, 255)", "Keywords should be case-insensitive"], + ["aliceblue", "rgb(240, 248, 255)", "Code point should parse"], + ["antiquewhite", "rgb(250, 235, 215)", "Keyword should parse properly"], + ["ANTIQUEWHITE", "rgb(250, 235, 215)", "Keywords should be case-insensitive"], + ["antiquewhite", "rgb(250, 235, 215)", "Code point should parse"], + ["aqua", "rgb(0, 255, 255)", "Keyword should parse properly"], + ["AQUA", "rgb(0, 255, 255)", "Keywords should be case-insensitive"], + ["aqua", "rgb(0, 255, 255)", "Code point should parse"], + ["aquamarine", "rgb(127, 255, 212)", "Keyword should parse properly"], + ["AQUAMARINE", "rgb(127, 255, 212)", "Keywords should be case-insensitive"], + ["aquamarine", "rgb(127, 255, 212)", "Code point should parse"], + ["azure", "rgb(240, 255, 255)", "Keyword should parse properly"], + ["AZURE", "rgb(240, 255, 255)", "Keywords should be case-insensitive"], + ["azure", "rgb(240, 255, 255)", "Code point should parse"], + ["beige", "rgb(245, 245, 220)", "Keyword should parse properly"], + ["BEIGE", "rgb(245, 245, 220)", "Keywords should be case-insensitive"], + ["beige", "rgb(245, 245, 220)", "Code point should parse"], + ["bisque", "rgb(255, 228, 196)", "Keyword should parse properly"], + ["BISQUE", "rgb(255, 228, 196)", "Keywords should be case-insensitive"], + ["bisque", "rgb(255, 228, 196)", "Code point should parse"], + ["black", "rgb(0, 0, 0)", "Keyword should parse properly"], + ["BLACK", "rgb(0, 0, 0)", "Keywords should be case-insensitive"], + ["black", "rgb(0, 0, 0)", "Code point should parse"], + ["blanchedalmond", "rgb(255, 235, 205)", "Keyword should parse properly"], + ["BLANCHEDALMOND", "rgb(255, 235, 205)", "Keywords should be case-insensitive"], + ["blanchedalmond", "rgb(255, 235, 205)", "Code point should parse"], + ["blue", "rgb(0, 0, 255)", "Keyword should parse properly"], + ["BLUE", "rgb(0, 0, 255)", "Keywords should be case-insensitive"], + ["blue", "rgb(0, 0, 255)", "Code point should parse"], + ["blueviolet", "rgb(138, 43, 226)", "Keyword should parse properly"], + ["BLUEVIOLET", "rgb(138, 43, 226)", "Keywords should be case-insensitive"], + ["blueviolet", "rgb(138, 43, 226)", "Code point should parse"], + ["brown", "rgb(165, 42, 42)", "Keyword should parse properly"], + ["BROWN", "rgb(165, 42, 42)", "Keywords should be case-insensitive"], + ["brown", "rgb(165, 42, 42)", "Code point should parse"], + ["burlywood", "rgb(222, 184, 135)", "Keyword should parse properly"], + ["BURLYWOOD", "rgb(222, 184, 135)", "Keywords should be case-insensitive"], + ["burlywood", "rgb(222, 184, 135)", "Code point should parse"], + ["cadetblue", "rgb(95, 158, 160)", "Keyword should parse properly"], + ["CADETBLUE", "rgb(95, 158, 160)", "Keywords should be case-insensitive"], + ["cadetblue", "rgb(95, 158, 160)", "Code point should parse"], + ["chartreuse", "rgb(127, 255, 0)", "Keyword should parse properly"], + ["CHARTREUSE", "rgb(127, 255, 0)", "Keywords should be case-insensitive"], + ["chartreuse", "rgb(127, 255, 0)", "Code point should parse"], + ["chocolate", "rgb(210, 105, 30)", "Keyword should parse properly"], + ["CHOCOLATE", "rgb(210, 105, 30)", "Keywords should be case-insensitive"], + ["chocolate", "rgb(210, 105, 30)", "Code point should parse"], + ["coral", "rgb(255, 127, 80)", "Keyword should parse properly"], + ["CORAL", "rgb(255, 127, 80)", "Keywords should be case-insensitive"], + ["coral", "rgb(255, 127, 80)", "Code point should parse"], + ["cornflowerblue", "rgb(100, 149, 237)", "Keyword should parse properly"], + ["CORNFLOWERBLUE", "rgb(100, 149, 237)", "Keywords should be case-insensitive"], + ["cornflowerblue", "rgb(100, 149, 237)", "Code point should parse"], + ["cornsilk", "rgb(255, 248, 220)", "Keyword should parse properly"], + ["CORNSILK", "rgb(255, 248, 220)", "Keywords should be case-insensitive"], + ["cornsilk", "rgb(255, 248, 220)", "Code point should parse"], + ["crimson", "rgb(220, 20, 60)", "Keyword should parse properly"], + ["CRIMSON", "rgb(220, 20, 60)", "Keywords should be case-insensitive"], + ["crimson", "rgb(220, 20, 60)", "Code point should parse"], + ["cyan", "rgb(0, 255, 255)", "Keyword should parse properly"], + ["CYAN", "rgb(0, 255, 255)", "Keywords should be case-insensitive"], + ["cyan", "rgb(0, 255, 255)", "Code point should parse"], + ["darkblue", "rgb(0, 0, 139)", "Keyword should parse properly"], + ["DARKBLUE", "rgb(0, 0, 139)", "Keywords should be case-insensitive"], + ["darkblue", "rgb(0, 0, 139)", "Code point should parse"], + ["darkcyan", "rgb(0, 139, 139)", "Keyword should parse properly"], + ["DARKCYAN", "rgb(0, 139, 139)", "Keywords should be case-insensitive"], + ["darkcyan", "rgb(0, 139, 139)", "Code point should parse"], + ["darkgoldenrod", "rgb(184, 134, 11)", "Keyword should parse properly"], + ["DARKGOLDENROD", "rgb(184, 134, 11)", "Keywords should be case-insensitive"], + ["darkgoldenrod", "rgb(184, 134, 11)", "Code point should parse"], + ["darkgray", "rgb(169, 169, 169)", "Keyword should parse properly"], + ["DARKGRAY", "rgb(169, 169, 169)", "Keywords should be case-insensitive"], + ["darkgray", "rgb(169, 169, 169)", "Code point should parse"], + ["darkgreen", "rgb(0, 100, 0)", "Keyword should parse properly"], + ["DARKGREEN", "rgb(0, 100, 0)", "Keywords should be case-insensitive"], + ["darkgreen", "rgb(0, 100, 0)", "Code point should parse"], + ["darkgrey", "rgb(169, 169, 169)", "Keyword should parse properly"], + ["DARKGREY", "rgb(169, 169, 169)", "Keywords should be case-insensitive"], + ["darkgrey", "rgb(169, 169, 169)", "Code point should parse"], + ["darkkhaki", "rgb(189, 183, 107)", "Keyword should parse properly"], + ["DARKKHAKI", "rgb(189, 183, 107)", "Keywords should be case-insensitive"], + ["darkkhaki", "rgb(189, 183, 107)", "Code point should parse"], + ["darkmagenta", "rgb(139, 0, 139)", "Keyword should parse properly"], + ["DARKMAGENTA", "rgb(139, 0, 139)", "Keywords should be case-insensitive"], + ["darkmagenta", "rgb(139, 0, 139)", "Code point should parse"], + ["darkolivegreen", "rgb(85, 107, 47)", "Keyword should parse properly"], + ["DARKOLIVEGREEN", "rgb(85, 107, 47)", "Keywords should be case-insensitive"], + ["darkolivegreen", "rgb(85, 107, 47)", "Code point should parse"], + ["darkorange", "rgb(255, 140, 0)", "Keyword should parse properly"], + ["DARKORANGE", "rgb(255, 140, 0)", "Keywords should be case-insensitive"], + ["darkorange", "rgb(255, 140, 0)", "Code point should parse"], + ["darkorchid", "rgb(153, 50, 204)", "Keyword should parse properly"], + ["DARKORCHID", "rgb(153, 50, 204)", "Keywords should be case-insensitive"], + ["darkorchid", "rgb(153, 50, 204)", "Code point should parse"], + ["darkred", "rgb(139, 0, 0)", "Keyword should parse properly"], + ["DARKRED", "rgb(139, 0, 0)", "Keywords should be case-insensitive"], + ["darkred", "rgb(139, 0, 0)", "Code point should parse"], + ["darksalmon", "rgb(233, 150, 122)", "Keyword should parse properly"], + ["DARKSALMON", "rgb(233, 150, 122)", "Keywords should be case-insensitive"], + ["darksalmon", "rgb(233, 150, 122)", "Code point should parse"], + ["darkseagreen", "rgb(143, 188, 143)", "Keyword should parse properly"], + ["DARKSEAGREEN", "rgb(143, 188, 143)", "Keywords should be case-insensitive"], + ["darkseagreen", "rgb(143, 188, 143)", "Code point should parse"], + ["darkslateblue", "rgb(72, 61, 139)", "Keyword should parse properly"], + ["DARKSLATEBLUE", "rgb(72, 61, 139)", "Keywords should be case-insensitive"], + ["darkslateblue", "rgb(72, 61, 139)", "Code point should parse"], + ["darkslategray", "rgb(47, 79, 79)", "Keyword should parse properly"], + ["DARKSLATEGRAY", "rgb(47, 79, 79)", "Keywords should be case-insensitive"], + ["darkslategray", "rgb(47, 79, 79)", "Code point should parse"], + ["darkslategrey", "rgb(47, 79, 79)", "Keyword should parse properly"], + ["DARKSLATEGREY", "rgb(47, 79, 79)", "Keywords should be case-insensitive"], + ["darkslategrey", "rgb(47, 79, 79)", "Code point should parse"], + ["darkturquoise", "rgb(0, 206, 209)", "Keyword should parse properly"], + ["DARKTURQUOISE", "rgb(0, 206, 209)", "Keywords should be case-insensitive"], + ["darkturquoise", "rgb(0, 206, 209)", "Code point should parse"], + ["darkviolet", "rgb(148, 0, 211)", "Keyword should parse properly"], + ["DARKVIOLET", "rgb(148, 0, 211)", "Keywords should be case-insensitive"], + ["darkviolet", "rgb(148, 0, 211)", "Code point should parse"], + ["deeppink", "rgb(255, 20, 147)", "Keyword should parse properly"], + ["DEEPPINK", "rgb(255, 20, 147)", "Keywords should be case-insensitive"], + ["deeppink", "rgb(255, 20, 147)", "Code point should parse"], + ["deepskyblue", "rgb(0, 191, 255)", "Keyword should parse properly"], + ["DEEPSKYBLUE", "rgb(0, 191, 255)", "Keywords should be case-insensitive"], + ["deepskyblue", "rgb(0, 191, 255)", "Code point should parse"], + ["dimgray", "rgb(105, 105, 105)", "Keyword should parse properly"], + ["DIMGRAY", "rgb(105, 105, 105)", "Keywords should be case-insensitive"], + ["dimgray", "rgb(105, 105, 105)", "Code point should parse"], + ["dimgrey", "rgb(105, 105, 105)", "Keyword should parse properly"], + ["DIMGREY", "rgb(105, 105, 105)", "Keywords should be case-insensitive"], + ["dimgrey", "rgb(105, 105, 105)", "Code point should parse"], + ["dodgerblue", "rgb(30, 144, 255)", "Keyword should parse properly"], + ["DODGERBLUE", "rgb(30, 144, 255)", "Keywords should be case-insensitive"], + ["dodgerblue", "rgb(30, 144, 255)", "Code point should parse"], + ["firebrick", "rgb(178, 34, 34)", "Keyword should parse properly"], + ["FIREBRICK", "rgb(178, 34, 34)", "Keywords should be case-insensitive"], + ["firebrick", "rgb(178, 34, 34)", "Code point should parse"], + ["floralwhite", "rgb(255, 250, 240)", "Keyword should parse properly"], + ["FLORALWHITE", "rgb(255, 250, 240)", "Keywords should be case-insensitive"], + ["floralwhite", "rgb(255, 250, 240)", "Code point should parse"], + ["forestgreen", "rgb(34, 139, 34)", "Keyword should parse properly"], + ["FORESTGREEN", "rgb(34, 139, 34)", "Keywords should be case-insensitive"], + ["forestgreen", "rgb(34, 139, 34)", "Code point should parse"], + ["fuchsia", "rgb(255, 0, 255)", "Keyword should parse properly"], + ["FUCHSIA", "rgb(255, 0, 255)", "Keywords should be case-insensitive"], + ["fuchsia", "rgb(255, 0, 255)", "Code point should parse"], + ["gainsboro", "rgb(220, 220, 220)", "Keyword should parse properly"], + ["GAINSBORO", "rgb(220, 220, 220)", "Keywords should be case-insensitive"], + ["gainsboro", "rgb(220, 220, 220)", "Code point should parse"], + ["ghostwhite", "rgb(248, 248, 255)", "Keyword should parse properly"], + ["GHOSTWHITE", "rgb(248, 248, 255)", "Keywords should be case-insensitive"], + ["ghostwhite", "rgb(248, 248, 255)", "Code point should parse"], + ["gold", "rgb(255, 215, 0)", "Keyword should parse properly"], + ["GOLD", "rgb(255, 215, 0)", "Keywords should be case-insensitive"], + ["gold", "rgb(255, 215, 0)", "Code point should parse"], + ["goldenrod", "rgb(218, 165, 32)", "Keyword should parse properly"], + ["GOLDENROD", "rgb(218, 165, 32)", "Keywords should be case-insensitive"], + ["goldenrod", "rgb(218, 165, 32)", "Code point should parse"], + ["gray", "rgb(128, 128, 128)", "Keyword should parse properly"], + ["GRAY", "rgb(128, 128, 128)", "Keywords should be case-insensitive"], + ["gray", "rgb(128, 128, 128)", "Code point should parse"], + ["green", "rgb(0, 128, 0)", "Keyword should parse properly"], + ["GREEN", "rgb(0, 128, 0)", "Keywords should be case-insensitive"], + ["green", "rgb(0, 128, 0)", "Code point should parse"], + ["greenyellow", "rgb(173, 255, 47)", "Keyword should parse properly"], + ["GREENYELLOW", "rgb(173, 255, 47)", "Keywords should be case-insensitive"], + ["greenyellow", "rgb(173, 255, 47)", "Code point should parse"], + ["grey", "rgb(128, 128, 128)", "Keyword should parse properly"], + ["GREY", "rgb(128, 128, 128)", "Keywords should be case-insensitive"], + ["grey", "rgb(128, 128, 128)", "Code point should parse"], + ["honeydew", "rgb(240, 255, 240)", "Keyword should parse properly"], + ["HONEYDEW", "rgb(240, 255, 240)", "Keywords should be case-insensitive"], + ["honeydew", "rgb(240, 255, 240)", "Code point should parse"], + ["hotpink", "rgb(255, 105, 180)", "Keyword should parse properly"], + ["HOTPINK", "rgb(255, 105, 180)", "Keywords should be case-insensitive"], + ["hotpink", "rgb(255, 105, 180)", "Code point should parse"], + ["indianred", "rgb(205, 92, 92)", "Keyword should parse properly"], + ["INDIANRED", "rgb(205, 92, 92)", "Keywords should be case-insensitive"], + ["indianred", "rgb(205, 92, 92)", "Code point should parse"], + ["indigo", "rgb(75, 0, 130)", "Keyword should parse properly"], + ["INDIGO", "rgb(75, 0, 130)", "Keywords should be case-insensitive"], + ["indigo", "rgb(75, 0, 130)", "Code point should parse"], + ["ivory", "rgb(255, 255, 240)", "Keyword should parse properly"], + ["IVORY", "rgb(255, 255, 240)", "Keywords should be case-insensitive"], + ["ivory", "rgb(255, 255, 240)", "Code point should parse"], + ["khaki", "rgb(240, 230, 140)", "Keyword should parse properly"], + ["KHAKI", "rgb(240, 230, 140)", "Keywords should be case-insensitive"], + ["khaki", "rgb(240, 230, 140)", "Code point should parse"], + ["lavender", "rgb(230, 230, 250)", "Keyword should parse properly"], + ["LAVENDER", "rgb(230, 230, 250)", "Keywords should be case-insensitive"], + ["lavender", "rgb(230, 230, 250)", "Code point should parse"], + ["lavenderblush", "rgb(255, 240, 245)", "Keyword should parse properly"], + ["LAVENDERBLUSH", "rgb(255, 240, 245)", "Keywords should be case-insensitive"], + ["lavenderblush", "rgb(255, 240, 245)", "Code point should parse"], + ["lawngreen", "rgb(124, 252, 0)", "Keyword should parse properly"], + ["LAWNGREEN", "rgb(124, 252, 0)", "Keywords should be case-insensitive"], + ["lawngreen", "rgb(124, 252, 0)", "Code point should parse"], + ["lemonchiffon", "rgb(255, 250, 205)", "Keyword should parse properly"], + ["LEMONCHIFFON", "rgb(255, 250, 205)", "Keywords should be case-insensitive"], + ["lemonchiffon", "rgb(255, 250, 205)", "Code point should parse"], + ["lightblue", "rgb(173, 216, 230)", "Keyword should parse properly"], + ["LIGHTBLUE", "rgb(173, 216, 230)", "Keywords should be case-insensitive"], + ["lightblue", "rgb(173, 216, 230)", "Code point should parse"], + ["lightcoral", "rgb(240, 128, 128)", "Keyword should parse properly"], + ["LIGHTCORAL", "rgb(240, 128, 128)", "Keywords should be case-insensitive"], + ["lightcoral", "rgb(240, 128, 128)", "Code point should parse"], + ["lightcyan", "rgb(224, 255, 255)", "Keyword should parse properly"], + ["LIGHTCYAN", "rgb(224, 255, 255)", "Keywords should be case-insensitive"], + ["lightcyan", "rgb(224, 255, 255)", "Code point should parse"], + ["lightgoldenrodyellow", "rgb(250, 250, 210)", "Keyword should parse properly"], + ["LIGHTGOLDENRODYELLOW", "rgb(250, 250, 210)", "Keywords should be case-insensitive"], + ["lightgoldenrodyellow", "rgb(250, 250, 210)", "Code point should parse"], + ["lightgray", "rgb(211, 211, 211)", "Keyword should parse properly"], + ["LIGHTGRAY", "rgb(211, 211, 211)", "Keywords should be case-insensitive"], + ["lightgray", "rgb(211, 211, 211)", "Code point should parse"], + ["lightgreen", "rgb(144, 238, 144)", "Keyword should parse properly"], + ["LIGHTGREEN", "rgb(144, 238, 144)", "Keywords should be case-insensitive"], + ["lightgreen", "rgb(144, 238, 144)", "Code point should parse"], + ["lightgrey", "rgb(211, 211, 211)", "Keyword should parse properly"], + ["LIGHTGREY", "rgb(211, 211, 211)", "Keywords should be case-insensitive"], + ["lightgrey", "rgb(211, 211, 211)", "Code point should parse"], + ["lightpink", "rgb(255, 182, 193)", "Keyword should parse properly"], + ["LIGHTPINK", "rgb(255, 182, 193)", "Keywords should be case-insensitive"], + ["lightpink", "rgb(255, 182, 193)", "Code point should parse"], + ["lightsalmon", "rgb(255, 160, 122)", "Keyword should parse properly"], + ["LIGHTSALMON", "rgb(255, 160, 122)", "Keywords should be case-insensitive"], + ["lightsalmon", "rgb(255, 160, 122)", "Code point should parse"], + ["lightseagreen", "rgb(32, 178, 170)", "Keyword should parse properly"], + ["LIGHTSEAGREEN", "rgb(32, 178, 170)", "Keywords should be case-insensitive"], + ["lightseagreen", "rgb(32, 178, 170)", "Code point should parse"], + ["lightskyblue", "rgb(135, 206, 250)", "Keyword should parse properly"], + ["LIGHTSKYBLUE", "rgb(135, 206, 250)", "Keywords should be case-insensitive"], + ["lightskyblue", "rgb(135, 206, 250)", "Code point should parse"], + ["lightslategray", "rgb(119, 136, 153)", "Keyword should parse properly"], + ["LIGHTSLATEGRAY", "rgb(119, 136, 153)", "Keywords should be case-insensitive"], + ["lightslategray", "rgb(119, 136, 153)", "Code point should parse"], + ["lightslategrey", "rgb(119, 136, 153)", "Keyword should parse properly"], + ["LIGHTSLATEGREY", "rgb(119, 136, 153)", "Keywords should be case-insensitive"], + ["lightslategrey", "rgb(119, 136, 153)", "Code point should parse"], + ["lightsteelblue", "rgb(176, 196, 222)", "Keyword should parse properly"], + ["LIGHTSTEELBLUE", "rgb(176, 196, 222)", "Keywords should be case-insensitive"], + ["lightsteelblue", "rgb(176, 196, 222)", "Code point should parse"], + ["lightyellow", "rgb(255, 255, 224)", "Keyword should parse properly"], + ["LIGHTYELLOW", "rgb(255, 255, 224)", "Keywords should be case-insensitive"], + ["lightyellow", "rgb(255, 255, 224)", "Code point should parse"], + ["lime", "rgb(0, 255, 0)", "Keyword should parse properly"], + ["LIME", "rgb(0, 255, 0)", "Keywords should be case-insensitive"], + ["lime", "rgb(0, 255, 0)", "Code point should parse"], + ["limegreen", "rgb(50, 205, 50)", "Keyword should parse properly"], + ["LIMEGREEN", "rgb(50, 205, 50)", "Keywords should be case-insensitive"], + ["limegreen", "rgb(50, 205, 50)", "Code point should parse"], + ["linen", "rgb(250, 240, 230)", "Keyword should parse properly"], + ["LINEN", "rgb(250, 240, 230)", "Keywords should be case-insensitive"], + ["linen", "rgb(250, 240, 230)", "Code point should parse"], + ["magenta", "rgb(255, 0, 255)", "Keyword should parse properly"], + ["MAGENTA", "rgb(255, 0, 255)", "Keywords should be case-insensitive"], + ["magenta", "rgb(255, 0, 255)", "Code point should parse"], + ["maroon", "rgb(128, 0, 0)", "Keyword should parse properly"], + ["MAROON", "rgb(128, 0, 0)", "Keywords should be case-insensitive"], + ["maroon", "rgb(128, 0, 0)", "Code point should parse"], + ["mediumaquamarine", "rgb(102, 205, 170)", "Keyword should parse properly"], + ["MEDIUMAQUAMARINE", "rgb(102, 205, 170)", "Keywords should be case-insensitive"], + ["mediumaquamarine", "rgb(102, 205, 170)", "Code point should parse"], + ["mediumblue", "rgb(0, 0, 205)", "Keyword should parse properly"], + ["MEDIUMBLUE", "rgb(0, 0, 205)", "Keywords should be case-insensitive"], + ["mediumblue", "rgb(0, 0, 205)", "Code point should parse"], + ["mediumorchid", "rgb(186, 85, 211)", "Keyword should parse properly"], + ["MEDIUMORCHID", "rgb(186, 85, 211)", "Keywords should be case-insensitive"], + ["mediumorchid", "rgb(186, 85, 211)", "Code point should parse"], + ["mediumpurple", "rgb(147, 112, 219)", "Keyword should parse properly"], + ["MEDIUMPURPLE", "rgb(147, 112, 219)", "Keywords should be case-insensitive"], + ["mediumpurple", "rgb(147, 112, 219)", "Code point should parse"], + ["mediumseagreen", "rgb(60, 179, 113)", "Keyword should parse properly"], + ["MEDIUMSEAGREEN", "rgb(60, 179, 113)", "Keywords should be case-insensitive"], + ["mediumseagreen", "rgb(60, 179, 113)", "Code point should parse"], + ["mediumslateblue", "rgb(123, 104, 238)", "Keyword should parse properly"], + ["MEDIUMSLATEBLUE", "rgb(123, 104, 238)", "Keywords should be case-insensitive"], + ["mediumslateblue", "rgb(123, 104, 238)", "Code point should parse"], + ["mediumspringgreen", "rgb(0, 250, 154)", "Keyword should parse properly"], + ["MEDIUMSPRINGGREEN", "rgb(0, 250, 154)", "Keywords should be case-insensitive"], + ["mediumspringgreen", "rgb(0, 250, 154)", "Code point should parse"], + ["mediumturquoise", "rgb(72, 209, 204)", "Keyword should parse properly"], + ["MEDIUMTURQUOISE", "rgb(72, 209, 204)", "Keywords should be case-insensitive"], + ["mediumturquoise", "rgb(72, 209, 204)", "Code point should parse"], + ["mediumvioletred", "rgb(199, 21, 133)", "Keyword should parse properly"], + ["MEDIUMVIOLETRED", "rgb(199, 21, 133)", "Keywords should be case-insensitive"], + ["mediumvioletred", "rgb(199, 21, 133)", "Code point should parse"], + ["midnightblue", "rgb(25, 25, 112)", "Keyword should parse properly"], + ["MIDNIGHTBLUE", "rgb(25, 25, 112)", "Keywords should be case-insensitive"], + ["midnightblue", "rgb(25, 25, 112)", "Code point should parse"], + ["mintcream", "rgb(245, 255, 250)", "Keyword should parse properly"], + ["MINTCREAM", "rgb(245, 255, 250)", "Keywords should be case-insensitive"], + ["mintcream", "rgb(245, 255, 250)", "Code point should parse"], + ["mistyrose", "rgb(255, 228, 225)", "Keyword should parse properly"], + ["MISTYROSE", "rgb(255, 228, 225)", "Keywords should be case-insensitive"], + ["mistyrose", "rgb(255, 228, 225)", "Code point should parse"], + ["moccasin", "rgb(255, 228, 181)", "Keyword should parse properly"], + ["MOCCASIN", "rgb(255, 228, 181)", "Keywords should be case-insensitive"], + ["moccasin", "rgb(255, 228, 181)", "Code point should parse"], + ["navajowhite", "rgb(255, 222, 173)", "Keyword should parse properly"], + ["NAVAJOWHITE", "rgb(255, 222, 173)", "Keywords should be case-insensitive"], + ["navajowhite", "rgb(255, 222, 173)", "Code point should parse"], + ["navy", "rgb(0, 0, 128)", "Keyword should parse properly"], + ["NAVY", "rgb(0, 0, 128)", "Keywords should be case-insensitive"], + ["navy", "rgb(0, 0, 128)", "Code point should parse"], + ["oldlace", "rgb(253, 245, 230)", "Keyword should parse properly"], + ["OLDLACE", "rgb(253, 245, 230)", "Keywords should be case-insensitive"], + ["oldlace", "rgb(253, 245, 230)", "Code point should parse"], + ["olive", "rgb(128, 128, 0)", "Keyword should parse properly"], + ["OLIVE", "rgb(128, 128, 0)", "Keywords should be case-insensitive"], + ["olive", "rgb(128, 128, 0)", "Code point should parse"], + ["olivedrab", "rgb(107, 142, 35)", "Keyword should parse properly"], + ["OLIVEDRAB", "rgb(107, 142, 35)", "Keywords should be case-insensitive"], + ["olivedrab", "rgb(107, 142, 35)", "Code point should parse"], + ["orange", "rgb(255, 165, 0)", "Keyword should parse properly"], + ["ORANGE", "rgb(255, 165, 0)", "Keywords should be case-insensitive"], + ["orange", "rgb(255, 165, 0)", "Code point should parse"], + ["orangered", "rgb(255, 69, 0)", "Keyword should parse properly"], + ["ORANGERED", "rgb(255, 69, 0)", "Keywords should be case-insensitive"], + ["orangered", "rgb(255, 69, 0)", "Code point should parse"], + ["orchid", "rgb(218, 112, 214)", "Keyword should parse properly"], + ["ORCHID", "rgb(218, 112, 214)", "Keywords should be case-insensitive"], + ["orchid", "rgb(218, 112, 214)", "Code point should parse"], + ["palegoldenrod", "rgb(238, 232, 170)", "Keyword should parse properly"], + ["PALEGOLDENROD", "rgb(238, 232, 170)", "Keywords should be case-insensitive"], + ["palegoldenrod", "rgb(238, 232, 170)", "Code point should parse"], + ["palegreen", "rgb(152, 251, 152)", "Keyword should parse properly"], + ["PALEGREEN", "rgb(152, 251, 152)", "Keywords should be case-insensitive"], + ["palegreen", "rgb(152, 251, 152)", "Code point should parse"], + ["paleturquoise", "rgb(175, 238, 238)", "Keyword should parse properly"], + ["PALETURQUOISE", "rgb(175, 238, 238)", "Keywords should be case-insensitive"], + ["paleturquoise", "rgb(175, 238, 238)", "Code point should parse"], + ["palevioletred", "rgb(219, 112, 147)", "Keyword should parse properly"], + ["PALEVIOLETRED", "rgb(219, 112, 147)", "Keywords should be case-insensitive"], + ["palevioletred", "rgb(219, 112, 147)", "Code point should parse"], + ["papayawhip", "rgb(255, 239, 213)", "Keyword should parse properly"], + ["PAPAYAWHIP", "rgb(255, 239, 213)", "Keywords should be case-insensitive"], + ["papayawhip", "rgb(255, 239, 213)", "Code point should parse"], + ["peachpuff", "rgb(255, 218, 185)", "Keyword should parse properly"], + ["PEACHPUFF", "rgb(255, 218, 185)", "Keywords should be case-insensitive"], + ["peachpuff", "rgb(255, 218, 185)", "Code point should parse"], + ["peru", "rgb(205, 133, 63)", "Keyword should parse properly"], + ["PERU", "rgb(205, 133, 63)", "Keywords should be case-insensitive"], + ["peru", "rgb(205, 133, 63)", "Code point should parse"], + ["pink", "rgb(255, 192, 203)", "Keyword should parse properly"], + ["PINK", "rgb(255, 192, 203)", "Keywords should be case-insensitive"], + ["pink", "rgb(255, 192, 203)", "Code point should parse"], + ["plum", "rgb(221, 160, 221)", "Keyword should parse properly"], + ["PLUM", "rgb(221, 160, 221)", "Keywords should be case-insensitive"], + ["plum", "rgb(221, 160, 221)", "Code point should parse"], + ["powderblue", "rgb(176, 224, 230)", "Keyword should parse properly"], + ["POWDERBLUE", "rgb(176, 224, 230)", "Keywords should be case-insensitive"], + ["powderblue", "rgb(176, 224, 230)", "Code point should parse"], + ["purple", "rgb(128, 0, 128)", "Keyword should parse properly"], + ["PURPLE", "rgb(128, 0, 128)", "Keywords should be case-insensitive"], + ["purple", "rgb(128, 0, 128)", "Code point should parse"], + ["red", "rgb(255, 0, 0)", "Keyword should parse properly"], + ["RED", "rgb(255, 0, 0)", "Keywords should be case-insensitive"], + ["red", "rgb(255, 0, 0)", "Code point should parse"], + ["rosybrown", "rgb(188, 143, 143)", "Keyword should parse properly"], + ["ROSYBROWN", "rgb(188, 143, 143)", "Keywords should be case-insensitive"], + ["rosybrown", "rgb(188, 143, 143)", "Code point should parse"], + ["royalblue", "rgb(65, 105, 225)", "Keyword should parse properly"], + ["ROYALBLUE", "rgb(65, 105, 225)", "Keywords should be case-insensitive"], + ["royalblue", "rgb(65, 105, 225)", "Code point should parse"], + ["saddlebrown", "rgb(139, 69, 19)", "Keyword should parse properly"], + ["SADDLEBROWN", "rgb(139, 69, 19)", "Keywords should be case-insensitive"], + ["saddlebrown", "rgb(139, 69, 19)", "Code point should parse"], + ["salmon", "rgb(250, 128, 114)", "Keyword should parse properly"], + ["SALMON", "rgb(250, 128, 114)", "Keywords should be case-insensitive"], + ["salmon", "rgb(250, 128, 114)", "Code point should parse"], + ["sandybrown", "rgb(244, 164, 96)", "Keyword should parse properly"], + ["SANDYBROWN", "rgb(244, 164, 96)", "Keywords should be case-insensitive"], + ["sandybrown", "rgb(244, 164, 96)", "Code point should parse"], + ["seagreen", "rgb(46, 139, 87)", "Keyword should parse properly"], + ["SEAGREEN", "rgb(46, 139, 87)", "Keywords should be case-insensitive"], + ["seagreen", "rgb(46, 139, 87)", "Code point should parse"], + ["seashell", "rgb(255, 245, 238)", "Keyword should parse properly"], + ["SEASHELL", "rgb(255, 245, 238)", "Keywords should be case-insensitive"], + ["seashell", "rgb(255, 245, 238)", "Code point should parse"], + ["sienna", "rgb(160, 82, 45)", "Keyword should parse properly"], + ["SIENNA", "rgb(160, 82, 45)", "Keywords should be case-insensitive"], + ["sienna", "rgb(160, 82, 45)", "Code point should parse"], + ["silver", "rgb(192, 192, 192)", "Keyword should parse properly"], + ["SILVER", "rgb(192, 192, 192)", "Keywords should be case-insensitive"], + ["silver", "rgb(192, 192, 192)", "Code point should parse"], + ["skyblue", "rgb(135, 206, 235)", "Keyword should parse properly"], + ["SKYBLUE", "rgb(135, 206, 235)", "Keywords should be case-insensitive"], + ["skyblue", "rgb(135, 206, 235)", "Code point should parse"], + ["slateblue", "rgb(106, 90, 205)", "Keyword should parse properly"], + ["SLATEBLUE", "rgb(106, 90, 205)", "Keywords should be case-insensitive"], + ["slateblue", "rgb(106, 90, 205)", "Code point should parse"], + ["slategray", "rgb(112, 128, 144)", "Keyword should parse properly"], + ["SLATEGRAY", "rgb(112, 128, 144)", "Keywords should be case-insensitive"], + ["slategray", "rgb(112, 128, 144)", "Code point should parse"], + ["slategrey", "rgb(112, 128, 144)", "Keyword should parse properly"], + ["SLATEGREY", "rgb(112, 128, 144)", "Keywords should be case-insensitive"], + ["slategrey", "rgb(112, 128, 144)", "Code point should parse"], + ["snow", "rgb(255, 250, 250)", "Keyword should parse properly"], + ["SNOW", "rgb(255, 250, 250)", "Keywords should be case-insensitive"], + ["snow", "rgb(255, 250, 250)", "Code point should parse"], + ["springgreen", "rgb(0, 255, 127)", "Keyword should parse properly"], + ["SPRINGGREEN", "rgb(0, 255, 127)", "Keywords should be case-insensitive"], + ["springgreen", "rgb(0, 255, 127)", "Code point should parse"], + ["steelblue", "rgb(70, 130, 180)", "Keyword should parse properly"], + ["STEELBLUE", "rgb(70, 130, 180)", "Keywords should be case-insensitive"], + ["steelblue", "rgb(70, 130, 180)", "Code point should parse"], + ["tan", "rgb(210, 180, 140)", "Keyword should parse properly"], + ["TAN", "rgb(210, 180, 140)", "Keywords should be case-insensitive"], + ["tan", "rgb(210, 180, 140)", "Code point should parse"], + ["teal", "rgb(0, 128, 128)", "Keyword should parse properly"], + ["TEAL", "rgb(0, 128, 128)", "Keywords should be case-insensitive"], + ["teal", "rgb(0, 128, 128)", "Code point should parse"], + ["thistle", "rgb(216, 191, 216)", "Keyword should parse properly"], + ["THISTLE", "rgb(216, 191, 216)", "Keywords should be case-insensitive"], + ["thistle", "rgb(216, 191, 216)", "Code point should parse"], + ["tomato", "rgb(255, 99, 71)", "Keyword should parse properly"], + ["TOMATO", "rgb(255, 99, 71)", "Keywords should be case-insensitive"], + ["tomato", "rgb(255, 99, 71)", "Code point should parse"], + ["turquoise", "rgb(64, 224, 208)", "Keyword should parse properly"], + ["TURQUOISE", "rgb(64, 224, 208)", "Keywords should be case-insensitive"], + ["turquoise", "rgb(64, 224, 208)", "Code point should parse"], + ["violet", "rgb(238, 130, 238)", "Keyword should parse properly"], + ["VIOLET", "rgb(238, 130, 238)", "Keywords should be case-insensitive"], + ["violet", "rgb(238, 130, 238)", "Code point should parse"], + ["wheat", "rgb(245, 222, 179)", "Keyword should parse properly"], + ["WHEAT", "rgb(245, 222, 179)", "Keywords should be case-insensitive"], + ["wheat", "rgb(245, 222, 179)", "Code point should parse"], + ["white", "rgb(255, 255, 255)", "Keyword should parse properly"], + ["WHITE", "rgb(255, 255, 255)", "Keywords should be case-insensitive"], + ["white", "rgb(255, 255, 255)", "Code point should parse"], + ["whitesmoke", "rgb(245, 245, 245)", "Keyword should parse properly"], + ["WHITESMOKE", "rgb(245, 245, 245)", "Keywords should be case-insensitive"], + ["whitesmoke", "rgb(245, 245, 245)", "Code point should parse"], + ["yellow", "rgb(255, 255, 0)", "Keyword should parse properly"], + ["YELLOW", "rgb(255, 255, 0)", "Keywords should be case-insensitive"], + ["yellow", "rgb(255, 255, 0)", "Code point should parse"], + ["yellowgreen", "rgb(154, 205, 50)", "Keyword should parse properly"], + ["YELLOWGREEN", "rgb(154, 205, 50)", "Keywords should be case-insensitive"], + ["yellowgreen", "rgb(154, 205, 50)", "Code point should parse"], +]; + +for (const test of tests) { + test_computed_value("color", test[0], test[1], test[2] ? `[${test[2]}]` : undefined); +} +</script> +</body> +</html> diff --git a/testing/web-platform/tests/css/css-color/parsing/color-computed-relative-color.html b/testing/web-platform/tests/css/css-color/parsing/color-computed-relative-color.html new file mode 100644 index 0000000000..aa2e48723e --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/color-computed-relative-color.html @@ -0,0 +1,731 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 5: Computation of colors using relative color syntax</title> +<link rel="author" title="Sam Weinig" href="mailto:weinig@apple.com"> +<link rel="help" href="https://drafts.csswg.org/css-color-5/#relative-colors"> +<link rel="help" href="https://drafts.csswg.org/css-color-5/#serial-relative-color"> +<meta name="assert" content="computed value of color using relative color syntax matches expected values"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/computed-testcommon.js"></script> +<script src="/css/support/color-testcommon.js"></script> +<style> + html { + --bg-color: blue; + --color: green; + --accent: lightseagreen; + --mycolor: orchid; + --mygray: lch(from var(--mycolor) l 0 h); + } +</style> +</head> +<body> +<div id="target"></div> +<script> + // rgb(from ...) + + // Testing no modifications. + fuzzy_test_computed_color(`rgb(from rebeccapurple r g b)`, `color(srgb 0.4 0.2 0.6)`); + fuzzy_test_computed_color(`rgb(from rebeccapurple r g b / alpha)`, `color(srgb 0.4 0.2 0.6)`); + fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) r g b / alpha)`, `color(srgb 0.2 0.4 0.6 / 0.8)`); + fuzzy_test_computed_color(`rgb(from hsl(120deg 20% 50% / .5) r g b / alpha)`, `color(srgb 0.4 0.6 0.4 / 0.5)`); + + // Test nesting relative colors. + fuzzy_test_computed_color(`rgb(from rgb(from rebeccapurple r g b) r g b)`, `color(srgb 0.4 0.2 0.6)`); + + // Testing replacement with 0. + fuzzy_test_computed_color(`rgb(from rebeccapurple 0 0 0)`, `color(srgb 0 0 0)`); + fuzzy_test_computed_color(`rgb(from rebeccapurple 0 0 0 / 0)`, `color(srgb 0 0 0 / 0)`); + fuzzy_test_computed_color(`rgb(from rebeccapurple 0 g b / alpha)`, `color(srgb 0 0.2 0.6)`); + fuzzy_test_computed_color(`rgb(from rebeccapurple r 0 b / alpha)`, `color(srgb 0.4 0 0.6)`); + fuzzy_test_computed_color(`rgb(from rebeccapurple r g 0 / alpha)`, `color(srgb 0.4 0.2 0)`); + fuzzy_test_computed_color(`rgb(from rebeccapurple r g b / 0)`, `color(srgb 0.4 0.2 0.6 / 0)`); + fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) 0 g b / alpha)`, `color(srgb 0 0.4 0.6 / 0.8)`); + fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) r 0 b / alpha)`, `color(srgb 0.2 0 0.6 / 0.8)`); + fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) r g 0 / alpha)`, `color(srgb 0.2 0.4 0 / 0.8)`); + fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) r g b / 0)`, `color(srgb 0.2 0.4 0.6 / 0)`); + + // Testing replacement with a number. + fuzzy_test_computed_color(`rgb(from rebeccapurple 25 g b / alpha)`, `color(srgb 0.098 0.2 0.6)`); + fuzzy_test_computed_color(`rgb(from rebeccapurple r 25 b / alpha)`, `color(srgb 0.4 0.098 0.6)`); + fuzzy_test_computed_color(`rgb(from rebeccapurple r g 25 / alpha)`, `color(srgb 0.4 0.2 0.098)`); + fuzzy_test_computed_color(`rgb(from rebeccapurple r g b / .25)`, `color(srgb 0.4 0.2 0.6 / 0.25)`); + fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) 25 g b / alpha)`, `color(srgb 0.098 0.4 0.6 / 0.8)`); + fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) r 25 b / alpha)`, `color(srgb 0.2 0.098 0.6 / 0.8)`); + fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) r g 25 / alpha)`, `color(srgb 0.2 0.4 0.098 / 0.8)`); + fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) r g b / .20)`, `color(srgb 0.2 0.4 0.6 / 0.2)`); + + // Testing replacement with a percentage. + fuzzy_test_computed_color(`rgb(from rebeccapurple 20% g b / alpha)`, `color(srgb 0.2 0.2 0.6)`); + fuzzy_test_computed_color(`rgb(from rebeccapurple r 20% b / alpha)`, `color(srgb 0.4 0.2 0.6)`); + fuzzy_test_computed_color(`rgb(from rebeccapurple r g 20% / alpha)`, `color(srgb 0.4 0.2 0.2)`); + fuzzy_test_computed_color(`rgb(from rebeccapurple r g b / 20%)`, `color(srgb 0.4 0.2 0.6 / 0.2)`); + fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) 20% g b / alpha)`, `color(srgb 0.2 0.4 0.6 / 0.8)`); + fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) r 20% b / alpha)`, `color(srgb 0.2 0.2 0.6 / 0.8)`); + fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) r g 20% / alpha)`, `color(srgb 0.2 0.4 0.2 / 0.8)`); + fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) r g b / 20%)`, `color(srgb 0.2 0.4 0.6 / 0.2)`); + + // Testing replacement with a number for r, g, b but percent for alpha. + fuzzy_test_computed_color(`rgb(from rebeccapurple 25 g b / 25%)`, `color(srgb 0.098 0.2 0.6 / 0.25)`); + fuzzy_test_computed_color(`rgb(from rebeccapurple r 25 b / 25%)`, `color(srgb 0.4 0.098 0.6 / 0.25)`); + fuzzy_test_computed_color(`rgb(from rebeccapurple r g 25 / 25%)`, `color(srgb 0.4 0.2 0.098 / 0.25)`); + fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) 25 g b / 25%)`, `color(srgb 0.098 0.4 0.6 / 0.25)`); + fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) r 25 b / 25%)`, `color(srgb 0.2 0.098 0.6 / 0.25)`); + fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) r g 25 / 25%)`, `color(srgb 0.2 0.4 0.098 / 0.25)`); + + // Testing permutation. + fuzzy_test_computed_color(`rgb(from rebeccapurple g b r)`, `color(srgb 0.2 0.6 0.4)`); + fuzzy_test_computed_color(`rgb(from rebeccapurple b alpha r / g)`, `color(srgb 0.6 ${1/255} 0.4)`); + fuzzy_test_computed_color(`rgb(from rebeccapurple r r r / r)`, `color(srgb 0.4 0.4 0.4)`); + fuzzy_test_computed_color(`rgb(from rebeccapurple alpha alpha alpha / alpha)`, `color(srgb ${1/255} ${1/255} ${1/255})`); + fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) g b r)`, `color(srgb 0.4 0.6 0.2 / 0.8)`); + fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) b alpha r / g)`, `color(srgb 0.6 ${0.8/255} 0.2)`); + fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) r r r / r)`, `color(srgb 0.2 0.2 0.2)`); + fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) alpha alpha alpha / alpha)`, `color(srgb ${0.8/255} ${0.8/255} ${0.8/255} / 0.8)`); + + // Testing mixes of number and percentage. (These would not be allowed in the non-relative syntax). + fuzzy_test_computed_color(`rgb(from rebeccapurple r 20% 10)`, `color(srgb 0.4 0.2 0.0392)`); + fuzzy_test_computed_color(`rgb(from rebeccapurple r 10 20%)`, `color(srgb 0.4 0.0392 0.2)`); + fuzzy_test_computed_color(`rgb(from rebeccapurple 0% 10 10)`, `color(srgb 0 0.0392 0.0392)`); + fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) r 20% 10)`, `color(srgb 0.2 0.2 0.0392 / 0.8)`); + fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) r 10 20%)`, `color(srgb 0.2 0.0392 0.2 / 0.8)`); + fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) 0% 10 10)`, `color(srgb 0 0.0392 0.0392 / 0.8)`); + + // r g b + // 102 51 153 + // 40% 20% 60% + // Testing with calc(). + fuzzy_test_computed_color(`rgb(from rebeccapurple calc(r) calc(g) calc(b))`, `color(srgb 0.4 0.2 0.6)`); + fuzzy_test_computed_color(`rgb(from rebeccapurple r calc(g * 2) 10)`, `color(srgb 0.4 0.4 0.0392)`); + fuzzy_test_computed_color(`rgb(from rebeccapurple b calc(r * .5) 10)`, `color(srgb 0.6 0.2 0.0392)`); + fuzzy_test_computed_color(`rgb(from rebeccapurple r calc(g * .5 + g * .5) 10)`, `color(srgb 0.4 0.2 0.0392)`); + fuzzy_test_computed_color(`rgb(from rebeccapurple r calc(b * .5 - g * .5) 10)`, `color(srgb 0.4 0.2 0.0392)`); + fuzzy_test_computed_color(`rgb(from rgb(20%, 40%, 60%, 80%) calc(r) calc(g) calc(b) / calc(alpha))`, `color(srgb 0.2 0.4 0.6 / 0.8)`); + fuzzy_test_computed_color(`rgb(from rgb(100 110 120 / 0.8) calc(r + 1) calc(g + 1) calc(b + 1) / calc(alpha + 0.01))`, `color(srgb 0.396 0.435 0.474 / 0.81)`); // rgb(101 111 121) + + // Testing with 'none'. Missing components are resolved to zero during color space conversion. + // https://drafts.csswg.org/css-color-4/#missing + fuzzy_test_computed_color(`rgb(from rebeccapurple none none none)`, `color(srgb 0 0 0)`); + fuzzy_test_computed_color(`rgb(from rebeccapurple none none none / none)`, `color(srgb 0 0 0 / none)`); + fuzzy_test_computed_color(`rgb(from rebeccapurple r g none)`, `color(srgb 0.4 0.2 0)`); + fuzzy_test_computed_color(`rgb(from rebeccapurple r g none / alpha)`, `color(srgb 0.4 0.2 0)`); + fuzzy_test_computed_color(`rgb(from rebeccapurple r g b / none)`, `color(srgb 0.4 0.2 0.6 / none)`); + fuzzy_test_computed_color(`rgb(from rgb(20% 40% 60% / 80%) r g none / alpha)`, `color(srgb 0.2 0.4 0 / 0.8)`); + fuzzy_test_computed_color(`rgb(from rgb(20% 40% 60% / 80%) r g b / none)`, `color(srgb 0.2 0.4 0.6 / none)`); + fuzzy_test_computed_color(`rgb(from rgb(none none none) r g b)`, `color(srgb 0 0 0)`); + fuzzy_test_computed_color(`rgb(from rgb(none none none / none) r g b / alpha)`, `color(srgb 0 0 0 / 0)`); + fuzzy_test_computed_color(`rgb(from rgb(20% none 60%) r g b)`, `color(srgb 0.2 0 0.6)`); + fuzzy_test_computed_color(`rgb(from rgb(20% 40% 60% / none) r g b / alpha)`, `color(srgb 0.2 0.4 0.6 / 0)`); + + + // hsl(from ...) + + // Testing no modifications. + fuzzy_test_computed_color(`hsl(from rebeccapurple h s l)`, `color(srgb 0.4 0.2 0.6)`); + fuzzy_test_computed_color(`hsl(from rebeccapurple h s l / alpha)`, `color(srgb 0.4 0.2 0.6)`); + fuzzy_test_computed_color(`hsl(from rgb(20%, 40%, 60%, 80%) h s l / alpha)`, `color(srgb 0.2 0.4 0.6 / 0.8)`); + fuzzy_test_computed_color(`hsl(from hsl(120deg 20% 50% / .5) h s l / alpha)`, `color(srgb 0.4 0.6 0.4 / 0.5)`); + + // Test nesting relative colors. + fuzzy_test_computed_color(`hsl(from hsl(from rebeccapurple h s l) h s l)`, `color(srgb 0.4 0.2 0.6)`); + + + // Testing replacement with 0. + fuzzy_test_computed_color(`hsl(from rebeccapurple 0 0% 0%)`, `color(srgb 0 0 0)`); + fuzzy_test_computed_color(`hsl(from rebeccapurple 0deg 0% 0%)`, `color(srgb 0 0 0)`); + fuzzy_test_computed_color(`hsl(from rebeccapurple 0 0% 0% / 0)`, `color(srgb 0 0 0 / 0)`); + fuzzy_test_computed_color(`hsl(from rebeccapurple 0deg 0% 0% / 0)`, `color(srgb 0 0 0 / 0)`); + fuzzy_test_computed_color(`hsl(from rebeccapurple 0 s l / alpha)`, `color(srgb 0.6 0.2 0.2)`); + fuzzy_test_computed_color(`hsl(from rebeccapurple 0deg s l / alpha)`, `color(srgb 0.6 0.2 0.2)`); + fuzzy_test_computed_color(`hsl(from rebeccapurple h 0% l / alpha)`, `color(srgb 0.4 0.4 0.4)`); + fuzzy_test_computed_color(`hsl(from rebeccapurple h s 0% / alpha)`, `color(srgb 0 0 0)`); + fuzzy_test_computed_color(`hsl(from rebeccapurple h s l / 0)`, `color(srgb 0.4 0.2 0.6 / 0)`); + fuzzy_test_computed_color(`hsl(from rgb(20%, 40%, 60%, 80%) 0 s l / alpha)`, `color(srgb 0.6 0.2 0.2 / 0.8)`); + fuzzy_test_computed_color(`hsl(from rgb(20%, 40%, 60%, 80%) 0deg s l / alpha)`, `color(srgb 0.6 0.2 0.2 / 0.8)`); + fuzzy_test_computed_color(`hsl(from rgb(20%, 40%, 60%, 80%) h 0% l / alpha)`, `color(srgb 0.4 0.4 0.4 / 0.8)`); + fuzzy_test_computed_color(`hsl(from rgb(20%, 40%, 60%, 80%) h s 0% / alpha)`, `color(srgb 0 0 0 / 0.8)`); + fuzzy_test_computed_color(`hsl(from rgb(20%, 40%, 60%, 80%) h s l / 0)`, `color(srgb 0.2 0.4 0.6 / 0)`); + + // Testing replacement with a constant. + fuzzy_test_computed_color(`hsl(from rebeccapurple 25 s l / alpha)`, `color(srgb 0.6 0.3667 0.2)`); + fuzzy_test_computed_color(`hsl(from rebeccapurple 25deg s l / alpha)`, `color(srgb 0.6 0.3667 0.2)`); + fuzzy_test_computed_color(`hsl(from rebeccapurple h 20% l / alpha)`, `color(srgb 0.4 0.32 0.48)`); + fuzzy_test_computed_color(`hsl(from rebeccapurple h s 20% / alpha)`, `color(srgb 0.2 0.1 0.3)`); + fuzzy_test_computed_color(`hsl(from rebeccapurple h s l / .25)`, `color(srgb 0.4 0.2 0.6 / 0.25)`); + fuzzy_test_computed_color(`hsl(from rgb(20%, 40%, 60%, 80%) 25 s l / alpha)`, `color(srgb 0.6 0.3667 0.2 / 0.8)`); + fuzzy_test_computed_color(`hsl(from rgb(20%, 40%, 60%, 80%) 25deg s l / alpha)`, `color(srgb 0.6 0.3667 0.2 / 0.8)`); + fuzzy_test_computed_color(`hsl(from rgb(20%, 40%, 60%, 80%) h 20% l / alpha)`, `color(srgb 0.32 0.4 0.48 / 0.8)`); + fuzzy_test_computed_color(`hsl(from rgb(20%, 40%, 60%, 80%) h s 20% / alpha)`, `color(srgb 0.1 0.2 0.3 / 0.8)`); + fuzzy_test_computed_color(`hsl(from rgb(20%, 40%, 60%, 80%) h s l / .2)`, `color(srgb 0.2 0.4 0.6 / 0.2)`); + + // Testing valid permutation (types match). + fuzzy_test_computed_color(`hsl(from rebeccapurple h l s)`, `color(srgb 0.5 0.3 0.7)`); + fuzzy_test_computed_color(`hsl(from rebeccapurple h alpha l / s)`, `color(srgb 0.4 0 0.8 / 0.5)`); + fuzzy_test_computed_color(`hsl(from rebeccapurple h l l / l)`, `color(srgb 0.4 0.24 0.56 / 0.4)`); + fuzzy_test_computed_color(`hsl(from rebeccapurple h alpha alpha / alpha)`, `color(srgb 1 1 1)`); + fuzzy_test_computed_color(`hsl(from rgb(20%, 40%, 60%, 80%) h l s)`, `color(srgb 0.3 0.5 0.7 / 0.8)`); + fuzzy_test_computed_color(`hsl(from rgb(20%, 40%, 60%, 80%) h alpha l / s)`, `color(srgb 0.08 0.4 0.72 / 0.5)`); + fuzzy_test_computed_color(`hsl(from rgb(20%, 40%, 60%, 80%) h l l / l)`, `color(srgb 0.24 0.4 0.56 / 0.4)`); + fuzzy_test_computed_color(`hsl(from rgb(20%, 40%, 60%, 80%) h alpha alpha / alpha)`, `color(srgb 0.64 0.8 0.96 / 0.8)`); + + // Testing with calc(). + fuzzy_test_computed_color(`hsl(from rebeccapurple calc(h) calc(s) calc(l))`, `color(srgb 0.4 0.2 0.6)`); + fuzzy_test_computed_color(`hsl(from rgb(20%, 40%, 60%, 80%) calc(h) calc(s) calc(l) / calc(alpha))`, `color(srgb 0.2 0.4 0.6 / 0.8)`); + fuzzy_test_computed_color(`hsl(from hsl(20 30 40 / 0.8) calc(h + 1) calc(s + 1) calc(l + 1) / calc(alpha + 0.01))`, `color(srgb 0.54 0.37 0.28 / 0.81)`); // hsl(21 31 41) + + // Testing with 'none'. Missing components are resolved to zero during color space conversion. + // https://drafts.csswg.org/css-color-4/#missing + fuzzy_test_computed_color(`hsl(from rebeccapurple none none none)`, `color(srgb 0 0 0)`); + fuzzy_test_computed_color(`hsl(from rebeccapurple none none none / none)`, `color(srgb 0 0 0 / none)`); + fuzzy_test_computed_color(`hsl(from rebeccapurple h s none)`, `color(srgb 0 0 0)`); + fuzzy_test_computed_color(`hsl(from rebeccapurple h s none / alpha)`, `color(srgb 0 0 0)`); + fuzzy_test_computed_color(`hsl(from rebeccapurple h s l / none)`, `color(srgb 0.4 0.2 0.6 / none)`); + fuzzy_test_computed_color(`hsl(from rebeccapurple none s l / alpha)`, `color(srgb 0.6 0.2 0.2)`); + fuzzy_test_computed_color(`hsl(from hsl(120deg 20% 50% / .5) h s none / alpha)`, `color(srgb 0 0 0 / 0.5)`); + fuzzy_test_computed_color(`hsl(from hsl(120deg 20% 50% / .5) h s l / none)`, `color(srgb 0.4 0.6 0.4 / none)`); + fuzzy_test_computed_color(`hsl(from hsl(120deg 20% 50% / .5) none s l / alpha)`, `color(srgb 0.6 0.4 0.4 / 0.5)`); + fuzzy_test_computed_color(`hsl(from hsl(none none none) h s l)`, `color(srgb 0 0 0)`); + fuzzy_test_computed_color(`hsl(from hsl(none none none / none) h s l / alpha)`, `color(srgb 0 0 0 / 0)`); + fuzzy_test_computed_color(`hsl(from hsl(120deg none 50% / .5) h s l)`, `color(srgb 0.5 0.5 0.5 / 0.5)`); + fuzzy_test_computed_color(`hsl(from hsl(120deg 20% 50% / none) h s l / alpha)`, `color(srgb 0.4 0.6 0.4 / 0)`); + fuzzy_test_computed_color(`hsl(from hsl(none 20% 50% / .5) h s l / alpha)`, `color(srgb 0.6 0.4 0.4 / 0.5)`); + + // hwb(from ...) + + // Testing no modifications. + fuzzy_test_computed_color(`hwb(from rebeccapurple h w b)`, `color(srgb 0.4 0.2 0.6)`); + fuzzy_test_computed_color(`hwb(from rebeccapurple h w b / alpha)`, `color(srgb 0.4 0.2 0.6)`); + fuzzy_test_computed_color(`hwb(from rgb(20%, 40%, 60%, 80%) h w b / alpha)`, `color(srgb 0.2 0.4 0.6 / 0.8)`); + fuzzy_test_computed_color(`hwb(from hsl(120deg 20% 50% / .5) h w b / alpha)`, `color(srgb 0.4 0.6 0.4 / 0.5)`); + + // Test nesting relative colors. + fuzzy_test_computed_color(`hwb(from hwb(from rebeccapurple h w b) h w b)`, `color(srgb 0.4 0.2 0.6)`); + + // Testing replacement with 0. + fuzzy_test_computed_color(`hwb(from rebeccapurple 0 0% 0%)`, `color(srgb 1 0 0)`); + fuzzy_test_computed_color(`hwb(from rebeccapurple 0deg 0% 0%)`, `color(srgb 1 0 0)`); + fuzzy_test_computed_color(`hwb(from rebeccapurple 0 0% 0% / 0)`, `color(srgb 1 0 0 / 0)`); + fuzzy_test_computed_color(`hwb(from rebeccapurple 0deg 0% 0% / 0)`, `color(srgb 1 0 0 / 0)`); + fuzzy_test_computed_color(`hwb(from rebeccapurple 0 w b / alpha)`, `color(srgb 0.6 0.2 0.2)`); + fuzzy_test_computed_color(`hwb(from rebeccapurple 0deg w b / alpha)`, `color(srgb 0.6 0.2 0.2)`); + fuzzy_test_computed_color(`hwb(from rebeccapurple h 0% b / alpha)`, `color(srgb 0.3 0 0.6)`); + fuzzy_test_computed_color(`hwb(from rebeccapurple h w 0% / alpha)`, `color(srgb 0.6 0.2 1)`); + fuzzy_test_computed_color(`hwb(from rebeccapurple h w b / 0)`, `color(srgb 0.4 0.2 0.6 / 0)`); + fuzzy_test_computed_color(`hwb(from rgb(20%, 40%, 60%, 80%) 0 w b / alpha)`, `color(srgb 0.6 0.2 0.2 / 0.8)`); + fuzzy_test_computed_color(`hwb(from rgb(20%, 40%, 60%, 80%) 0deg w b / alpha)`, `color(srgb 0.6 0.2 0.2 / 0.8)`); + fuzzy_test_computed_color(`hwb(from rgb(20%, 40%, 60%, 80%) h 0% b / alpha)`, `color(srgb 0 0.3 0.6 / 0.8)`); + fuzzy_test_computed_color(`hwb(from rgb(20%, 40%, 60%, 80%) h w 0% / alpha)`, `color(srgb 0.2 0.6 1 / 0.8)`); + fuzzy_test_computed_color(`hwb(from rgb(20%, 40%, 60%, 80%) h w b / 0)`, `color(srgb 0.2 0.4 0.6 / 0)`); + + // Testing replacement with a constant. + fuzzy_test_computed_color(`hwb(from rebeccapurple 25 w b / alpha)`, `color(srgb 0.6 0.3667 0.2)`); + fuzzy_test_computed_color(`hwb(from rebeccapurple 25deg w b / alpha)`, `color(srgb 0.6 0.3667 0.2)`); + fuzzy_test_computed_color(`hwb(from rebeccapurple h 20% b / alpha)`, `color(srgb 0.4 0.2 0.6)`); + fuzzy_test_computed_color(`hwb(from rebeccapurple h w 20% / alpha)`, `color(srgb 0.5 0.2 0.8)`); + fuzzy_test_computed_color(`hwb(from rebeccapurple h w b / .2)`, `color(srgb 0.4 0.2 0.6 / 0.2)`); + fuzzy_test_computed_color(`hwb(from rgb(20%, 40%, 60%, 80%) 25 w b / alpha)`, `color(srgb 0.6 0.3667 0.2 / 0.8)`); + fuzzy_test_computed_color(`hwb(from rgb(20%, 40%, 60%, 80%) 25deg w b / alpha)`, `color(srgb 0.6 0.3667 0.2 / 0.8)`); + fuzzy_test_computed_color(`hwb(from rgb(20%, 40%, 60%, 80%) h 20% b / alpha)`, `color(srgb 0.2 0.4 0.6 / 0.8)`); + fuzzy_test_computed_color(`hwb(from rgb(20%, 40%, 60%, 80%) h w 20% / alpha)`, `color(srgb 0.2 0.5 0.8 / 0.8)`); + fuzzy_test_computed_color(`hwb(from rgb(20%, 40%, 60%, 80%) h w b / .2)`, `color(srgb 0.2 0.4 0.6 / 0.2)`); + + // Testing valid permutation (types match). + fuzzy_test_computed_color(`hwb(from rebeccapurple h b w)`, `color(srgb 0.6 0.4 0.8)`); + fuzzy_test_computed_color(`hwb(from rebeccapurple h alpha w / b)`, `color(srgb 0.8333 0.8333 0.8333 / 0.4)`); + fuzzy_test_computed_color(`hwb(from rebeccapurple h w w / w)`, `color(srgb 0.5 0.2 0.8 / 0.2)`); + fuzzy_test_computed_color(`hwb(from rebeccapurple h alpha alpha / alpha)`, `color(srgb 0.5 0.5 0.5)`); + fuzzy_test_computed_color(`hwb(from rgb(20%, 40%, 60%, 80%) h b w)`, `color(srgb 0.4 0.6 0.8 / 0.8)`); + fuzzy_test_computed_color(`hwb(from rgb(20%, 40%, 60%, 80%) h alpha w / b)`, `color(srgb 0.8 0.8 0.8 / 0.4)`); + fuzzy_test_computed_color(`hwb(from rgb(20%, 40%, 60%, 80%) h w w / w)`, `color(srgb 0.2 0.5 0.8 / 0.2)`); + fuzzy_test_computed_color(`hwb(from rgb(20%, 40%, 60%, 80%) h alpha alpha / alpha)`, `color(srgb 0.5 0.5 0.5 / 0.8)`); + + // Testing with calc(). + fuzzy_test_computed_color(`hwb(from rebeccapurple calc(h) calc(w) calc(b))`, `color(srgb 0.4 0.2 0.6)`); + fuzzy_test_computed_color(`hwb(from rgb(20%, 40%, 60%, 80%) calc(h) calc(w) calc(b) / calc(alpha))`, `color(srgb 0.2 0.4 0.6 / 0.8)`); + fuzzy_test_computed_color(`hwb(from hwb(20 30 40 / 0.8) calc(h + 1) calc(w + 1) calc(b + 1) / calc(alpha + 0.01))`, `color(srgb 0.59 0.41 0.31 / 0.81)`); // hwb(21 31 41) + + // Testing with 'none'. Missing components are resolved to zero during color space conversion. + // https://drafts.csswg.org/css-color-4/#missing + fuzzy_test_computed_color(`hwb(from rebeccapurple none none none)`, `color(srgb 1 0 0)`); + fuzzy_test_computed_color(`hwb(from rebeccapurple none none none / none)`, `color(srgb 1 0 0 / none)`); + fuzzy_test_computed_color(`hwb(from rebeccapurple h w none)`, `color(srgb 0.6 0.2 1)`); + fuzzy_test_computed_color(`hwb(from rebeccapurple h w none / alpha)`, `color(srgb 0.6 0.2 1)`); + fuzzy_test_computed_color(`hwb(from rebeccapurple h w b / none)`, `color(srgb 0.4 0.2 0.6 / none)`); + fuzzy_test_computed_color(`hwb(from rebeccapurple none w b / alpha)`, `color(srgb 0.6 0.2 0.2)`); + fuzzy_test_computed_color(`hwb(from hwb(120deg 20% 50% / .5) h w none / alpha)`, `color(srgb 0.2 1 0.2 / 0.5)`); + fuzzy_test_computed_color(`hwb(from hwb(120deg 20% 50% / .5) h w b / none)`, `color(srgb 0.2 0.5 0.2 / none)`); + fuzzy_test_computed_color(`hwb(from hwb(120deg 20% 50% / .5) none w b / alpha)`, `color(srgb 0.5 0.2 0.2 / 0.5)`); + fuzzy_test_computed_color(`hwb(from hwb(none none none) h w b)`, `color(srgb 1 0 0)`); + fuzzy_test_computed_color(`hwb(from hwb(none none none / none) h w b / alpha)`, `color(srgb 1 0 0 / 0)`); + fuzzy_test_computed_color(`hwb(from hwb(120deg none 50% / .5) h w b)`, `color(srgb 0 0.5 0 / 0.5)`); + fuzzy_test_computed_color(`hwb(from hwb(120deg 20% 50% / none) h w b / alpha)`, `color(srgb 0.2 0.5 0.2 / 0)`); + fuzzy_test_computed_color(`hwb(from hwb(none 20% 50% / .5) h w b / alpha)`, `color(srgb 0.5 0.2 0.2 / 0.5)`); + + // lab() + + // Testing no modifications. + fuzzy_test_computed_color(`lab(from lab(25 20 50) l a b)`, `lab(25 20 50)`); + fuzzy_test_computed_color(`lab(from lab(25 20 50) l a b / alpha)`, `lab(25 20 50)`); + fuzzy_test_computed_color(`lab(from lab(25 20 50 / 40%) l a b / alpha)`, `lab(25 20 50 / 0.4)`); + fuzzy_test_computed_color(`lab(from lab(200 300 400 / 500%) l a b / alpha)`, `lab(100 300 400)`); + fuzzy_test_computed_color(`lab(from lab(-200 -300 -400 / -500%) l a b / alpha)`, `lab(0 -300 -400 / 0)`); + + // Test nesting relative colors. + fuzzy_test_computed_color(`lab(from lab(from lab(25 20 50) l a b) l a b)`, `lab(25 20 50)`); + + // Testing non-lab origin to see conversion. + fuzzy_test_computed_color(`lab(from color(display-p3 0 0 0) l a b / alpha)`, `lab(0 0 0)`); + + // Testing replacement with 0. + fuzzy_test_computed_color(`lab(from lab(25 20 50) 0 0 0)`, `lab(0 0 0)`); + fuzzy_test_computed_color(`lab(from lab(25 20 50) 0 0 0 / 0)`, `lab(0 0 0 / 0)`); + fuzzy_test_computed_color(`lab(from lab(25 20 50) 0 a b / alpha)`, `lab(0 20 50)`); + fuzzy_test_computed_color(`lab(from lab(25 20 50) l 0 b / alpha)`, `lab(25 0 50)`); + fuzzy_test_computed_color(`lab(from lab(25 20 50) l a 0 / alpha)`, `lab(25 20 0)`); + fuzzy_test_computed_color(`lab(from lab(25 20 50) l a b / 0)`, `lab(25 20 50 / 0)`); + fuzzy_test_computed_color(`lab(from lab(25 20 50 / 40%) 0 a b / alpha)`, `lab(0 20 50 / 0.4)`); + fuzzy_test_computed_color(`lab(from lab(25 20 50 / 40%) l 0 b / alpha)`, `lab(25 0 50 / 0.4)`); + fuzzy_test_computed_color(`lab(from lab(25 20 50 / 40%) l a 0 / alpha)`, `lab(25 20 0 / 0.4)`); + fuzzy_test_computed_color(`lab(from lab(25 20 50 / 40%) l a b / 0)`, `lab(25 20 50 / 0)`); + + // Testing replacement with a constant. + fuzzy_test_computed_color(`lab(from lab(25 20 50) 35 a b / alpha)`, `lab(35 20 50)`); + fuzzy_test_computed_color(`lab(from lab(25 20 50) l 35 b / alpha)`, `lab(25 35 50)`); + fuzzy_test_computed_color(`lab(from lab(25 20 50) l a 35 / alpha)`, `lab(25 20 35)`); + fuzzy_test_computed_color(`lab(from lab(25 20 50) l a b / .35)`, `lab(25 20 50 / 0.35)`); + fuzzy_test_computed_color(`lab(from lab(25 20 50 / 40%) 35 a b / alpha)`, `lab(35 20 50 / 0.4)`); + fuzzy_test_computed_color(`lab(from lab(25 20 50 / 40%) l 35 b / alpha)`, `lab(25 35 50 / 0.4)`); + fuzzy_test_computed_color(`lab(from lab(25 20 50 / 40%) l a 35 / alpha)`, `lab(25 20 35 / 0.4)`); + fuzzy_test_computed_color(`lab(from lab(25 20 50 / 40%) l a b / .35)`, `lab(25 20 50 / 0.35)`); + fuzzy_test_computed_color(`lab(from lab(0.7 45 30 / 40%) 200 300 400 / 500)`, `lab(100 300 400)`); + fuzzy_test_computed_color(`lab(from lab(0.7 45 30 / 40%) -200 -300 -400 / -500)`, `lab(0 -300 -400 / 0)`); + + // Testing valid permutation (types match). + fuzzy_test_computed_color(`lab(from lab(25 20 50) l b a)`, `lab(25 50 20)`); + fuzzy_test_computed_color(`lab(from lab(25 20 50) l a a / a)`, `lab(25 20 20)`); + fuzzy_test_computed_color(`lab(from lab(25 20 50 / 40%) l b a)`, `lab(25 50 20 / 0.4)`); + fuzzy_test_computed_color(`lab(from lab(25 20 50 / 40%) l a a / a)`, `lab(25 20 20)`); + + // Testing with calc(). + fuzzy_test_computed_color(`lab(from lab(25 20 50) calc(l) calc(a) calc(b))`, `lab(25 20 50)`); + fuzzy_test_computed_color(`lab(from lab(25 20 50 / 40%) calc(l) calc(a) calc(b) / calc(alpha))`, `lab(25 20 50 / 0.4)`); + fuzzy_test_computed_color(`lab(from lab(50 5 10 / 0.8) calc(l + 1) calc(a + 1) calc(b + 1) / calc(alpha + 0.01))`, `lab(51 6 11 / 0.81)`); + + // Testing with 'none'. + fuzzy_test_computed_color(`lab(from lab(25 20 50) none none none)`, `lab(none none none)`); + fuzzy_test_computed_color(`lab(from lab(25 20 50) none none none / none)`, `lab(none none none / none)`); + fuzzy_test_computed_color(`lab(from lab(25 20 50) l a none)`, `lab(25 20 none)`); + fuzzy_test_computed_color(`lab(from lab(25 20 50) l a none / alpha)`, `lab(25 20 none)`); + fuzzy_test_computed_color(`lab(from lab(25 20 50) l a b / none)`, `lab(25 20 50 / none)`); + fuzzy_test_computed_color(`lab(from lab(25 20 50 / 40%) l a none / alpha)`, `lab(25 20 none / 0.4)`); + fuzzy_test_computed_color(`lab(from lab(25 20 50 / 40%) l a b / none)`, `lab(25 20 50 / none)`); + // FIXME: Clarify with spec editors if 'none' should pass through to the constants. + fuzzy_test_computed_color(`lab(from lab(none none none) l a b)`, `lab(0 0 0)`); + fuzzy_test_computed_color(`lab(from lab(none none none / none) l a b / alpha)`, `lab(0 0 0 / 0)`); + fuzzy_test_computed_color(`lab(from lab(25 none 50) l a b)`, `lab(25 0 50)`); + fuzzy_test_computed_color(`lab(from lab(25 20 50 / none) l a b / alpha)`, `lab(25 20 50 / 0)`); + + // oklab() + + // Testing no modifications. + fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) l a b)`, `oklab(0.25 0.2 0.5)`); + fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) l a b / alpha)`, `oklab(0.25 0.2 0.5)`); + fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l a b / alpha)`, `oklab(0.25 0.2 0.5 / 0.4)`); + fuzzy_test_computed_color(`oklab(from oklab(2 3 4 / 500%) l a b / alpha)`, `oklab(1 3 4)`); + fuzzy_test_computed_color(`oklab(from oklab(-2 -3 -4 / -500%) l a b / alpha)`, `oklab(0 -3 -4 / 0)`); + + // Test nesting relative colors. + fuzzy_test_computed_color(`oklab(from oklab(from oklab(0.25 0.2 0.5) l a b) l a b)`, `oklab(0.25 0.2 0.5)`); + + // Testing non-oklab origin to see conversion. + fuzzy_test_computed_color(`oklab(from color(display-p3 0 0 0) l a b / alpha)`, `oklab(0 0 0)`); + + // Testing replacement with 0. + fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) 0 0 0)`, `oklab(0 0 0)`); + fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) 0 0 0 / 0)`, `oklab(0 0 0 / 0)`); + fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) 0 a b / alpha)`, `oklab(0 0.2 0.5)`); + fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) l 0 b / alpha)`, `oklab(0.25 0 0.5)`); + fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) l a 0 / alpha)`, `oklab(0.25 0.2 0)`); + fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) l a b / 0)`, `oklab(0.25 0.2 0.5 / 0)`); + fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) 0 a b / alpha)`, `oklab(0 0.2 0.5 / 0.4)`); + fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l 0 b / alpha)`, `oklab(0.25 0 0.5 / 0.4)`); + fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l a 0 / alpha)`, `oklab(0.25 0.2 0 / 0.4)`); + fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l a b / 0)`, `oklab(0.25 0.2 0.5 / 0)`); + + // Testing replacement with a constant. + fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) 0.35 a b / alpha)`, `oklab(0.35 0.2 0.5)`); + fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) l 0.35 b / alpha)`, `oklab(0.25 0.35 0.5)`); + fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) l a 0.35 / alpha)`, `oklab(0.25 0.2 0.35)`); + fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) l a b / .35)`, `oklab(0.25 0.2 0.5 / 0.35)`); + fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) 0.35 a b / alpha)`, `oklab(0.35 0.2 0.5 / 0.4)`); + fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l 0.35 b / alpha)`, `oklab(0.25 0.35 0.5 / 0.4)`); + fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l a 0.35 / alpha)`, `oklab(0.25 0.2 0.35 / 0.4)`); + fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l a b / .35)`, `oklab(0.25 0.2 0.5 / 0.35)`); + fuzzy_test_computed_color(`oklab(from oklab(0.7 0.45 0.3 / 40%) 2 3 4 / 500)`, `oklab(1 3 4)`); + fuzzy_test_computed_color(`oklab(from oklab(0.7 0.45 0.3 / 40%) -2 -3 -4 / -500)`, `oklab(0 -3 -4 / 0)`); + + // Testing valid permutation (types match). + fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) l b a)`, `oklab(0.25 0.5 0.2)`); + fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) l a a / a)`, `oklab(0.25 0.2 0.2 / 0.2)`); + fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l b a)`, `oklab(0.25 0.5 0.2 / 0.4)`); + fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l a a / a)`, `oklab(0.25 0.2 0.2 / 0.2)`); + + // Testing with calc(). + fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) calc(l) calc(a) calc(b))`, `oklab(0.25 0.2 0.5)`); + fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) calc(l) calc(a) calc(b) / calc(alpha))`, `oklab(0.25 0.2 0.5 / 0.4)`); + fuzzy_test_computed_color(`oklab(from oklab(0.5 .05 0.1 / 0.8) calc(l + 0.01) calc(a + 0.01) calc(b + 0.01) / calc(alpha + 0.01))`, `oklab(0.51 .06 0.11 / 0.81)`); + + // Testing with 'none'. + fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) none none none)`, `oklab(none none none)`); + fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) none none none / none)`, `oklab(none none none / none)`); + fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) l a none)`, `oklab(0.25 0.2 none)`); + fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) l a none / alpha)`, `oklab(0.25 0.2 none)`); + fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5) l a b / none)`, `oklab(0.25 0.2 0.5 / none)`); + fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l a none / alpha)`, `oklab(0.25 0.2 none / 0.4)`); + fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l a b / none)`, `oklab(0.25 0.2 0.5 / none)`); + // FIXME: Clarify with spec editors if 'none' should pass through to the constants. + fuzzy_test_computed_color(`oklab(from oklab(none none none) l a b)`, `oklab(0 0 0)`); + fuzzy_test_computed_color(`oklab(from oklab(none none none / none) l a b / alpha)`, `oklab(0 0 0 / 0)`); + fuzzy_test_computed_color(`oklab(from oklab(0.25 none 0.5) l a b)`, `oklab(0.25 0 0.5)`); + fuzzy_test_computed_color(`oklab(from oklab(0.25 0.2 0.5 / none) l a b / alpha)`, `oklab(0.25 0.2 0.5 / 0)`); + + // lch() + + // Testing no modifications. + fuzzy_test_computed_color(`lch(from lch(0.7 45 30) l c h)`, `lch(0.7 45 30)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30) l c h / alpha)`, `lch(0.7 45 30)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) l c h / alpha)`, `lch(0.7 45 30 / 0.4)`); + fuzzy_test_computed_color(`lch(from lch(200 300 400 / 500%) l c h / alpha)`, `lch(100 300 40)`); + fuzzy_test_computed_color(`lch(from lch(-200 -300 -400 / -500%) l c h / alpha)`, `lch(0 0 320 / 0)`); + + // Test nesting relative colors. + fuzzy_test_computed_color(`lch(from lch(from lch(0.7 45 30) l c h) l c h)`, `lch(0.7 45 30)`); + + // Testing non-sRGB origin colors (no gamut mapping will happen since the destination is not a bounded RGB color space). + fuzzy_test_computed_color(`lch(from color(display-p3 0 0 0) l c h / alpha)`, `lch(0 0 0)`); + fuzzy_test_computed_color(`lch(from lab(0.7 45 30) l c h / alpha)`, `lch(0.7 54.08327 33.690067)`); + + // Testing replacement with 0. + fuzzy_test_computed_color(`lch(from lch(0.7 45 30) 0 0 0)`, `lch(0 0 0)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30) 0 0 0deg)`, `lch(0 0 0)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30) 0 0 0 / 0)`, `lch(0 0 0 / 0)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30) 0 0 0deg / 0)`, `lch(0 0 0 / 0)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30) 0 c h / alpha)`, `lch(0 45 30)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30) l 0 h / alpha)`, `lch(0.7 0 30)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30) l c 0 / alpha)`, `lch(0.7 45 0)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30) l c 0deg / alpha)`, `lch(0.7 45 0)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30) l c h / 0)`, `lch(0.7 45 30 / 0)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) 0 c h / alpha)`, `lch(0 45 30 / 0.4)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) l 0 h / alpha)`, `lch(0.7 0 30 / 0.4)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) l c 0 / alpha)`, `lch(0.7 45 0 / 0.4)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) l c 0deg / alpha)`, `lch(0.7 45 0 / 0.4)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) l c h / 0)`, `lch(0.7 45 30 / 0)`); + + // Testing replacement with a constant. + fuzzy_test_computed_color(`lch(from lch(0.7 45 30) 25 c h / alpha)`, `lch(25 45 30)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30) l 25 h / alpha)`, `lch(0.7 25 30)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30) l c 25 / alpha)`, `lch(0.7 45 25)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30) l c 25deg / alpha)`, `lch(0.7 45 25)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30) l c h / .25)`, `lch(0.7 45 30 / 0.25)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) 25 c h / alpha)`, `lch(25 45 30 / 0.4)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) l 25 h / alpha)`, `lch(0.7 25 30 / 0.4)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) l c 25 / alpha)`, `lch(0.7 45 25 / 0.4)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) l c 25deg / alpha)`, `lch(0.7 45 25 / 0.4)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) l c h / .25)`, `lch(0.7 45 30 / 0.25)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) 200 300 400 / 500)`, `lch(100 300 40)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) -200 -300 -400 / -500)`, `lch(0 0 320 / 0)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) 50 120 400deg / 500)`, `lch(50 120 40)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) 50 120 -400deg / -500)`, `lch(50 120 320 / 0)`); + + // Testing valid permutation (types match). + // NOTE: 'c' is a vaild hue, as hue is <angle>|<number>. + fuzzy_test_computed_color(`lch(from lch(.7 45 30) l c c / alpha)`, `lch(0.7 45 45)`); + fuzzy_test_computed_color(`lch(from lch(.7 45 30 / 40%) l c c / alpha)`, `lch(0.7 45 45 / 0.4)`); + + // Testing with calc(). + fuzzy_test_computed_color(`lch(from lch(0.7 45 30) calc(l) calc(c) calc(h))`, `lch(0.7 45 30)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) calc(l) calc(c) calc(h) / calc(alpha))`, `lch(0.7 45 30 / 0.4)`); + fuzzy_test_computed_color(`lch(from lch(50 5 10 / 0.8) calc(l + 1) calc(c + 1) calc(h + 1) / calc(alpha + 0.01))`, `lch(51 6 11 / 0.81)`); + + // Testing with 'none'. + fuzzy_test_computed_color(`lch(from lch(0.7 45 30) none none none)`, `lch(none none none)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30) none none none / none)`, `lch(none none none / none)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30) l c none)`, `lch(0.7 45 none)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30) l c none / alpha)`, `lch(0.7 45 none)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30) l c h / none)`, `lch(0.7 45 30 / none)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) l c none / alpha)`, `lch(0.7 45 none / 0.4)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / 40%) l c h / none)`, `lch(0.7 45 30 / none)`); + // FIXME: Clarify with spec editors if 'none' should pass through to the constants. + fuzzy_test_computed_color(`lch(from lch(none none none) l c h)`, `lch(0 0 0)`); + fuzzy_test_computed_color(`lch(from lch(none none none / none) l c h / alpha)`, `lch(0 0 0 / 0)`); + fuzzy_test_computed_color(`lch(from lch(0.7 none 30) l c h)`, `lch(0.7 0 30)`); + fuzzy_test_computed_color(`lch(from lch(0.7 45 30 / none) l c h / alpha)`, `lch(0.7 45 30 / 0)`); + + // oklch() + + // Testing no modifications. + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) l c h)`, `oklch(0.7 0.45 30)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) l c h / alpha)`, `oklch(0.7 0.45 30)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c h / alpha)`, `oklch(0.7 0.45 30 / 0.4)`); + fuzzy_test_computed_color(`oklch(from oklch(2 3 400 / 500%) l c h / alpha)`, `oklch(1 3 40)`); + fuzzy_test_computed_color(`oklch(from oklch(-2 -3 -400 / -500%) l c h / alpha)`, `oklch(0 0 320 / 0)`); + + // Test nesting relative colors. + fuzzy_test_computed_color(`oklch(from oklch(from oklch(0.7 0.45 30) l c h) l c h)`, `oklch(0.7 0.45 30)`); + + // Testing non-sRGB origin colors (no gamut mapping will happen since the destination is not a bounded RGB color space). + fuzzy_test_computed_color(`oklch(from color(display-p3 0 0 0) l c h / alpha)`, `oklch(0 0 0)`); + // TODO: redo conversion with oklab(0.7 0.45 0.3) + fuzzy_test_computed_color(`oklch(from oklab(0.7 45 30) l c h / alpha)`, `oklch(0.7 54.08327 33.690067)`); + + // Testing replacement with 0. + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) 0 0 0)`, `oklch(0 0 0)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) 0 0 0deg)`, `oklch(0 0 0)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) 0 0 0 / 0)`, `oklch(0 0 0 / 0)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) 0 0 0deg / 0)`, `oklch(0 0 0 / 0)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) 0 c h / alpha)`, `oklch(0 0.45 30)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) l 0 h / alpha)`, `oklch(0.7 0 30)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) l c 0 / alpha)`, `oklch(0.7 0.45 0)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) l c 0deg / alpha)`, `oklch(0.7 0.45 0)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) l c h / 0)`, `oklch(0.7 0.45 30 / 0)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) 0 c h / alpha)`, `oklch(0 0.45 30 / 0.4)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) l 0 h / alpha)`, `oklch(0.7 0 30 / 0.4)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c 0 / alpha)`, `oklch(0.7 0.45 0 / 0.4)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c 0deg / alpha)`, `oklch(0.7 0.45 0 / 0.4)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c h / 0)`, `oklch(0.7 0.45 30 / 0)`); + + // Testing replacement with a constant. + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) 0.25 c h / alpha)`, `oklch(0.25 0.45 30)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) l 0.25 h / alpha)`, `oklch(0.7 0.25 30)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) l c 25 / alpha)`, `oklch(0.7 0.45 25)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) l c 25deg / alpha)`, `oklch(0.7 0.45 25)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) l c h / .25)`, `oklch(0.7 0.45 30 / 0.25)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) 0.25 c h / alpha)`, `oklch(0.25 0.45 30 / 0.4)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) l 0.25 h / alpha)`, `oklch(0.7 0.25 30 / 0.4)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c 25 / alpha)`, `oklch(0.7 0.45 25 / 0.4)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c 25deg / alpha)`, `oklch(0.7 0.45 25 / 0.4)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c h / .25)`, `oklch(0.7 0.45 30 / 0.25)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) 2 3 400 / 500)`, `oklch(1 3 40)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) -2 -3 -400 / -500)`, `oklch(0 0 320 / 0)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) 0.5 1.2 400deg / 500)`, `oklch(0.5 1.2 40)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) 0.5 1.2 -400deg / -500)`, `oklch(0.5 1.2 320 / 0)`); + + // Testing valid permutation (types match). + // NOTE: 'c' is a vaild hue, as hue is <angle>|<number>. + fuzzy_test_computed_color(`oklch(from oklch(.7 0.45 30) l c c / alpha)`, `oklch(0.7 0.45 0.45)`); + fuzzy_test_computed_color(`oklch(from oklch(.7 0.45 30 / 40%) l c c / alpha)`, `oklch(0.7 0.45 0.45 / 0.4)`); + + // Testing with calc(). + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) calc(l) calc(c) calc(h))`, `oklch(0.7 0.45 30)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) calc(l) calc(c) calc(h) / calc(alpha))`, `oklch(0.7 0.45 30 / 0.4)`); + fuzzy_test_computed_color(`oklch(from oklch(0.5 .05 0.1 / 0.8) calc(l + 0.01) calc(c + 0.01) calc(h + 0.01) / calc(alpha + 0.01))`, `oklch(0.51 .06 0.11 / 0.81)`); + + // Testing with 'none'. + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) none none none)`, `oklch(none none none)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) none none none / none)`, `oklch(none none none / none)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) l c none)`, `oklch(0.7 0.45 none)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) l c none / alpha)`, `oklch(0.7 0.45 none)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30) l c h / none)`, `oklch(0.7 0.45 30 / none)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c none / alpha)`, `oklch(0.7 0.45 none / 0.4)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c h / none)`, `oklch(0.7 0.45 30 / none)`); + // FIXME: Clarify with spec editors if 'none' should pass through to the constants. + fuzzy_test_computed_color(`oklch(from oklch(none none none) l c h)`, `oklch(0 0 0)`); + fuzzy_test_computed_color(`oklch(from oklch(none none none / none) l c h / alpha)`, `oklch(0 0 0 / 0)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 none 30) l c h)`, `oklch(0.7 0 30)`); + fuzzy_test_computed_color(`oklch(from oklch(0.7 0.45 30 / none) l c h / alpha)`, `oklch(0.7 0.45 30 / 0)`); + + for (const colorSpace of [ "srgb", "srgb-linear", "a98-rgb", "rec2020", "prophoto-rgb", "display-p3" ]) { + // Testing no modifications. + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b)`, `color(${colorSpace} 0.7 0.5 0.3)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b / alpha)`, `color(${colorSpace} 0.7 0.5 0.3)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b)`, `color(${colorSpace} 0.7 0.5 0.3 / 0.4)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b / alpha)`, `color(${colorSpace} 0.7 0.5 0.3 / 0.4)`); + + // Test nesting relative colors. + fuzzy_test_computed_color(`color(from color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b) ${colorSpace} r g b)`, `color(${colorSpace} 0.7 0.5 0.3)`); + + // Testing replacement with 0. + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 0 0 0)`, `color(${colorSpace} 0 0 0)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 0 0 0 / 0)`, `color(${colorSpace} 0 0 0 / 0)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 0 g b / alpha)`, `color(${colorSpace} 0 0.5 0.3)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r 0 b / alpha)`, `color(${colorSpace} 0.7 0 0.3)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g 0 / alpha)`, `color(${colorSpace} 0.7 0.5 0)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b / 0)`, `color(${colorSpace} 0.7 0.5 0.3 / 0)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} 0 g b / alpha)`, `color(${colorSpace} 0 0.5 0.3 / 0.4)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r 0 b / alpha)`, `color(${colorSpace} 0.7 0 0.3 / 0.4)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g 0 / alpha)`, `color(${colorSpace} 0.7 0.5 0 / 0.4)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b / 0)`, `color(${colorSpace} 0.7 0.5 0.3 / 0)`); + + // Testing replacement with a constant. + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 0.2 g b / alpha)`, `color(${colorSpace} 0.2 0.5 0.3)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 20% g b / alpha)`, `color(${colorSpace} 0.2 0.5 0.3)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r 0.2 b / alpha)`, `color(${colorSpace} 0.7 0.2 0.3)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r 20% b / alpha)`, `color(${colorSpace} 0.7 0.2 0.3)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g 0.2 / alpha)`, `color(${colorSpace} 0.7 0.5 0.2)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g 20% / alpha)`, `color(${colorSpace} 0.7 0.5 0.2)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b / 0.2)`, `color(${colorSpace} 0.7 0.5 0.3 / 0.2)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b / 20%)`, `color(${colorSpace} 0.7 0.5 0.3 / 0.2)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} 0.2 g b / alpha)`, `color(${colorSpace} 0.2 0.5 0.3 / 0.4)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} 20% g b / alpha)`, `color(${colorSpace} 0.2 0.5 0.3 / 0.4)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r 0.2 b / alpha)`, `color(${colorSpace} 0.7 0.2 0.3 / 0.4)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r 20% b / alpha)`, `color(${colorSpace} 0.7 0.2 0.3 / 0.4)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g 0.2 / alpha)`, `color(${colorSpace} 0.7 0.5 0.2 / 0.4)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g 20% / alpha)`, `color(${colorSpace} 0.7 0.5 0.2 / 0.4)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b / 0.2)`, `color(${colorSpace} 0.7 0.5 0.3 / 0.2)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b / 20%)`, `color(${colorSpace} 0.7 0.5 0.3 / 0.2)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 2 3 4)`, `color(${colorSpace} 2 3 4)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 2 3 4 / 5)`, `color(${colorSpace} 2 3 4)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} -2 -3 -4)`, `color(${colorSpace} -2 -3 -4)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} -2 -3 -4 / -5)`, `color(${colorSpace} -2 -3 -4 / 0)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 200% 300% 400%)`, `color(${colorSpace} 2 3 4)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 200% 300% 400% / 500%)`, `color(${colorSpace} 2 3 4)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} -200% -300% -400%)`, `color(${colorSpace} -2 -3 -4)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} -200% -300% -400% / -500%)`, `color(${colorSpace} -2 -3 -4 / 0)`); + + // Testing valid permutation (types match). + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} g b r)`, `color(${colorSpace} 0.5 0.3 0.7)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} b alpha r / g)`, `color(${colorSpace} 0.3 1 0.7 / 0.5)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r r r / r)`, `color(${colorSpace} 0.7 0.7 0.7 / 0.7)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} alpha alpha alpha / alpha)`, `color(${colorSpace} 1 1 1)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} g b r)`, `color(${colorSpace} 0.5 0.3 0.7 / 0.4)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} b alpha r / g)`, `color(${colorSpace} 0.3 0.4 0.7 / 0.5)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r r r / r)`, `color(${colorSpace} 0.7 0.7 0.7 / 0.7)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} alpha alpha alpha / alpha)`, `color(${colorSpace} 0.4 0.4 0.4 / 0.4)`); + + // Testing out of gamut components. + fuzzy_test_computed_color(`color(from color(${colorSpace} 1.7 1.5 1.3) ${colorSpace} r g b)`, `color(${colorSpace} 1.7 1.5 1.3)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 1.7 1.5 1.3) ${colorSpace} r g b / alpha)`, `color(${colorSpace} 1.7 1.5 1.3)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 1.7 1.5 1.3 / 140%) ${colorSpace} r g b)`, `color(${colorSpace} 1.7 1.5 1.3)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 1.7 1.5 1.3 / 140%) ${colorSpace} r g b / alpha)`, `color(${colorSpace} 1.7 1.5 1.3)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} -0.7 -0.5 -0.3) ${colorSpace} r g b)`, `color(${colorSpace} -0.7 -0.5 -0.3)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} -0.7 -0.5 -0.3) ${colorSpace} r g b / alpha)`, `color(${colorSpace} -0.7 -0.5 -0.3)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} -0.7 -0.5 -0.3 / -40%) ${colorSpace} r g b)`, `color(${colorSpace} -0.7 -0.5 -0.3 / 0)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} -0.7 -0.5 -0.3 / -40%) ${colorSpace} r g b / alpha)`, `color(${colorSpace} -0.7 -0.5 -0.3 / 0)`); + + // Testing with calc(). + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} calc(r) calc(g) calc(b))`, `color(${colorSpace} 0.7 0.5 0.3)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} calc(r) calc(g) calc(b) / calc(alpha))`, `color(${colorSpace} 0.7 0.5 0.3 / 0.4)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 0.8) ${colorSpace} calc(r + 0.01) calc(g + 0.01) calc(b + 0.01) / calc(alpha + 0.01))`, `color(${colorSpace} 0.71 0.51 0.31 / 0.81)`); + + // Testing with 'none'. + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} none none none)`, `color(${colorSpace} none none none)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} none none none / none)`, `color(${colorSpace} none none none / none)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g none)`, `color(${colorSpace} 0.7 0.5 none)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g none / alpha)`, `color(${colorSpace} 0.7 0.5 none)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b / none)`, `color(${colorSpace} 0.7 0.5 0.3 / none)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g none / alpha)`, `color(${colorSpace} 0.7 0.5 none / 0.4)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b / none)`, `color(${colorSpace} 0.7 0.5 0.3 / none)`); + // FIXME: Clarify with spec editors if 'none' should pass through to the constants. + fuzzy_test_computed_color(`color(from color(${colorSpace} none none none) ${colorSpace} r g b)`, `color(${colorSpace} 0 0 0)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} none none none / none) ${colorSpace} r g b / alpha)`, `color(${colorSpace} 0 0 0 / 0)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 none 0.3) ${colorSpace} r g b)`, `color(${colorSpace} 0.7 0 0.3)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / none) ${colorSpace} r g b / alpha)`, `color(${colorSpace} 0.7 0.5 0.3 / 0)`); + } + + for (const colorSpace of [ "xyz", "xyz-d50", "xyz-d65" ]) { + const resultColorSpace = colorSpace == "xyz" ? "xyz-d65" : colorSpace; + + // Testing no modifications. + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z)`, `color(${resultColorSpace} 7 -20.5 100)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z / alpha)`, `color(${resultColorSpace} 7 -20.5 100)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y z)`, `color(${resultColorSpace} 7 -20.5 100 / 0.4)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y z / alpha)`, `color(${resultColorSpace} 7 -20.5 100 / 0.4)`); + + // Test nesting relative colors. + fuzzy_test_computed_color(`color(from color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z) ${colorSpace} x y z)`, `color(${resultColorSpace} 7 -20.5 100)`); + + // Testing replacement with 0. + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} 0 0 0)`, `color(${resultColorSpace} 0 0 0)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} 0 0 0 / 0)`, `color(${resultColorSpace} 0 0 0 / 0)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} 0 y z / alpha)`, `color(${resultColorSpace} 0 -20.5 100)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x 0 z / alpha)`, `color(${resultColorSpace} 7 0 100)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y 0 / alpha)`, `color(${resultColorSpace} 7 -20.5 0)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z / 0)`, `color(${resultColorSpace} 7 -20.5 100 / 0)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} 0 y z / alpha)`, `color(${resultColorSpace} 0 -20.5 100 / 0.4)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x 0 z / alpha)`, `color(${resultColorSpace} 7 0 100 / 0.4)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y 0 / alpha)`, `color(${resultColorSpace} 7 -20.5 0 / 0.4)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y z / 0)`, `color(${resultColorSpace} 7 -20.5 100 / 0)`); + + // Testing replacement with a constant. + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} 0.2 y z / alpha)`, `color(${resultColorSpace} 0.2 -20.5 100)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x 0.2 z / alpha)`, `color(${resultColorSpace} 7 0.2 100)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y 0.2 / alpha)`, `color(${resultColorSpace} 7 -20.5 0.2)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z / 0.2)`, `color(${resultColorSpace} 7 -20.5 100 / 0.2)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z / 20%)`, `color(${resultColorSpace} 7 -20.5 100 / 0.2)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} 0.2 y z / alpha)`, `color(${resultColorSpace} 0.2 -20.5 100 / 0.4)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x 0.2 z / alpha)`, `color(${resultColorSpace} 7 0.2 100 / 0.4)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y 0.2 / alpha)`, `color(${resultColorSpace} 7 -20.5 0.2 / 0.4)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y z / 0.2)`, `color(${resultColorSpace} 7 -20.5 100 / 0.2)`); + + // Testing valid permutation (types match). + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} y z x)`, `color(${resultColorSpace} -20.5 100 7)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x x x / x)`, `color(${resultColorSpace} 7 7 7)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} y z x)`, `color(${resultColorSpace} -20.5 100 7 / 0.4)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x x x / x)`, `color(${resultColorSpace} 7 7 7)`); + + // Testing with calc(). + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} calc(x) calc(y) calc(z))`, `color(${resultColorSpace} 7 -20.5 100)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} calc(x) calc(y) calc(z) / calc(alpha))`, `color(${resultColorSpace} 7 -20.5 100 / 0.4)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100 / 0.8) ${colorSpace} calc(x + 1) calc(y + 1) calc(z + 1) / calc(alpha + 0.01))`, `color(${resultColorSpace} 8 -19.5 101 / 0.81)`); + + // Testing with 'none'. + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} none none none)`, `color(${resultColorSpace} none none none)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} none none none / none)`, `color(${resultColorSpace} none none none / none)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y none)`, `color(${resultColorSpace} 7 -20.5 none)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y none / alpha)`, `color(${resultColorSpace} 7 -20.5 none)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z / none)`, `color(${resultColorSpace} 7 -20.5 100 / none)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y none / alpha)`, `color(${resultColorSpace} 7 -20.5 none / 0.4)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y z / none)`, `color(${resultColorSpace} 7 -20.5 100 / none)`); + // FIXME: Clarify with spec editors if 'none' should pass through to the constants. + fuzzy_test_computed_color(`color(from color(${colorSpace} none none none) ${colorSpace} x y z)`, `color(${resultColorSpace} 0 0 0)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} none none none / none) ${colorSpace} x y z / alpha)`, `color(${resultColorSpace} 0 0 0 / 0)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 none 100) ${colorSpace} x y z)`, `color(${resultColorSpace} 7 0 100)`); + fuzzy_test_computed_color(`color(from color(${colorSpace} 7 -20.5 100 / none) ${colorSpace} x y z / alpha)`, `color(${resultColorSpace} 7 -20.5 100 / 0)`); + } + + // Test origin colors with different color spaces, going both to and from srgb. + fuzzy_test_computed_color(`color(from color(srgb-linear 0.25 0.5 0.75) srgb r g b)`, `color(srgb 0.537121 0.735394 0.880852)`, 0.001); + fuzzy_test_computed_color(`color(from color(srgb 0.25 0.5 0.75) srgb-linear r g b)`, `color(srgb-linear 0.050864 0.213993 0.522484)`, 0.001); + fuzzy_test_computed_color(`color(from color(display-p3 0.25 0.5 0.75) srgb r g b)`, `color(srgb 0.123874 0.507355 0.771198)`, 0.001); + fuzzy_test_computed_color(`color(from color(srgb 0.25 0.5 0.75) display-p3 r g b)`, `color(display-p3 0.313084 0.494041 0.730118)`, 0.001); + fuzzy_test_computed_color(`color(from color(a98-rgb 0.25 0.5 0.75) srgb r g b)`, `color(srgb -0.153808 0.503925 0.763874)`, 0.001); + fuzzy_test_computed_color(`color(from color(srgb 0.25 0.5 0.75) a98-rgb r g b)`, `color(a98-rgb 0.346851 0.496124 0.736271)`, 0.001); + fuzzy_test_computed_color(`color(from color(prophoto-rgb 0.25 0.5 0.75) srgb r g b)`, `color(srgb -0.510605 0.612396 0.825333)`, 0.001); + fuzzy_test_computed_color(`color(from color(srgb 0.25 0.5 0.75) prophoto-rgb r g b)`, `color(prophoto-rgb 0.374905 0.416401 0.663692)`, 0.001); + fuzzy_test_computed_color(`color(from color(rec2020 0.25 0.5 0.75) srgb r g b)`, `color(srgb -0.280102 0.565536 0.79958)`, 0.001); + fuzzy_test_computed_color(`color(from color(srgb 0.25 0.5 0.75) rec2020 r g b)`, `color(rec2020 0.331976 0.440887 0.696358)`, 0.001); + fuzzy_test_computed_color(`color(from color(xyz-d50 0.25 0.5 0.75) srgb r g b)`, `color(srgb -0.660065 0.874863 0.981117)`, 0.001); + fuzzy_test_computed_color(`color(from color(srgb 0.25 0.5 0.75) xyz-d50 x y z)`, `color(xyz-d50 0.179349 0.196389 0.394585)`, 0.001); + fuzzy_test_computed_color(`color(from color(xyz-d65 0.25 0.5 0.75) srgb r g b)`, `color(srgb -0.611881 0.868732 0.856899)`, 0.001); + fuzzy_test_computed_color(`color(from color(srgb 0.25 0.5 0.75) xyz-d65 x y z)`, `color(xyz-d65 0.191791 0.201562 0.523057)`, 0.001); + fuzzy_test_computed_color(`lab(from color(srgb 0.25 0.5 0.75) l a b)`, `lab(51.4265 -5.21401 -40.1491)`, 0.02); // Larger values means larger epsilon. + fuzzy_test_computed_color(`color(from lab(67.5345 -8.6911 -41.6019) srgb r g b)`, `color(srgb 0.382744 0.672806 0.938545)`, 0.001); + fuzzy_test_computed_color(`oklab(from color(srgb 0.25 0.5 0.75) l a b)`, `oklab(0.585502 -0.0393846 -0.111503)`, 0.001); + fuzzy_test_computed_color(`color(from oklab(72.322% -0.0465 -0.1150) srgb r g b)`, `color(srgb 0.382504 0.672783 0.938919)`, 0.001); + fuzzy_test_computed_color(`lch(from color(srgb 0.25 0.5 0.75) l c h)`, `lch(51.4265 40.4863 262.601)`, 0.02); // Larger values means larger epsilon. + fuzzy_test_computed_color(`color(from lch(67.5345% 42.5 258.2) srgb r g b)`, `color(srgb 0.382744 0.672806 0.938545)`, 0.001); + 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); + + // 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. + fuzzy_test_computed_color(`rgb(from var(--bg-color) r g b / 80%)`, `color(srgb 0 0 1 / 0.8)`, 0.02); + fuzzy_test_computed_color(`lch(from var(--color) calc(l / 2) c h)`, `lch(23.14 67.99 134.39)`, 0.02); + fuzzy_test_computed_color(`rgb(from var(--color) calc(r * .3 + g * .59 + b * .11) calc(r * .3 + g * .59 + b * .11) calc(r * .3 + g * .59 + b * .11))`, `color(srgb 0.3 0.3 0.3)`, 0.02); + fuzzy_test_computed_color(`lch(from var(--color) l 0 h)`, `lch(46.28 0 134.39)`, 0.02); + fuzzy_test_computed_color(`rgb(from indianred 255 g b)`, `color(srgb 1 0.36 0.36)`, 0.02); + fuzzy_test_computed_color(`hsl(from var(--accent) calc(h + 180) s l)`, `color(srgb 0.7 0.13 0.16)`, 0.02); + fuzzy_test_computed_color(`lab(from var(--mycolor) l a b / 100%)`, `lab(62.75 52.46 -34.12)`, 0.02); + fuzzy_test_computed_color(`lab(from var(--mycolor) l a b / calc(alpha * 0.8))`, `lab(62.75 52.46 -34.12 / 0.8)`, 0.02); + fuzzy_test_computed_color(`lab(from var(--mycolor) l 0 0)`, `lab(62.75 0 0)`, 0.02); + fuzzy_test_computed_color(`lch(from peru calc(l * 0.8) c h)`, `lch(49.80 54 63.68)`, 0.02); + fuzzy_test_computed_color(`LCH(from var(--accent) l c calc(h + 180))`, `lch(65.49 39.45 10.11)`, 0.02); + fuzzy_test_computed_color(`lch(from var(--mycolor) l 0 h)`, `lch(62.75 0 326.96)`, 0.02); + fuzzy_test_computed_color(`var(--mygray)`, `lch(62.75 0 326.96)`, 0.02); + fuzzy_test_computed_color(`lch(from var(--mygray) l 30 h)`, `lch(62.75 30 326.96)`, 0.02); +</script> +</body> +</html> diff --git a/testing/web-platform/tests/css/css-color/parsing/color-computed-rgb.html b/testing/web-platform/tests/css/css-color/parsing/color-computed-rgb.html new file mode 100644 index 0000000000..1f62567f5c --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/color-computed-rgb.html @@ -0,0 +1,122 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 4: Computation of colors using RGB notation</title> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#rgb-functions"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#resolving-sRGB-values"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#serializing-sRGB-values"> +<link rel="author" title="Chris Nardi" href="mailto:cnardi@chromium.org"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/computed-testcommon.js"></script> +</head> +<body> +<div id="container"> + <div id="target"></div> +</div> +<style> + :root { + --high: 500; + --negative: -100; + } + #container { + color: rgb(255, 0, 0); + } +</style> +<script> +tests = [ + ["rgb(none none none)", "rgb(0, 0, 0)"], + ["rgb(none none none / none)", "rgba(0, 0, 0, 0)"], + ["rgb(128 none none)", "rgb(128, 0, 0)"], + ["rgb(128 none none / none)", "rgba(128, 0, 0, 0)"], + ["rgb(none none none / .5)", "rgba(0, 0, 0, 0.5)"], + ["rgb(20% none none)", "rgb(51, 0, 0)"], + ["rgb(20% none none / none)", "rgba(51, 0, 0, 0)"], + ["rgb(none none none / 50%)", "rgba(0, 0, 0, 0.5)"], + ["rgba(none none none)", "rgb(0, 0, 0)"], + ["rgba(none none none / none)", "rgba(0, 0, 0, 0)"], + ["rgba(128 none none)", "rgb(128, 0, 0)"], + ["rgba(128 none none / none)", "rgba(128, 0, 0, 0)"], + ["rgba(none none none / .5)", "rgba(0, 0, 0, 0.5)"], + ["rgba(20% none none)", "rgb(51, 0, 0)"], + ["rgba(20% none none / none)", "rgba(51, 0, 0, 0)"], + ["rgba(none none none / 50%)", "rgba(0, 0, 0, 0.5)"], + + ["rgb(2.5, 3.4, 4.6)", ["rgb(3, 3, 5)", "rgb(2.5, 3.4, 4.6)"], "Tests that RGB channels are rounded appropriately"], + + ["rgb(00, 51, 102)", "rgb(0, 51, 102)", "Valid numbers should be parsed"], + ["r\\gb(00, 51, 102)", "rgb(0, 51, 102)", "Correct escape sequences should still parse"], + ["r\\67 b(00, 51, 102)", "rgb(0, 51, 102)", "Correct escape sequences should still parse"], + ["RGB(153, 204, 255)", "rgb(153, 204, 255)", "Capitalization should not affect parsing"], + ["rgB(0, 0, 0)", "rgb(0, 0, 0)", "Capitalization should not affect parsing"], + ["rgB(0, 51, 255)", "rgb(0, 51, 255)", "Capitalization should not affect parsing"], + ["rgb(0,51,255)", "rgb(0, 51, 255)", "Lack of whitespace should not affect parsing"], + ["rgb(0\t, 51 ,255)", "rgb(0, 51, 255)", "Whitespace should not affect parsing"], + ["rgb(/* R */0, /* G */51, /* B */255)", "rgb(0, 51, 255)", "Comments should be allowed within function"], + ["rgb(-51, 306, 0)", "rgb(0, 255, 0)", "Invalid values should be clamped to 0 and 255 respectively"], + ["rgb(42%, 3%, 50%)", "rgb(107, 8, 128)", "Valid percentages should be parsed"], + ["RGB(100%, 100%, 100%)", "rgb(255, 255, 255)", "Capitalization should not affect parsing"], + ["rgB(0%, 0%, 0%)", "rgb(0, 0, 0)", "Capitalization should not affect parsing"], + ["rgB(10%, 20%, 30%)", "rgb(26, 51, 77)", "Capitalization should not affect parsing"], + ["rgb(10%,20%,30%)", "rgb(26, 51, 77)", "Whitespace should not affect parsing"], + ["rgb(10%\t, 20% ,30%)", "rgb(26, 51, 77)", "Whitespace should not affect parsing"], + ["rgb(/* R */ 10%, /* G */ 20%, /* B */ 30%)", "rgb(26, 51, 77)", "Comments should not affect parsing"], + ["rgb(-12%, 110%, 1400%)", "rgb(0, 255, 255)", "Invalid values should be clamped to 0 and 255 respectively"], + ["rgb(0, 0, 0, 0)", "rgba(0, 0, 0, 0)", "RGB and RGBA are synonyms"], + ["rgb(0%, 0%, 0%, 0%)", "rgba(0, 0, 0, 0)", "RGB and RGBA are synonyms"], + ["rgb(0%, 0%, 0%, 0)", "rgba(0, 0, 0, 0)", "RGB and RGBA are synonyms"], + ["rgba(0, 0, 0, 0)", "rgba(0, 0, 0, 0)", "Valid numbers should be parsed"], + ["rgba(204, 0, 102, 0.3)", "rgba(204, 0, 102, 0.3)", "Valid numbers should be parsed"], + ["RGBA(255, 255, 255, 0)", "rgba(255, 255, 255, 0)", "Capitalization should not affect parsing"], + ["rgBA(0, 51, 255, 1)", "rgb(0, 51, 255)", "Capitalization should not affect parsing"], + ["rgba(0, 51, 255, 1.1)", "rgb(0, 51, 255)", "Invalid alpha values should be clamped to 0 and 1 respectively"], + ["rgba(0, 51, 255, 37)", "rgb(0, 51, 255)", "Invalid alpha values should be clamped to 0 and 1 respectively"], + ["rgba(0, 51, 255, 0.42)", "rgba(0, 51, 255, 0.42)", "Valid numbers should be parsed"], + ["rgba(0, 51, 255, 0)", "rgba(0, 51, 255, 0)", "Valid numbers should be parsed"], + ["rgba(0, 51, 255, -0.1)", "rgba(0, 51, 255, 0)", "Invalid alpha values should be clamped to 0 and 1 respectively"], + ["rgba(0, 51, 255, -139)", "rgba(0, 51, 255, 0)", "Invalid alpha values should be clamped to 0 and 1 respectively"], + ["RGBA(100%, 100%, 100%, 0)", "rgba(255, 255, 255, 0)", "Capitalization should not affect parsing"], + ["rgba(42%, 3%, 50%, 0.3)", "rgba(107, 8, 128, 0.3)", "Valid percentages should be parsed"], + ["rgBA(0%, 20%, 100%, 1)", "rgb(0, 51, 255)", "Capitalization should not affect parsing"], + ["rgba(0%, 20%, 100%, 1.1)", "rgb(0, 51, 255)", "Invalid alpha values should be clamped to 0 and 1 respectively"], + ["rgba(0%, 20%, 100%, 37)", "rgb(0, 51, 255)", "Invalid alpha values should be clamped to 0 and 1 respectively"], + ["rgba(0%, 20%, 100%, 0.42)", "rgba(0, 51, 255, 0.42)", "Valid percentages should be parsed"], + ["rgba(0%, 20%, 100%, 0)", "rgba(0, 51, 255, 0)", "Valid percentages should be parsed"], + ["rgba(0%, 20%, 100%, -0.1)", "rgba(0, 51, 255, 0)", "Invalid alpha values should be clamped to 0 and 1 respectively"], + ["rgba(0%, 20%, 100%, -139)", "rgba(0, 51, 255, 0)", "Invalid alpha values should be clamped to 0 and 1 respectively"], + ["rgba(255, 255, 255, 0%)", "rgba(255, 255, 255, 0)", "Percent alpha values are accepted in rgb/rgba"], + ["rgba(0%, 0%, 0%, 0%)", "rgba(0, 0, 0, 0)", "Percent alpha values are accepted in rgb/rgba"], + ["rgba(0%, 0%, 0%)", "rgb(0, 0, 0)", "RGB and RGBA are synonyms"], + ["rgba(0, 0, 0)", "rgb(0, 0, 0)", "RGB and RGBA are synonyms"], + + // rgb are in the range [0, 255], alpha is in the range [0, 1]. + // calc(infinity) resolves to the upper bound while calc(-infinity) and calc(NaN) resolves the lower bound. + // See: https://github.com/w3c/csswg-drafts/issues/8629 + ["rgb(calc(infinity), 0, 0)", "rgb(255, 0, 0)", "Red channel resolves positive infinity to 255"], + ["rgb(0, calc(infinity), 0)", "rgb(0, 255, 0)", "Green channel resolves positive infinity to 255"], + ["rgb(0, 0, calc(infinity))", "rgb(0, 0, 255)", "Blue channel resolves positive infinity to 255"], + ["rgba(0, 0, 0, calc(infinity))", "rgb(0, 0, 0)", "Alpha channel resolves positive infinity to fully opaque"], + ["rgb(calc(-infinity), 0, 0)", "rgb(0, 0, 0)", "Red channel resolves negative infinity to zero"], + ["rgb(0, calc(-infinity), 0)", "rgb(0, 0, 0)", "Green channel resolves negative infinity to zero"], + ["rgb(0, 0, calc(-infinity))", "rgb(0, 0, 0)", "Blue channel resolves negative infinity to zero"], + ["rgba(0, 0, 0, calc(-infinity))", "rgba(0, 0, 0, 0)", "Alpha channel resolves negative infinity to fully transparent"], + ["rgb(calc(NaN), 0, 0)", "rgb(0, 0, 0)", "Red channel resolves NaN to zero"], + ["rgb(0, calc(NaN), 0)", "rgb(0, 0, 0)", "Green channel resolves NaN to zero"], + ["rgb(0, 0, calc(NaN))", "rgb(0, 0, 0)", "Blue channel resolves NaN to zero"], + ["rgba(0, 0, 0, calc(NaN))", "rgba(0, 0, 0, 0)", "Alpha channel resolves NaN to zero"], + ["rgb(calc(0 / 0), 0, 0)", "rgb(0, 0, 0)", "Red channel resolves NaN equivalent calc statements to zero"], + ["rgb(0, calc(0 / 0), 0)", "rgb(0, 0, 0)", "Green channel resolves NaN equivalent calc statements to zero"], + ["rgb(0, 0, calc(0 / 0))", "rgb(0, 0, 0)", "Blue channel resolves NaN equivalent calc statements to zero"], + ["rgba(0, 0, 0, calc(0 / 0))", "rgba(0, 0, 0, 0)", "Alpha channel resolves NaN equivalent calc statements to zero"], + + ["rgb(var(--high), 0, 0)", "rgb(255, 0, 0)", "Variables above 255 get clamped to 255."], + ["rgb(var(--negative), 64, 128)", "rgb(0, 64, 128)", "Variables below 0 get clamped to 0."], +]; + +for (const test of tests) { + test_computed_value("color", test[0], test[1], test[2] ? `[${test[2]}]` : undefined); +} +</script> +</body> +</html> diff --git a/testing/web-platform/tests/css/css-color/parsing/color-computed.html b/testing/web-platform/tests/css/css-color/parsing/color-computed.html new file mode 100644 index 0000000000..8aa2216fbd --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/color-computed.html @@ -0,0 +1,39 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 3: getComputedStyle().color</title> +<link rel="help" href="https://www.w3.org/TR/css-color-3/#foreground"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/computed-testcommon.js"></script> +</head> +<body> +<div id="container"> + <div id="target"></div> +</div> +<style> + #container { + color: rgb(255, 0, 0); + } +</style> +<script> +test_computed_value("color", "currentcolor", "rgb(255, 0, 0)"); +test_computed_value("color", "transparent", "rgba(0, 0, 0, 0)"); +test_computed_value("color", "red", "rgb(255, 0, 0)"); +test_computed_value("color", "magenta", "rgb(255, 0, 255)"); +test_computed_value("color", "#234", "rgb(34, 51, 68)"); +test_computed_value("color", "#FEDCBA", "rgb(254, 220, 186)"); +test_computed_value("color", "rgb(2, 3, 4)"); +test_computed_value("color", "rgb(100%, 0%, 0%)", "rgb(255, 0, 0)"); +test_computed_value("color", "rgba(2, 3, 4, 0.5)"); +test_computed_value("color", "rgba(2, 3, 4, 50%)", "rgba(2, 3, 4, 0.5)"); +test_computed_value("color", "hsl(120, 100%, 50%)", "rgb(0, 255, 0)"); +test_computed_value("color", "hsla(120, 100%, 50%, 0.25)", "rgba(0, 255, 0, 0.25)"); +test_computed_value("color", "rgb(-2, 3, 4)", "rgb(0, 3, 4)"); +test_computed_value("color", "rgb(100, 200, 300)", "rgb(100, 200, 255)"); +test_computed_value("color", "rgb(20, 10, 0, -10)", "rgba(20, 10, 0, 0)"); +test_computed_value("color", "rgb(100%, 200%, 300%)", "rgb(255, 255, 255)"); +</script> +</body> +</html> diff --git a/testing/web-platform/tests/css/css-color/parsing/color-invalid-color-contrast-function.html b/testing/web-platform/tests/css/css-color/parsing/color-invalid-color-contrast-function.html new file mode 100644 index 0000000000..1ac9792691 --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/color-invalid-color-contrast-function.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 6: Parsing and serialization of colors using invalid color-contrast() function syntax</title> +<link rel="author" title="Sam Weinig" href="mailto:weinig@apple.com"> +<link rel="help" href="https://drafts.csswg.org/css-color-6/#colorcontrast"> +<link rel="help" href="https://drafts.csswg.org/css-color-6/#resolving-contrast"> +<link rel="help" href="https://drafts.csswg.org/css-color-6/#serial-color-contrast"> +<meta name="assert" content="invalid color-contrast() values fail to parse"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<script> + test_invalid_value('color', `color-contrast(white vs red)`); + test_invalid_value('color', `color-contrast(white vs red,)`); + test_invalid_value('color', `color-contrast(white vs )`); + test_invalid_value('color', `color-contrast(white)`); + test_invalid_value('color', `color-contrast(white vs red green)`); + test_invalid_value('color', `color-contrast(white vs red, green to)`); + test_invalid_value('color', `color-contrast(white vs red, green to invalid)`); + test_invalid_value('color', `color-contrast(white vs red to AA)`); + test_invalid_value('color', `color-contrast(white vs red, green white)`); + test_invalid_value('color', `color-contrast(white vs red, green to AA white)`); +</script> +</body> +</html> diff --git a/testing/web-platform/tests/css/css-color/parsing/color-invalid-color-function.html b/testing/web-platform/tests/css/css-color/parsing/color-invalid-color-function.html new file mode 100644 index 0000000000..5a39d42c2d --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/color-invalid-color-function.html @@ -0,0 +1,63 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 4: Parsing and serialization of colors using invalid color() function syntax</title> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#color-function"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#resolving-color-function-values"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#serializing-color-function-values"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<script> +for (const colorSpace of [ "srgb", "srgb-linear", "a98-rgb", "rec2020", "prophoto-rgb" ]) { + test_invalid_value("color", `color(${colorSpace} 0 0 0 0)`); + test_invalid_value("color", `color(${colorSpace} 0deg 0% 0)`); + test_invalid_value("color", `color(${colorSpace} 0% 0 0 1)`); + test_invalid_value("color", `color(${colorSpace} 0% 0 0 10%)`); + test_invalid_value("color", `color(${colorSpace} 0% 0 0deg)`); + test_invalid_value("color", `color(${colorSpace} 0% 0% 0deg)`); + test_invalid_value("color", `color(${colorSpace} 40% 0 0deg)`); + // Missing parameters should not parse + test_invalid_value("color", `color(${colorSpace} 50% -200)`); + test_invalid_value("color", `color(${colorSpace} 50%)`); + test_invalid_value("color", `color(${colorSpace})`); + test_invalid_value("color", `color(${colorSpace} 50% -200 / 0.5)`); + test_invalid_value("color", `color(${colorSpace} 50% / 0.5)`); + test_invalid_value("color", `color(${colorSpace} / 0.5)`); +} + +for (const colorSpace of [ "xyz", "xyz-d50", "xyz-d65" ]) { + test_invalid_value("color", `color(${colorSpace} 0 0 0 0)`); + test_invalid_value("color", `color(${colorSpace} 0deg 0% 0)`); + test_invalid_value("color", `color(${colorSpace} 0% 0 0 1)`); + test_invalid_value("color", `color(${colorSpace} 0% 0 0 10%)`); + test_invalid_value("color", `color(${colorSpace} 0% 0 0deg)`); + test_invalid_value("color", `color(${colorSpace} 0% 0% 0deg)`); + test_invalid_value("color", `color(${colorSpace} 40% 0 0deg)`); + // Missing parameters should not parse + test_invalid_value("color", `color(${colorSpace} 1 1)`); + test_invalid_value("color", `color(${colorSpace} 1)`); + test_invalid_value("color", `color(${colorSpace})`); + test_invalid_value("color", `color(${colorSpace} 1 1 / .5)`); + test_invalid_value("color", `color(${colorSpace} 1 / 0.5)`); + test_invalid_value("color", `color(${colorSpace} / 50%)`); +} + +test_invalid_value("color", "color()"); // Empty +test_invalid_value("color", "color(banana 1 1 1)"); // Bad color space +test_invalid_value("color", "color(displayp3 1 1 1)"); // Bad Display P3 color space +test_invalid_value("color", "color(1 1 1)"); // No color space +test_invalid_value("color", "color(srgb 1 1)"); // One missing component +test_invalid_value("color", "color(srgb 1)"); // Two missing components + +test_invalid_value("color", "color(srgb 1 1 1 1)"); // Too many parameters +test_invalid_value("color", "color(srgb 1 1 1 1 1)"); // Way too many parameters +test_invalid_value("color", "color(srgb 1 eggs 1)"); // Bad parameters +test_invalid_value("color", "color(srgb 1 1 1 / bacon)"); // Bad alpha +test_invalid_value("color", "color(srgb 1 1 1 / 1 cucumber)"); // Junk after alpha +</script> +</body> +</html> diff --git a/testing/web-platform/tests/css/css-color/parsing/color-invalid-color-mix-function.html b/testing/web-platform/tests/css/css-color/parsing/color-invalid-color-mix-function.html new file mode 100644 index 0000000000..40299644bf --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/color-invalid-color-mix-function.html @@ -0,0 +1,92 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 5: Parsing and serialization of colors using invalid color-mix() function syntax</title> +<link rel="author" title="Sam Weinig" href="mailto:weinig@apple.com"> +<link rel="help" href="https://drafts.csswg.org/css-color-5/#color-mix"> +<link rel="help" href="https://drafts.csswg.org/css-color-5/#resolving-mix"> +<link rel="help" href="https://drafts.csswg.org/css-color-5/#serial-color-mix"> +<meta name="assert" content="invalid color-mix() values fail to parse for all color interpolation methods"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<div id="target"></div> +<script> + test_invalid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%) -10%, hsl(30deg 30% 40%))`); // Percentages less than 0 are not valid. + test_invalid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%) 150%, hsl(30deg 30% 40%))`); // Percentages greater than 100 are not valid. + test_invalid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%) 0%, hsl(30deg 30% 40%) 0%)`); // Sum of percengates cannot be 0%. + test_invalid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20% 40%) -10%, hsl(30deg 30% 40% 80%))`); // Percentages less than 0 are not valid. + test_invalid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20% 40%) 150%, hsl(30deg 30% 40% 80%))`); // Percentages greater than 100 are not valid. + test_invalid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20% 40%) 0%, hsl(30deg 30% 40% 80%) 0%)`); // Sum of percengates cannot be 0%. + test_invalid_value(`color`, `color-mix(in hsl hue, hsl(120deg 10% 20%), hsl(30deg 30% 40%))`); // `hue` keyword without a specified method. + test_invalid_value(`color`, `color-mix(in hsl shorter, hsl(120deg 10% 20%), hsl(30deg 30% 40%))`); // Specified hue method without trailing `hue` keyword. + test_invalid_value(`color`, `color-mix(in hsl foo, hsl(120deg 10% 20%), hsl(30deg 30% 40%))`); // Trailing identifier after color space that is not a hue method. + test_invalid_value(`color`, `color-mix(in hsl hsl(120deg 10% 20%), hsl(30deg 30% 40%))`); // Missing comma after interpolation method. + test_invalid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%) hsl(30deg 30% 40%))`); // Missing comma between colors. + test_invalid_value(`color`, `color-mix(hsl(120deg 10% 20%), hsl(30deg 30% 40%), in hsl)`); // Interpolation method not at the beginning. + test_invalid_value(`color`, `color-mix(hsl(120deg 10% 20%), hsl(30deg 30% 40%))`); // Missing interpolation method. + + test_invalid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%) -10%, hwb(30deg 30% 40%))`); // Percentages less than 0 are not valid. + test_invalid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%) 150%, hwb(30deg 30% 40%))`); // Percentages greater than 100 are not valid. + test_invalid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%) 0%, hwb(30deg 30% 40%) 0%)`); // Sum of percengates cannot be 0%. + test_invalid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% 40%) -10%, hwb(30deg 30% 40% 80%))`); // Percentages less than 0 are not valid. + test_invalid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% 40%) 150%, hwb(30deg 30% 40% 80%))`); // Percentages greater than 100 are not valid. + test_invalid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% 40%) 0%, hwb(30deg 30% 40% 80%) 0%)`); // Sum of percengates cannot be 0%. + test_invalid_value(`color`, `color-mix(in hwb hue, hwb(120deg 10% 20%), hwb(30deg 30% 40%))`); // `hue` keyword without a specified method. + test_invalid_value(`color`, `color-mix(in hwb shorter, hwb(120deg 10% 20%), hwb(30deg 30% 40%))`); // Specified hue method without trailing `hue` keyword. + test_invalid_value(`color`, `color-mix(in hwb foo, hwb(120deg 10% 20%), hwb(30deg 30% 40%))`); // Trailing identifier after color space that is not a hue method. + test_invalid_value(`color`, `color-mix(in hwb hwb(120deg 10% 20%), hwb(30deg 30% 40%))`); // Missing comma after interpolation method. + test_invalid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%) hwb(30deg 30% 40%))`); // Missing comma between colors. + test_invalid_value(`color`, `color-mix(hwb(120deg 10% 20%), hwb(30deg 30% 40%), in hwb)`); // Interpolation method not at the beginning. + test_invalid_value(`color`, `color-mix(hwb(120deg 10% 20%), hwb(30deg 30% 40%))`); // Missing interpolation method. + test_invalid_value(`color`, `color-mix(in srgb, red, blue blue)`); // Too many parameters. + + for (const colorSpace of [ "lch", "oklch" ]) { + test_invalid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10% 20 30deg) -10%, ${colorSpace}(50% 60 70deg))`); // Percentages less than 0 are not valid. + test_invalid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10% 20 30deg) 150%, ${colorSpace}(50% 60 70deg))`); // Percentages greater than 100 are not valid. + test_invalid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10% 20 30deg) 0%, ${colorSpace}(50% 60 70deg) 0%)`); // Sum of percengates cannot be 0%. + test_invalid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10% 20 30deg / .4) -10%, ${colorSpace}(50% 60 70deg / .8))`); // Percentages less than 0 are not valid. + test_invalid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10% 20 30deg / .4) 150%, ${colorSpace}(50% 60 70deg / .8))`); // Percentages greater than 100 are not valid. + test_invalid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10% 20 30deg / .4) 0%, ${colorSpace}(50% 60 70deg / .8) 0%)`); // Sum of percengates cannot be 0%. + test_invalid_value(`color`, `color-mix(in ${colorSpace} hue, ${colorSpace}(10% 20 30deg), ${colorSpace}(50% 60 70deg))`); // `hue` keyword without a specified method. + test_invalid_value(`color`, `color-mix(in ${colorSpace} shorter, ${colorSpace}(10% 20 30deg), ${colorSpace}(50% 60 70deg))`); // Specified hue method without trailing `hue` keyword. + test_invalid_value(`color`, `color-mix(in ${colorSpace} foo, ${colorSpace}(10% 20 30deg), ${colorSpace}(50% 60 70deg))`); // Trailing identifier after color space that is not a hue method. + test_invalid_value(`color`, `color-mix(in ${colorSpace} ${colorSpace}(10% 20 30deg), ${colorSpace}(50% 60 70deg))`); // Missing comma after interpolation method. + test_invalid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10% 20 30deg) ${colorSpace}(50% 60 70deg))`); // Missing comma between colors. + test_invalid_value(`color`, `color-mix(${colorSpace}(10% 20 30deg), ${colorSpace}(50% 60 70deg), in ${colorSpace})`); // Interpolation method not at the beginning. + test_invalid_value(`color`, `color-mix(${colorSpace}(10% 20 30deg), ${colorSpace}(50% 60 70deg))`); // Missing interpolation method. + } + + for (const colorSpace of [ "lab", "oklab" ]) { + test_invalid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10% 20 30) -10%, ${colorSpace}(50% 60 70))`); // Percentages less than 0 are not valid. + test_invalid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10% 20 30) 150%, ${colorSpace}(50% 60 70))`); // Percentages greater than 100 are not valid. + test_invalid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10% 20 30) 0%, ${colorSpace}(50% 60 70) 0%)`); // Sum of percengates cannot be 0%. + test_invalid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10% 20 30 / .4) -10%, ${colorSpace}(50% 60 70 / .8))`); // Percentages less than 0 are not valid. + test_invalid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10% 20 30 / .4) 150%, ${colorSpace}(50% 60 70 / .8))`); // Percentages greater than 100 are not valid. + test_invalid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10% 20 30 / .4) 0%, ${colorSpace}(50% 60 70 / .8) 0%)`); // Sum of percengates cannot be 0%. + test_invalid_value(`color`, `color-mix(in ${colorSpace} longer hue, ${colorSpace}(10% 20 30), ${colorSpace}(50% 60 70))`); // Hue modifier on a non-polar color space. + test_invalid_value(`color`, `color-mix(in ${colorSpace} ${colorSpace}(10% 20 30), ${colorSpace}(50% 60 70))`); // Missing comma after interpolation method. + test_invalid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10% 20 30) ${colorSpace}(50% 60 70))`); // Missing comma between colors. + test_invalid_value(`color`, `color-mix(${colorSpace}(10% 20 30), ${colorSpace}(50% 60 70), in ${colorSpace})`); // Interpolation method not at the beginning. + test_invalid_value(`color`, `color-mix(${colorSpace}(10% 20 30), ${colorSpace}(50% 60 70))`); // Missing interpolation method. + } + + for (const colorSpace of [ "srgb", "srgb-linear", "xyz", "xyz-d50", "xyz-d65" ]) { + test_invalid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3) -10%, color(${colorSpace} .5 .6 .7))`); // Percentages less than 0 are not valid. + test_invalid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3) 150%, color(${colorSpace} .5 .6 .7))`); // Percentages greater than 100 are not valid. + test_invalid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3) 0%, color(${colorSpace} .5 .6 .7) 0%)`); // Sum of percengates cannot be 0%. + test_invalid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4) -10%, color(${colorSpace} .5 .6 .7 / .8))`); // Percentages less than 0 are not valid. + test_invalid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4) 150%, color(${colorSpace} .5 .6 .7 / .8))`); // Percentages greater than 100 are not valid. + test_invalid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4) 0%, color(${colorSpace} .5 .6 .7 / .8) 0%)`); // Sum of percengates cannot be 0%. + test_invalid_value(`color`, `color-mix(in ${colorSpace} longer hue, color(${colorSpace} .1 .2 .3), color(${colorSpace} .5 .6 .7))`); // Hue modifier on a non-polar color space. + test_invalid_value(`color`, `color-mix(in ${colorSpace} color(${colorSpace} .1 .2 .3), color(${colorSpace} .5 .6 .7))`); // Missing comma after interpolation method. + test_invalid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3) color(${colorSpace} .5 .6 .7))`); // Missing comma between colors. + test_invalid_value(`color`, `color-mix(color(${colorSpace} .1 .2 .3), color(${colorSpace} .5 .6 .7), in ${colorSpace})`); // Interpolation method not at the beginning. + test_invalid_value(`color`, `color-mix(color(${colorSpace} .1 .2 .3), color(${colorSpace} .5 .6 .7))`); // Missing interpolation method. + } +</script> +</body> +</html> diff --git a/testing/web-platform/tests/css/css-color/parsing/color-invalid-hex-color.html b/testing/web-platform/tests/css/css-color/parsing/color-invalid-hex-color.html new file mode 100644 index 0000000000..f879f334a1 --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/color-invalid-hex-color.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 4: Parsing and serialization of colors using invalid hex color notation</title> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#hex-notation"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#resolving-sRGB-values"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#serializing-sRGB-values"> +<link rel="author" title="Chris Nardi" href="mailto:csnardi1@gmail.com"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<script> +tests = [ + ["#", "Should not parse invalid hex"], + ["#f", "Should not parse invalid hex"], + ["#ff", "Should not parse invalid hex"], + ["#ffg", "Should not parse invalid hex"], + ["#fffg", "Should not parse invalid hex"], + ["#fffff", "Should not parse invalid hex"], + ["#fffffg", "Should not parse invalid hex"], + ["#fffffff", "Should not parse invalid hex"], + ["#fffffffg", "Should not parse invalid hex"], + ["#fffffffff", "Should not parse invalid hex"], +]; + +for (const test of tests) { + test_invalid_value("color", test[0]); +} +</script> +</body> +</html> diff --git a/testing/web-platform/tests/css/css-color/parsing/color-invalid-hsl.html b/testing/web-platform/tests/css/css-color/parsing/color-invalid-hsl.html new file mode 100644 index 0000000000..10967588bd --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/color-invalid-hsl.html @@ -0,0 +1,48 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 4: Parsing and serialization of colors using invalid HSL notation</title> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#the-hsl-notation"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#resolving-sRGB-values"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#serializing-sRGB-values"> +<link rel="author" title="Chris Nardi" href="mailto:csnardi1@gmail.com"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<script> +tests = [ + ["hsl(none, none, none)", "The none keyword is invalid in legacy color syntax"], + ["hsla(none, none, none, none)", "The none keyword is invalid in legacy color syntax"], + ["hsl(none, 100%, 50%)", "The none keyword is invalid in legacy color syntax"], + ["hsla(120, 100%, 50%, none)", "The none keyword is invalid in legacy color syntax"], + + ["hsl(10, 50%, 0)", "The second and third parameters of hsl/hsla must be a percent in legacy color syntax"], + ["hsl(50%, 50%, 0%)", "The first parameter of hsl/hsla must be a number or angle"], + ["hsl(0, 0% 0%)", "Modern color syntax requires no commas at all"], + ["hsl(0, 0%, light)", "Keywords are not accepted in the hsl function"], + ["hsl()", "The hsl function requires 3 or 4 arguments"], + ["hsl(0)", "The hsl function requires 3 or 4 arguments"], + ["hsl(0, 0%)", "The hsl function requires 3 or 4 arguments"], + ["hsl(0, 50, 30%)", "The legacy color syntax does not allow numbers for saturation"], + ["hsl(0, 50%, 30)", "The legacy color syntax does not allow numbers for lightness"], + ["hsla(10, 50%, 0, 1)", "The second and third parameters of hsl/hsla must be a percent in legacy color syntax"], + ["hsla(50%, 50%, 0%, 1)", "The first parameter of hsl/hsla must be a number or angle"], + ["hsla(0, 0% 0%, 1)", "Modern color syntax requires no commas at all"], + ["hsla(0, 0%, light, 1)", "Keywords are not accepted in the hsla function"], + ["hsla()", "The hsla function requires 3 or 4 arguments"], + ["hsla(0)", "The hsla function requires 3 or 4 arguments"], + ["hsla(0, 0%)", "The hsla function requires 3 or 4 arguments"], + ["hsla(0, 0%, 0%, 1, 0%)", "The hsla function requires 3 or 4 arguments"], + ["hsl(0, 50, 30%, 1)", "The legacy color syntax does not allow numbers for saturation"], + ["hsl(0, 50%, 30, 1)", "The legacy color syntax does not allow numbers for lightness"], +]; + +for (const test of tests) { + test_invalid_value("color", test[0]); +} +</script> +</body> +</html> diff --git a/testing/web-platform/tests/css/css-color/parsing/color-invalid-hwb.html b/testing/web-platform/tests/css/css-color/parsing/color-invalid-hwb.html new file mode 100644 index 0000000000..8c15419d60 --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/color-invalid-hwb.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 4: Parsing and serialization of colors using invalid HWB notation</title> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#the-hwb-notation"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#resolving-sRGB-values"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#serializing-sRGB-values"> +<link rel="author" title="Sam Weinig" href="mailto:weinig@apple.com"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<script> +tests = [ + ["hwba(120 30% 50%)", "HWB syntax does not have the hwba function"], + ["hwba(120 30% 50% / 0.5)", "HWB syntax does not have the hwba function"], + + ["hwb(90deg, 50%, 50%)", "HWB value with commas should not be parsed"], + ["hwb(90deg, 50%, 50%, 0.2)", "HWB value with commas should not be parsed"], + ["hwb(90, 50%, 50%)", "HWB value with commas should not be parsed"], + ["hwb(90, 50%, 50%, 0.2)", "HWB value with commas should not be parsed"], +]; + +for (const test of tests) { + test_invalid_value("color", test[0]); +} +</script> +</body> +</html> diff --git a/testing/web-platform/tests/css/css-color/parsing/color-invalid-lab.html b/testing/web-platform/tests/css/css-color/parsing/color-invalid-lab.html new file mode 100644 index 0000000000..36b93c6c5c --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/color-invalid-lab.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 4: Parsing and serialization of colors using invalid Lab notation</title> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#lab-colors"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#resolving-lab-lch-values"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#resolving-oklab-oklch-values"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#serializing-lab-lch"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#serializing-oklab-oklch"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<script> +for (const colorSpace of [ "lab", "oklab" ]) { + test_invalid_value("color", `${colorSpace}(0% 0 0 1)`); + test_invalid_value("color", `${colorSpace}(0% 0 0 10%)`); + test_invalid_value("color", `${colorSpace}(0% 0 0deg)`); + test_invalid_value("color", `${colorSpace}(0% 0% 0deg)`); + test_invalid_value("color", `${colorSpace}(40% 0 0deg)`); + test_invalid_value("color", `color(${colorSpace} 20% 0 10 / 50%)`); +} + +for (const colorSpace of [ "lch", "oklch" ]) { + test_invalid_value("color", `${colorSpace}(20% 10 10deg 10)`); + test_invalid_value("color", `${colorSpace}(20% 10 10deg 10 / 0.5)`); + test_invalid_value("color", `color(${colorSpace} 20% 0 10 / 50%)`); +} +</script> +</body> +</html> diff --git a/testing/web-platform/tests/css/css-color/parsing/color-invalid-named-color.html b/testing/web-platform/tests/css/css-color/parsing/color-invalid-named-color.html new file mode 100644 index 0000000000..8e3f1f2ba7 --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/color-invalid-named-color.html @@ -0,0 +1,209 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 4: Parsing and serialization of colors using invalid named color notation</title> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#named-colors"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#resolving-sRGB-values"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#serializing-sRGB-values"> +<link rel="author" title="Chris Nardi" href="mailto:csnardi1@gmail.com"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<script> +tests = [ + ["", "Should not parse invalid keyword"], + [" /* hey */\n", "Should not parse invalid keyword"], + ["4", "Should not parse invalid keyword"], + ["top", "Should not parse invalid keyword"], + ["current-Color", "Should not parse invalid keyword"], + + ["ransparent", "Partial keywords shouldn't parse"], + ["aiceblue", "Partial keywords shouldn't parse"], + ["aniquewhite", "Partial keywords shouldn't parse"], + ["aqu", "Partial keywords shouldn't parse"], + ["aquaarine", "Partial keywords shouldn't parse"], + ["zure", "Partial keywords shouldn't parse"], + ["bige", "Partial keywords shouldn't parse"], + ["bsque", "Partial keywords shouldn't parse"], + ["blak", "Partial keywords shouldn't parse"], + ["blacK", "Unicode modification shouldn't parse"], + ["blanchedamond", "Partial keywords shouldn't parse"], + ["ble", "Partial keywords shouldn't parse"], + ["bueviolet", "Partial keywords shouldn't parse"], + ["brwn", "Partial keywords shouldn't parse"], + ["burlwood", "Partial keywords shouldn't parse"], + ["cadetlue", "Partial keywords shouldn't parse"], + ["charteuse", "Partial keywords shouldn't parse"], + ["chocolae", "Partial keywords shouldn't parse"], + ["coal", "Partial keywords shouldn't parse"], + ["cornlowerblue", "Partial keywords shouldn't parse"], + ["corsilk", "Partial keywords shouldn't parse"], + ["cornsilK", "Unicode modification shouldn't parse"], + ["crimso", "Partial keywords shouldn't parse"], + ["can", "Partial keywords shouldn't parse"], + ["darkble", "Partial keywords shouldn't parse"], + ["darKblue", "Unicode modification shouldn't parse"], + ["darkcya", "Partial keywords shouldn't parse"], + ["darKcyan", "Unicode modification shouldn't parse"], + ["darkgoldenrd", "Partial keywords shouldn't parse"], + ["darKgoldenrod", "Unicode modification shouldn't parse"], + ["drkgray", "Partial keywords shouldn't parse"], + ["darKgray", "Unicode modification shouldn't parse"], + ["darkgree", "Partial keywords shouldn't parse"], + ["darKgreen", "Unicode modification shouldn't parse"], + ["dargrey", "Partial keywords shouldn't parse"], + ["darKgrey", "Unicode modification shouldn't parse"], + ["drkkhaki", "Partial keywords shouldn't parse"], + ["darKkhaki", "Unicode modification shouldn't parse"], + ["darkmagnta", "Partial keywords shouldn't parse"], + ["darKmagenta", "Unicode modification shouldn't parse"], + ["dakolivegreen", "Partial keywords shouldn't parse"], + ["darKolivegreen", "Unicode modification shouldn't parse"], + ["drkorange", "Partial keywords shouldn't parse"], + ["darKorange", "Unicode modification shouldn't parse"], + ["dakorchid", "Partial keywords shouldn't parse"], + ["darKorchid", "Unicode modification shouldn't parse"], + ["darkrd", "Partial keywords shouldn't parse"], + ["darKred", "Unicode modification shouldn't parse"], + ["darkalmon", "Partial keywords shouldn't parse"], + ["darKsalmon", "Unicode modification shouldn't parse"], + ["darkseagree", "Partial keywords shouldn't parse"], + ["darKseagreen", "Unicode modification shouldn't parse"], + ["darkslatebue", "Partial keywords shouldn't parse"], + ["darKslateblue", "Unicode modification shouldn't parse"], + ["darkslategry", "Partial keywords shouldn't parse"], + ["darKslategray", "Unicode modification shouldn't parse"], + ["darkslategre", "Partial keywords shouldn't parse"], + ["darKslategrey", "Unicode modification shouldn't parse"], + ["arkturquoise", "Partial keywords shouldn't parse"], + ["darKturquoise", "Unicode modification shouldn't parse"], + ["arkviolet", "Partial keywords shouldn't parse"], + ["darKviolet", "Unicode modification shouldn't parse"], + ["deppink", "Partial keywords shouldn't parse"], + ["deeppinK", "Unicode modification shouldn't parse"], + ["deepskyble", "Partial keywords shouldn't parse"], + ["deepsKyblue", "Unicode modification shouldn't parse"], + ["dmgray", "Partial keywords shouldn't parse"], + ["digrey", "Partial keywords shouldn't parse"], + ["dodgeblue", "Partial keywords shouldn't parse"], + ["frebrick", "Partial keywords shouldn't parse"], + ["firebricK", "Unicode modification shouldn't parse"], + ["floalwhite", "Partial keywords shouldn't parse"], + ["foretgreen", "Partial keywords shouldn't parse"], + ["uchsia", "Partial keywords shouldn't parse"], + ["gainsoro", "Partial keywords shouldn't parse"], + ["gostwhite", "Partial keywords shouldn't parse"], + ["old", "Partial keywords shouldn't parse"], + ["goldenro", "Partial keywords shouldn't parse"], + ["gry", "Partial keywords shouldn't parse"], + ["reen", "Partial keywords shouldn't parse"], + ["geenyellow", "Partial keywords shouldn't parse"], + ["gey", "Partial keywords shouldn't parse"], + ["hoeydew", "Partial keywords shouldn't parse"], + ["hotink", "Partial keywords shouldn't parse"], + ["hotpinK", "Unicode modification shouldn't parse"], + ["indianed", "Partial keywords shouldn't parse"], + ["idigo", "Partial keywords shouldn't parse"], + ["ivry", "Partial keywords shouldn't parse"], + ["khai", "Partial keywords shouldn't parse"], + ["Khaki", "Unicode modification shouldn't parse"], + ["avender", "Partial keywords shouldn't parse"], + ["avenderblush", "Partial keywords shouldn't parse"], + ["lawgreen", "Partial keywords shouldn't parse"], + ["lemonchffon", "Partial keywords shouldn't parse"], + ["lightlue", "Partial keywords shouldn't parse"], + ["lightcora", "Partial keywords shouldn't parse"], + ["lightcyn", "Partial keywords shouldn't parse"], + ["lightgoldenodyellow", "Partial keywords shouldn't parse"], + ["ightgray", "Partial keywords shouldn't parse"], + ["ligtgreen", "Partial keywords shouldn't parse"], + ["lihtgrey", "Partial keywords shouldn't parse"], + ["ligtpink", "Partial keywords shouldn't parse"], + ["lightpinK", "Unicode modification shouldn't parse"], + ["lightsalmo", "Partial keywords shouldn't parse"], + ["lightseagree", "Partial keywords shouldn't parse"], + ["lightsyblue", "Partial keywords shouldn't parse"], + ["lightsKyblue", "Unicode modification shouldn't parse"], + ["lightslatgray", "Partial keywords shouldn't parse"], + ["lightslaterey", "Partial keywords shouldn't parse"], + ["lightsteelbue", "Partial keywords shouldn't parse"], + ["lightellow", "Partial keywords shouldn't parse"], + ["lim", "Partial keywords shouldn't parse"], + ["limgreen", "Partial keywords shouldn't parse"], + ["inen", "Partial keywords shouldn't parse"], + ["maenta", "Partial keywords shouldn't parse"], + ["maron", "Partial keywords shouldn't parse"], + ["mediumaqamarine", "Partial keywords shouldn't parse"], + ["mediumblu", "Partial keywords shouldn't parse"], + ["mediumrchid", "Partial keywords shouldn't parse"], + ["mediumprple", "Partial keywords shouldn't parse"], + ["mediumsegreen", "Partial keywords shouldn't parse"], + ["medumslateblue", "Partial keywords shouldn't parse"], + ["mediumsprnggreen", "Partial keywords shouldn't parse"], + ["mediuturquoise", "Partial keywords shouldn't parse"], + ["mediumioletred", "Partial keywords shouldn't parse"], + ["mdnightblue", "Partial keywords shouldn't parse"], + ["mintcrea", "Partial keywords shouldn't parse"], + ["istyrose", "Partial keywords shouldn't parse"], + ["moccsin", "Partial keywords shouldn't parse"], + ["naajowhite", "Partial keywords shouldn't parse"], + ["nay", "Partial keywords shouldn't parse"], + ["oldlae", "Partial keywords shouldn't parse"], + ["oliv", "Partial keywords shouldn't parse"], + ["olivedab", "Partial keywords shouldn't parse"], + ["orane", "Partial keywords shouldn't parse"], + ["orangere", "Partial keywords shouldn't parse"], + ["rchid", "Partial keywords shouldn't parse"], + ["palegldenrod", "Partial keywords shouldn't parse"], + ["paegreen", "Partial keywords shouldn't parse"], + ["paleturuoise", "Partial keywords shouldn't parse"], + ["palevioltred", "Partial keywords shouldn't parse"], + ["papyawhip", "Partial keywords shouldn't parse"], + ["peachpff", "Partial keywords shouldn't parse"], + ["per", "Partial keywords shouldn't parse"], + ["ink", "Partial keywords shouldn't parse"], + ["pinK", "Unicode modification shouldn't parse"], + ["pum", "Partial keywords shouldn't parse"], + ["powderble", "Partial keywords shouldn't parse"], + ["purpl", "Partial keywords shouldn't parse"], + ["ed", "Partial keywords shouldn't parse"], + ["rosyrown", "Partial keywords shouldn't parse"], + ["royallue", "Partial keywords shouldn't parse"], + ["sadlebrown", "Partial keywords shouldn't parse"], + ["salmn", "Partial keywords shouldn't parse"], + ["sandyrown", "Partial keywords shouldn't parse"], + ["seagren", "Partial keywords shouldn't parse"], + ["seashel", "Partial keywords shouldn't parse"], + ["sinna", "Partial keywords shouldn't parse"], + ["siler", "Partial keywords shouldn't parse"], + ["skybue", "Partial keywords shouldn't parse"], + ["sKyblue", "Unicode modification shouldn't parse"], + ["slatelue", "Partial keywords shouldn't parse"], + ["slategay", "Partial keywords shouldn't parse"], + ["slategry", "Partial keywords shouldn't parse"], + ["snw", "Partial keywords shouldn't parse"], + ["sprnggreen", "Partial keywords shouldn't parse"], + ["seelblue", "Partial keywords shouldn't parse"], + ["ta", "Partial keywords shouldn't parse"], + ["tel", "Partial keywords shouldn't parse"], + ["thistl", "Partial keywords shouldn't parse"], + ["toato", "Partial keywords shouldn't parse"], + ["turquose", "Partial keywords shouldn't parse"], + ["violt", "Partial keywords shouldn't parse"], + ["whet", "Partial keywords shouldn't parse"], + ["whit", "Partial keywords shouldn't parse"], + ["whitemoke", "Partial keywords shouldn't parse"], + ["whitesmoKe", "Unicode modification shouldn't parse"], + ["yelow", "Partial keywords shouldn't parse"], + ["yellwgreen", "Partial keywords shouldn't parse"], +]; + +for (const test of tests) { + test_invalid_value("color", test[0]); +} +</script> +</body> +</html> diff --git a/testing/web-platform/tests/css/css-color/parsing/color-invalid-relative-color.html b/testing/web-platform/tests/css/css-color/parsing/color-invalid-relative-color.html new file mode 100644 index 0000000000..2cb3a25291 --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/color-invalid-relative-color.html @@ -0,0 +1,145 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 5: Parsing and serialization of colors using invalid relative color syntax</title> +<link rel="author" title="Sam Weinig" href="mailto:weinig@apple.com"> +<link rel="help" href="https://drafts.csswg.org/css-color-5/#relative-colors"> +<link rel="help" href="https://drafts.csswg.org/css-color-5/#serial-relative-color"> +<meta name="assert" content="invalid colors using relative color syntax fail to parse"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<script> + // rgb(from ...) + + // Testing invalid values + test_invalid_value(`color`, `rgb(from rebeccapurple r 10deg 10)`); + test_invalid_value(`color`, `rgb(from rebeccapurple r 10 10deg)`); + test_invalid_value(`color`, `rgb(from rebeccapurple 10deg g b)`); + test_invalid_value(`color`, `rgb(from rgb(10%, 20%, 30%, 40%) r 10deg 10)`); + test_invalid_value(`color`, `rgb(from rgb(10%, 20%, 30%, 40%) r 10 10deg)`); + test_invalid_value(`color`, `rgb(from rgb(10%, 20%, 30%, 40%) 10deg g b)`); + + // Testing invalid component names + test_invalid_value(`color`, `rgb(from rebeccapurple red g b)`); + test_invalid_value(`color`, `rgb(from rebeccapurple l g b)`); + test_invalid_value(`color`, `rgb(from rebeccapurple h g b)`); + + // Testing invalid function name variation (only rgb() is valid, rgba() is invalid) + test_invalid_value(`color`, `rgba(from rebeccapurple r g b)`); + test_invalid_value(`color`, `rgba(from rgb(10%, 20%, 30%, 40%) r g b / alpha)`); + + // Testing with calc(). + test_invalid_value(`color`, `rgb(from rebeccapurple calc(r + 1%) g b)`); + + + // hsl(from ...) + + // Testing invalid values. + test_invalid_value(`color`, `hsl(from rebeccapurple 10% s l)`); + test_invalid_value(`color`, `hsl(from rgb(10%, 20%, 30%, 40%) 10% s l)`); + + // Testing invalid component names + test_invalid_value(`color`, `hsl(from rebeccapurple hue s l)`); + test_invalid_value(`color`, `hsl(from rebeccapurple x s l)`); + test_invalid_value(`color`, `hsl(from rebeccapurple h g b)`); + + // Testing invalid function name variation (only hsl() is valid, hsla() is invalid) + test_invalid_value(`color`, `hsla(from rebeccapurple h s l)`); + test_invalid_value(`color`, `hsla(from rgb(10%, 20%, 30%, 40%) h s l / alpha)`); + + // Testing with calc(). + test_invalid_value(`color`, `hsl(from rebeccapurple calc(h + 1deg) s l)`); + test_invalid_value(`color`, `hsl(from rebeccapurple calc(h + 1%) s l)`); + + // hwb(from ...) + + // Testing invalid values. + test_invalid_value(`color`, `hwb(from rebeccapurple 10% w b)`); + test_invalid_value(`color`, `hwb(from rgb(10%, 20%, 30%, 40%) 10% w b)`); + + // Testing invalid component names + test_invalid_value(`color`, `hwb(from rebeccapurple hue w b)`); + test_invalid_value(`color`, `hwb(from rebeccapurple x w b)`); + test_invalid_value(`color`, `hwb(from rebeccapurple h g b)`); + + // Testing with calc(). + test_invalid_value(`color`, `hwb(from rebeccapurple calc(h + 1deg) w b)`); + test_invalid_value(`color`, `hwb(from rebeccapurple calc(h + 1%) w b)`); + + for (const colorSpace of [ "lab", "oklab" ]) { + // Testing invalid values. + test_invalid_value(`color`, `${colorSpace}(from ${colorSpace}(.25 20 50) l 10deg 10)`); + test_invalid_value(`color`, `${colorSpace}(from ${colorSpace}(.25 20 50) l 10 10deg)`); + test_invalid_value(`color`, `${colorSpace}(from ${colorSpace}(.25 20 50) 10deg a b)`); + test_invalid_value(`color`, `${colorSpace}(from ${colorSpace}(.25 20 50 / 40%) l 10deg 10)`); + test_invalid_value(`color`, `${colorSpace}(from ${colorSpace}(.25 20 50 / 40%) l 10 10deg)`); + test_invalid_value(`color`, `${colorSpace}(from ${colorSpace}(.25 20 50 / 40%) 10deg a b)`); + + // Testing invalid component names + test_invalid_value(`color`, `${colorSpace}(from ${colorSpace}(.25 20 50) lightness a b)`); + test_invalid_value(`color`, `${colorSpace}(from ${colorSpace}(.25 20 50) x a b)`); + test_invalid_value(`color`, `${colorSpace}(from ${colorSpace}(.25 20 50) h g b)`); + + // Testing with calc(). + test_invalid_value(`color`, `${colorSpace}(from ${colorSpace}(.25 20 50) l calc(a + 1%) b)`); + } + + for (const colorSpace of [ "lch", "oklch" ]) { + // Testing invalid values. + test_invalid_value(`color`, `${colorSpace}(from ${colorSpace}(.70 45 30) l 10deg h)`); + test_invalid_value(`color`, `${colorSpace}(from ${colorSpace}(.70 45 30) l c 10%)`); + test_invalid_value(`color`, `${colorSpace}(from ${colorSpace}(.70 45 30) 10deg c h)`); + test_invalid_value(`color`, `${colorSpace}(from ${colorSpace}(.70 45 30 / 40%) l 10deg h)`); + test_invalid_value(`color`, `${colorSpace}(from ${colorSpace}(.70 45 30 / 40%) l c 10%)`); + test_invalid_value(`color`, `${colorSpace}(from ${colorSpace}(.70 45 30 / 40%) 10deg c h)`); + + // Testing invalid component names + test_invalid_value(`color`, `${colorSpace}(from ${colorSpace}(.70 45 30) lightness c h)`); + test_invalid_value(`color`, `${colorSpace}(from ${colorSpace}(.70 45 30) x c h)`); + test_invalid_value(`color`, `${colorSpace}(from ${colorSpace}(.70 45 30) l g b)`); + + // Testing with calc(). + test_invalid_value(`color`, `${colorSpace}(from ${colorSpace}(.70 45 30) l c calc(h + 1%))`); + test_invalid_value(`color`, `${colorSpace}(from ${colorSpace}(.70 45 30) l c calc(h + 1deg))`); + } + + for (const colorSpace of [ "srgb", "srgb-linear", "a98-rgb", "rec2020", "prophoto-rgb", "display-p3" ]) { + // Testing invalid values. + test_invalid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 10deg g b)`); + test_invalid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r 10deg b)`); + test_invalid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g 10deg)`); + test_invalid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b / 10deg)`); + + // Testing invalid component names + test_invalid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} red g b)`); + test_invalid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} x g b)`); + test_invalid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} l g b)`); + test_invalid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} x y z)`); + + // Testing with calc(). + test_invalid_value(`color`, `color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} calc(r + 1%) g b)`); + } + + for (const colorSpace of [ "xyz", "xyz-d50", "xyz-d65" ]) { + // Testing invalid values. + test_invalid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} 10deg y z)`); + test_invalid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x 10deg z)`); + test_invalid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y 10deg)`); + test_invalid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z / 10deg)`); + + // Testing invalid component names + test_invalid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} red y)`); + test_invalid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} r y z)`); + test_invalid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} l y z)`); + test_invalid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} r g b)`); + + // Testing with calc(). + test_invalid_value(`color`, `color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} calc(x + 1%) y z)`); + } +</script> +</body> +</html> diff --git a/testing/web-platform/tests/css/css-color/parsing/color-invalid-rgb.html b/testing/web-platform/tests/css/css-color/parsing/color-invalid-rgb.html new file mode 100644 index 0000000000..90dd082f2a --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/color-invalid-rgb.html @@ -0,0 +1,51 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 4: Parsing and serialization of colors using invalid RGB notation</title> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#rgb-functions"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#resolving-sRGB-values"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#serializing-sRGB-values"> +<link rel="author" title="Chris Nardi" href="mailto:csnardi1@gmail.com"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<script> +tests = [ + ["rgb(none, none, none)", "The none keyword is invalid in legacy color syntax"], + ["rgba(none, none, none, none)", "The none keyword is invalid in legacy color syntax"], + ["rgb(128, 0, none)", "The none keyword is invalid in legacy color syntax"], + ["rgb(255, 255, 255, none)", "The none keyword is invalid in legacy color syntax"], + + ["rgb(10%, 50%, 0)", "Values must be all numbers or all percentages"], + ["rgb(255, 50%, 0%)", "Values must be all numbers or all percentages"], + ["rgb(0, 0 0)", "Comma optional syntax requires no commas at all"], + ["rgb(0, 0, 0deg)", "Angles are not accepted in the rgb function"], + ["rgb(0, 0, light)", "Keywords are not accepted in the rgb function"], + ["rgb()", "The rgb function requires 3 or 4 arguments"], + ["rgb(0)", "The rgb function requires 3 or 4 arguments"], + ["rgb(0, 0)", "The rgb function requires 3 or 4 arguments"], + ["rgb(0%)", "The rgb function requires 3 or 4 arguments"], + ["rgb(0%, 0%)", "The rgb function requires 3 or 4 arguments"], + ["rgba(10%, 50%, 0, 1)", "Values must be all numbers or all percentages"], + ["rgba(255, 50%, 0%, 1)", "Values must be all numbers or all percentages"], + ["rgba(0, 0, 0 0)", "Comma optional syntax requires no commas at all"], + ["rgba(0, 0, 0, 0deg)", "Angles are not accepted in the rgb function"], + ["rgba(0, 0, 0, light)", "Keywords are not accepted in the rgb function"], + ["rgba()", "The rgba function requires 3 or 4 arguments"], + ["rgba(0)", "The rgba function requires 3 or 4 arguments"], + ["rgba(0, 0, 0, 0, 0)", "The rgba function requires 3 or 4 arguments"], + ["rgba(0%)", "The rgba function requires 3 or 4 arguments"], + ["rgba(0%, 0%)", "The rgba function requires 3 or 4 arguments"], + ["rgba(0%, 0%, 0%, 0%, 0%)", "The rgba function requires 3 or 4 arguments"], + ["rgb(257, 0, 5 / 0)", "Cannot mix legacy and non-legacy formats"], +]; + +for (const test of tests) { + test_invalid_value("color", test[0]); +} +</script> +</body> +</html> diff --git a/testing/web-platform/tests/css/css-color/parsing/color-invalid.html b/testing/web-platform/tests/css/css-color/parsing/color-invalid.html new file mode 100644 index 0000000000..276ab806a6 --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/color-invalid.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 3: parsing color with invalid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://www.w3.org/TR/css-color-3/#foreground"> +<meta name="assert" content="color supports only the '<color>' grammar defined in CSS Color Level 3."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_invalid_value("color", "auto"); +test_invalid_value("color", "123"); +test_invalid_value("color", "#12"); +test_invalid_value("color", "#123456789"); +test_invalid_value("color", "rgb"); +test_invalid_value("color", "rgb(1)"); +test_invalid_value("color", "rgb(1,2,3,4,5)"); +test_invalid_value("color", "hsla(1,2,3,4,5)"); +test_invalid_value("color", "rgb(10%, 20, 30%)"); +test_invalid_value("color", "rgba(-2, 300, 400%, -0.5)"); +</script> +</body> +</html> diff --git a/testing/web-platform/tests/css/css-color/parsing/color-mix-out-of-gamut.html b/testing/web-platform/tests/css/css-color/parsing/color-mix-out-of-gamut.html new file mode 100644 index 0000000000..d3e8a3560d --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/color-mix-out-of-gamut.html @@ -0,0 +1,41 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 4: Computation of colors using color-mix() function syntax that result in out-of-gamut sRGB colors</title> +<link rel="author" title="Sam Weinig" href="mailto:weinig@apple.com"> +<link rel="author" title="Aaron Krajeski" href="mailto:aaronhk@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-color-5/#color-mix"> +<link rel="help" href="https://drafts.csswg.org/css-color-5/#resolving-mix"> +<link rel="help" href="https://drafts.csswg.org/css-color-5/#serial-color-mix"> +<meta name="assert" content="gamut mapping works for computed value of color-mix()"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/computed-testcommon.js"></script> +<script src="/css/support/color-testcommon.js"></script> +</head> +<body> +<div id="target"></div> +<script> + fuzzy_test_computed_color(`color-mix(in hsl, color(display-p3 0 1 0) 100%, rgb(0, 0, 0) 0%)`, `color(srgb -0.511814 1.01832 -0.310726)`); + fuzzy_test_computed_color(`color-mix(in hsl, lab(100 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 1.59343 0.58802 1.40564)`); + fuzzy_test_computed_color(`color-mix(in hsl, lab(0 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 0.351376 -0.213938 0.299501)`); + fuzzy_test_computed_color(`color-mix(in hsl, lch(100 116 334) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 1.59328 0.588284 1.40527)`); + fuzzy_test_computed_color(`color-mix(in hsl, lch(0 116 334) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 0.351307 -0.213865 0.299236)`); + fuzzy_test_computed_color(`color-mix(in hsl, oklab(1 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 1.59295 0.360371 1.38571)`); + fuzzy_test_computed_color(`color-mix(in hsl, oklab(0 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 0.0763893 -0.0456266 0.0932598)`); + fuzzy_test_computed_color(`color-mix(in hsl, oklch(1 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 1.59328 0.358734 1.38664)`); + fuzzy_test_computed_color(`color-mix(in hsl, oklch(0 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 0.076536 -0.045825 0.0937443)`); + + fuzzy_test_computed_color(`color-mix(in hwb, color(display-p3 0 1 0) 100%, rgb(0, 0, 0) 0%)`, `color(srgb -0.511814 1.01832 -0.310726)`); + fuzzy_test_computed_color(`color-mix(in hwb, lab(100 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 1.59343 0.58802 1.40564)`); + fuzzy_test_computed_color(`color-mix(in hwb, lab(0 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 0.351376 -0.213938 0.299501)`); + fuzzy_test_computed_color(`color-mix(in hwb, lch(100 116 334) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 1.59328 0.588284 1.40527)`); + fuzzy_test_computed_color(`color-mix(in hwb, lch(0 116 334) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 0.351307 -0.213865 0.299236)`); + fuzzy_test_computed_color(`color-mix(in hwb, oklab(1 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 1.59295 0.360371 1.38571)`); + fuzzy_test_computed_color(`color-mix(in hwb, oklab(0 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 0.0763893 -0.0456266 0.0932598)`); + fuzzy_test_computed_color(`color-mix(in hwb, oklch(1 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 1.59328 0.358736 1.38664)`); + fuzzy_test_computed_color(`color-mix(in hwb, oklch(0 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`, `color(srgb 0.0765361 -0.045825 0.0937443)`); +</script> +</body> +</html> diff --git a/testing/web-platform/tests/css/css-color/parsing/color-valid-color-contrast-function.html b/testing/web-platform/tests/css/css-color/parsing/color-valid-color-contrast-function.html new file mode 100644 index 0000000000..bdb8f0f588 --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/color-valid-color-contrast-function.html @@ -0,0 +1,50 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 6: Parsing and serialization of colors using valid color-contrast() function syntax</title> +<link rel="author" title="Sam Weinig" href="mailto:weinig@apple.com"> +<link rel="help" href="https://drafts.csswg.org/css-color-6/#colorcontrast"> +<link rel="help" href="https://drafts.csswg.org/css-color-6/#resolving-contrast"> +<link rel="help" href="https://drafts.csswg.org/css-color-6/#serial-color-contrast"> +<meta name="assert" content="color-contrast() parses and serializes"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<script> + // Test with no specified target contrast + test_valid_value(`color`, `color-contrast(white vs red, blue)`, `rgb(0, 0, 255)`); + test_valid_value(`color`, `color-contrast(white vs blue, red)`, `rgb(0, 0, 255)`); + test_valid_value(`color`, `color-contrast(white vs red, blue, green)`, `rgb(0, 0, 255)`); + test_valid_value(`color`, `color-contrast(white vs white, white)`, `rgb(255, 255, 255)`); + test_valid_value(`color`, `color-contrast(blue vs red, white)`, `rgb(255, 255, 255)`); + test_valid_value(`color`, `color-contrast(red vs blue, white, red)`, `rgb(255, 255, 255)`); + test_valid_value(`color`, `color-contrast(black vs red, blue)`, `rgb(255, 0, 0)`); + test_valid_value(`color`, `color-contrast(black vs blue, red)`, `rgb(255, 0, 0)`); + test_valid_value(`color`, `color-contrast(black vs white, white)`, `rgb(255, 255, 255)`); + test_valid_value(`color`, `color-contrast(red vs blue, rgb(255, 255, 255, .5))`, `rgba(255, 255, 255, 0.5)`); + + // Test with specified target contrast. + test_valid_value(`color`, `color-contrast(wheat vs bisque, darkgoldenrod, olive, sienna, darkgreen, maroon to AA)`, `rgb(0, 100, 0)`); // darkgreen + test_valid_value(`color`, `color-contrast(wheat vs bisque, darkgoldenrod, olive, sienna, darkgreen, maroon to AA-large)`, `rgb(128, 128, 0)`); // olive + test_valid_value(`color`, `color-contrast(wheat vs bisque, darkgoldenrod, olive, sienna, darkgreen, maroon to AAA)`, `rgb(128, 0, 0)`); // maroon + test_valid_value(`color`, `color-contrast(wheat vs bisque, darkgoldenrod, olive, sienna, darkgreen, maroon to AAA-large)`, `rgb(0, 100, 0)`); // darkgreen + test_valid_value(`color`, `color-contrast(wheat vs bisque, darkgoldenrod, olive, sienna, darkgreen, maroon to 5.8)`, `rgb(128, 0, 0)`); // maroon + + // Test with specified target contrast that none meet. + test_valid_value(`color`, `color-contrast(wheat vs bisque, darkgoldenrod, olive to 100)`, `rgb(0, 0, 0)`); // black + test_valid_value(`color`, `color-contrast(green vs bisque, darkgoldenrod, olive to 100)`, `rgb(255, 255, 255)`); // white + + // Test non-sRGB colors. + test_valid_value(`color`, `color-contrast(green vs color(display-p3 0 1 0), color(display-p3 0 0 1))`, `color(display-p3 0 1 0)`); + test_valid_value(`color`, `color-contrast(color(display-p3 1 1 0) vs color(display-p3 0 1 0), color(display-p3 0 0 1))`, `color(display-p3 0 0 1)`); + test_valid_value(`color`, `color-contrast(green vs lab(50% -160 160), lch(0.2 50 20deg))`, `lch(0.2 50 20)`); + test_valid_value(`color`, `color-contrast(lab(50% -160 160) vs green, lch(0.2 50 20deg))`, `lch(0.2 50 20)`); + + // Test with extra whitespace + test_valid_value(`color`, `color-contrast( white vs red, blue )`, `rgb(0, 0, 255)`); +</script> +</body> +</html> diff --git a/testing/web-platform/tests/css/css-color/parsing/color-valid-color-function.html b/testing/web-platform/tests/css/css-color/parsing/color-valid-color-function.html new file mode 100644 index 0000000000..2a7750539c --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/color-valid-color-function.html @@ -0,0 +1,83 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 4: Parsing and serialization of colors using valid color() function syntax</title> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#color-function"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#resolving-color-function-values"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#serializing-color-function-values"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<script> +for (const colorSpace of [ "srgb", "srgb-linear", "a98-rgb", "rec2020", "prophoto-rgb", "display-p3" ]) { + test_valid_value("color", `color(${colorSpace} 0% 0% 0%)`, `color(${colorSpace} 0 0 0)`); + test_valid_value("color", `color(${colorSpace} 10% 10% 10%)`, `color(${colorSpace} 0.1 0.1 0.1)`); + test_valid_value("color", `color(${colorSpace} .2 .2 25%)`, `color(${colorSpace} 0.2 0.2 0.25)`); + test_valid_value("color", `color(${colorSpace} 0 0 0 / 1)`, `color(${colorSpace} 0 0 0)`); + test_valid_value("color", `color(${colorSpace} 0% 0 0 / 0.5)`, `color(${colorSpace} 0 0 0 / 0.5)`); + test_valid_value("color", `color(${colorSpace} 20% 0 10/0.5)`, `color(${colorSpace} 0.2 0 10 / 0.5)`); + test_valid_value("color", `color(${colorSpace} 20% 0 10/50%)`, `color(${colorSpace} 0.2 0 10 / 0.5)`); + test_valid_value("color", `color(${colorSpace} 400% 0 10/50%)`, `color(${colorSpace} 4 0 10 / 0.5)`); + test_valid_value("color", `color(${colorSpace} 50% -160 160)`, `color(${colorSpace} 0.5 -160 160)`); + test_valid_value("color", `color(${colorSpace} 50% -200 200)`, `color(${colorSpace} 0.5 -200 200)`); + test_valid_value("color", `color(${colorSpace} 0 0 0 / -10%)`, `color(${colorSpace} 0 0 0 / 0)`); + test_valid_value("color", `color(${colorSpace} 0 0 0 / 110%)`, `color(${colorSpace} 0 0 0)`); + test_valid_value("color", `color(${colorSpace} 0 0 0 / 300%)`, `color(${colorSpace} 0 0 0)`); + test_valid_value("color", `color(${colorSpace} 200 200 200)`, `color(${colorSpace} 200 200 200)`); + test_valid_value("color", `color(${colorSpace} 200 200 200 / 200)`, `color(${colorSpace} 200 200 200)`); + test_valid_value("color", `color(${colorSpace} -200 -200 -200)`, `color(${colorSpace} -200 -200 -200)`); + test_valid_value("color", `color(${colorSpace} -200 -200 -200 / -200)`, `color(${colorSpace} -200 -200 -200 / 0)`); + test_valid_value("color", `color(${colorSpace} 200% 200% 200%)`, `color(${colorSpace} 2 2 2)`); + test_valid_value("color", `color(${colorSpace} 200% 200% 200% / 200%)`, `color(${colorSpace} 2 2 2)`); + test_valid_value("color", `color(${colorSpace} -200% -200% -200% / -200%)`, `color(${colorSpace} -2 -2 -2 / 0)`); + test_valid_value("color", `color(${colorSpace} calc(0.5 + 1) calc(0.5 - 1) calc(0.5) / calc(-0.5 + 1))`, `color(${colorSpace} 1.5 -0.5 0.5 / 0.5)`); + test_valid_value("color", `color(${colorSpace} calc(50% * 3) calc(-150% / 3) calc(50%) / calc(-50% * 3))`, `color(${colorSpace} 1.5 -0.5 0.5 / 0)`); + + test_valid_value("color", `color(${colorSpace} none none none / none)`, `color(${colorSpace} none none none / none)`); + test_valid_value("color", `color(${colorSpace} none none none)`, `color(${colorSpace} none none none)`); + test_valid_value("color", `color(${colorSpace} 10% none none / none)`, `color(${colorSpace} 0.1 none none / none)`); + test_valid_value("color", `color(${colorSpace} none none none / 0.5)`, `color(${colorSpace} none none none / 0.5)`); + test_valid_value("color", `color(${colorSpace} 0 0 0 / none)`, `color(${colorSpace} 0 0 0 / none)`); + + test_valid_value("color", `color(${colorSpace} 0 calc(infinity) 0)`, `color(${colorSpace} 0 calc(infinity) 0)`); + test_valid_value("color", `color(${colorSpace} 0 calc(-infinity) 0)`, `color(${colorSpace} 0 calc(-infinity) 0)`); + test_valid_value("color", `color(${colorSpace} calc(NaN) 0 0)`, `color(${colorSpace} calc(NaN) 0 0)`); + test_valid_value("color", `color(${colorSpace} calc(0 / 0) 0 0)`, `color(${colorSpace} calc(NaN) 0 0)`); +} + +for (const colorSpace of [ "xyz", "xyz-d50", "xyz-d65" ]) { + const resultColorSpace = colorSpace == "xyz" ? "xyz-d65" : colorSpace; + + test_valid_value("color", `color(${colorSpace} 0 0 0)`, `color(${resultColorSpace} 0 0 0)`); + test_valid_value("color", `color(${colorSpace} 0 0 0 / 1)`, `color(${resultColorSpace} 0 0 0)`); + test_valid_value("color", `color(${colorSpace} 1 1 1)`, `color(${resultColorSpace} 1 1 1)`); + test_valid_value("color", `color(${colorSpace} 1 1 1 / 1)`, `color(${resultColorSpace} 1 1 1)`); + test_valid_value("color", `color(${colorSpace} -1 -1 -1)`, `color(${resultColorSpace} -1 -1 -1)`); + test_valid_value("color", `color(${colorSpace} 0.1 0.1 0.1)`, `color(${resultColorSpace} 0.1 0.1 0.1)`); + test_valid_value("color", `color(${colorSpace} 10 10 10)`, `color(${resultColorSpace} 10 10 10)`); + test_valid_value("color", `color(${colorSpace} .2 .2 .25)`, `color(${resultColorSpace} 0.2 0.2 0.25)`); + test_valid_value("color", `color(${colorSpace} 0 0 0 / 0.5)`, `color(${resultColorSpace} 0 0 0 / 0.5)`); + test_valid_value("color", `color(${colorSpace} .20 0 10/0.5)`, `color(${resultColorSpace} 0.2 0 10 / 0.5)`); + test_valid_value("color", `color(${colorSpace} .20 0 10/50%)`, `color(${resultColorSpace} 0.2 0 10 / 0.5)`); + test_valid_value("color", `color(${colorSpace} 0 0 0 / -10%)`, `color(${resultColorSpace} 0 0 0 / 0)`); + test_valid_value("color", `color(${colorSpace} 0 0 0 / 110%)`, `color(${resultColorSpace} 0 0 0)`); + test_valid_value("color", `color(${colorSpace} 0 0 0 / 300%)`, `color(${resultColorSpace} 0 0 0)`); + test_valid_value("color", `color(${colorSpace} calc(0.5 + 1) calc(0.5 - 1) calc(0.5) / calc(-0.5 + 1))`, `color(${resultColorSpace} 1.5 -0.5 0.5 / 0.5)`); + + test_valid_value("color", `color(${colorSpace} none none none / none)`, `color(${resultColorSpace} none none none / none)`); + test_valid_value("color", `color(${colorSpace} none none none)`, `color(${resultColorSpace} none none none)`); + test_valid_value("color", `color(${colorSpace} 0.2 none none / none)`, `color(${resultColorSpace} 0.2 none none / none)`); + test_valid_value("color", `color(${colorSpace} none none none / 0.5)`, `color(${resultColorSpace} none none none / 0.5)`); + test_valid_value("color", `color(${colorSpace} 0 0 0 / none)`, `color(${resultColorSpace} 0 0 0 / none)`); + + test_valid_value("color", `color(${colorSpace} 0 calc(infinity) 0)`, `color(${resultColorSpace} 0 calc(infinity) 0)`); + test_valid_value("color", `color(${colorSpace} 0 calc(-infinity) 0)`, `color(${resultColorSpace} 0 calc(-infinity) 0)`); + test_valid_value("color", `color(${colorSpace} calc(NaN) 0 0)`, `color(${resultColorSpace} calc(NaN) 0 0)`); + test_valid_value("color", `color(${colorSpace} calc(0 / 0) 0 0)`, `color(${resultColorSpace} calc(NaN) 0 0)`); +} +</script> +</body> +</html> diff --git a/testing/web-platform/tests/css/css-color/parsing/color-valid-color-mix-function.html b/testing/web-platform/tests/css/css-color/parsing/color-valid-color-mix-function.html new file mode 100644 index 0000000000..f11ecc8e47 --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/color-valid-color-mix-function.html @@ -0,0 +1,420 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 5: Parsing and serialization of colors using valid color-mix() function syntax</title> +<link rel="author" title="Sam Weinig" href="mailto:weinig@apple.com"> +<link rel="help" href="https://drafts.csswg.org/css-color-5/#color-mix"> +<link rel="help" href="https://drafts.csswg.org/css-color-5/#resolving-mix"> +<link rel="help" href="https://drafts.csswg.org/css-color-5/#serial-color-mix"> +<meta name="assert" content="color-mix() parses and serializes for all color interpolation methods"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<div id="target"></div> +<script> + // https://github.com/w3c/csswg-drafts/issues/7302: Specified values shouldn't resolve keyword colors or calc values + test_valid_value(`color`, `color-mix(in srgb, red, blue)`, `color-mix(in srgb, red, blue)`); + test_valid_value(`color`, `color-mix(in srgb, 70% red, 50% blue)`, `color-mix(in srgb, red 70%, blue 50%)`); + test_valid_value(`color`, `color-mix(in hsl, red, blue)`, `color-mix(in hsl, red, blue)`); + test_valid_value(`color`, `color-mix(in hsl, red calc(20%), blue)`, `color-mix(in hsl, red calc(20%), blue)`); + test_valid_value(`color`, `color-mix(in hsl, red calc(var(--v)*1%), blue)`, `color-mix(in hsl, red calc(var(--v)*1%), blue)`); + test_valid_value(`color`, `color-mix(in hsl, currentcolor, blue)`, `color-mix(in hsl, currentcolor, blue)`); + test_valid_value(`color`, `color-mix(in hsl, red 60%, blue 40%)`, `color-mix(in hsl, red 60%, blue)`); + test_valid_value(`color`, `color-mix(in hsl, red 50%, blue)`, `color-mix(in hsl, red, blue)`); + test_valid_value(`color`, `color-mix(in hsl, red, blue 50%)`, `color-mix(in hsl, red, blue)`); + test_valid_value(`color`, `color-mix(in lch decreasing hue, red, hsl(120, 100%, 50%))`, `color-mix(in lch decreasing hue, red, rgb(0, 255, 0))`); + + test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%), hsl(30deg 30% 40%))`, `color-mix(in hsl, rgb(46, 56, 46), rgb(133, 102, 71))`); + test_valid_value(`color`, `color-mix(in hsl, 50% hsl(120deg 10% 20%), hsl(30deg 30% 40%))`, `color-mix(in hsl, rgb(46, 56, 46), rgb(133, 102, 71))`); + test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%), 50% hsl(30deg 30% 40%))`, `color-mix(in hsl, rgb(46, 56, 46), rgb(133, 102, 71))`); + test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%) 25%, hsl(30deg 30% 40%))`, `color-mix(in hsl, rgb(46, 56, 46) 25%, rgb(133, 102, 71))`); + test_valid_value(`color`, `color-mix(in hsl, 25% hsl(120deg 10% 20%), hsl(30deg 30% 40%))`, `color-mix(in hsl, rgb(46, 56, 46) 25%, rgb(133, 102, 71))`); + test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%), 25% hsl(30deg 30% 40%))`, `color-mix(in hsl, rgb(46, 56, 46) 75%, rgb(133, 102, 71))`); + test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%), hsl(30deg 30% 40%) 25%)`, `color-mix(in hsl, rgb(46, 56, 46) 75%, rgb(133, 102, 71))`); + test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%) 25%, hsl(30deg 30% 40%) 75%)`, `color-mix(in hsl, rgb(46, 56, 46) 25%, rgb(133, 102, 71))`); + test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%) 30%, hsl(30deg 30% 40%) 90%)`, `color-mix(in hsl, rgb(46, 56, 46) 30%, rgb(133, 102, 71) 90%)`); + test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%) 12.5%, hsl(30deg 30% 40%) 37.5%)`, `color-mix(in hsl, rgb(46, 56, 46) 12.5%, rgb(133, 102, 71) 37.5%)`); + test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%) 0%, hsl(30deg 30% 40%))`, `color-mix(in hsl, rgb(46, 56, 46) 0%, rgb(133, 102, 71))`); + + test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20% / .4), hsl(30deg 30% 40% / .8))`, `color-mix(in hsl, rgba(46, 56, 46, 0.4), rgba(133, 102, 71, 0.8))`); + test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%) 25%, hsl(30deg 30% 40% / .8))`, `color-mix(in hsl, rgb(46, 56, 46) 25%, rgba(133, 102, 71, 0.8))`); + test_valid_value(`color`, `color-mix(in hsl, 25% hsl(120deg 10% 20% / .4), hsl(30deg 30% 40% / .8))`, `color-mix(in hsl, rgba(46, 56, 46, 0.4) 25%, rgba(133, 102, 71, 0.8))`); + test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20% / .4), 25% hsl(30deg 30% 40% / .8))`, `color-mix(in hsl, rgba(46, 56, 46, 0.4) 75%, rgba(133, 102, 71, 0.8))`); + test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20% / .4), hsl(30deg 30% 40% / .8) 25%)`, `color-mix(in hsl, rgba(46, 56, 46, 0.4) 75%, rgba(133, 102, 71, 0.8))`); + test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20% / .4) 25%, hsl(30deg 30% 40% / .8) 75%)`, `color-mix(in hsl, rgba(46, 56, 46, 0.4) 25%, rgba(133, 102, 71, 0.8))`); + test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20% / .4) 30%, hsl(30deg 30% 40% / .8) 90%)`, `color-mix(in hsl, rgba(46, 56, 46, 0.4) 30%, rgba(133, 102, 71, 0.8) 90%)`); + test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20% / .4) 12.5%, hsl(30deg 30% 40% / .8) 37.5%)`, `color-mix(in hsl, rgba(46, 56, 46, 0.4) 12.5%, rgba(133, 102, 71, 0.8) 37.5%)`); + test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20% / .4) 0%, hsl(30deg 30% 40% / .8))`, `color-mix(in hsl, rgba(46, 56, 46, 0.4) 0%, rgba(133, 102, 71, 0.8))`); + + test_valid_value(`color`, `color-mix(in hsl, hsl(40deg 50% 50%), hsl(60deg 50% 50%))`, `color-mix(in hsl, rgb(191, 149, 64), rgb(191, 191, 64))`); + test_valid_value(`color`, `color-mix(in hsl, hsl(60deg 50% 50%), hsl(40deg 50% 50%))`, `color-mix(in hsl, rgb(191, 191, 64), rgb(191, 149, 64))`); + test_valid_value(`color`, `color-mix(in hsl, hsl(50deg 50% 50%), hsl(330deg 50% 50%))`, `color-mix(in hsl, rgb(191, 170, 64), rgb(191, 64, 128))`); + test_valid_value(`color`, `color-mix(in hsl, hsl(330deg 50% 50%), hsl(50deg 50% 50%))`, `color-mix(in hsl, rgb(191, 64, 128), rgb(191, 170, 64))`); + test_valid_value(`color`, `color-mix(in hsl, hsl(20deg 50% 50%), hsl(320deg 50% 50%))`, `color-mix(in hsl, rgb(191, 106, 64), rgb(191, 64, 149))`); + test_valid_value(`color`, `color-mix(in hsl, hsl(320deg 50% 50%), hsl(20deg 50% 50%))`, `color-mix(in hsl, rgb(191, 64, 149), rgb(191, 106, 64))`); + + test_valid_value(`color`, `color-mix(in hsl shorter hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))`, `color-mix(in hsl, rgb(191, 149, 64), rgb(191, 191, 64))`); + test_valid_value(`color`, `color-mix(in hsl shorter hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))`, `color-mix(in hsl, rgb(191, 191, 64), rgb(191, 149, 64))`); + test_valid_value(`color`, `color-mix(in hsl shorter hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))`, `color-mix(in hsl, rgb(191, 170, 64), rgb(191, 64, 128))`); + test_valid_value(`color`, `color-mix(in hsl shorter hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))`, `color-mix(in hsl, rgb(191, 64, 128), rgb(191, 170, 64))`); + test_valid_value(`color`, `color-mix(in hsl shorter hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))`, `color-mix(in hsl, rgb(191, 106, 64), rgb(191, 64, 149))`); + test_valid_value(`color`, `color-mix(in hsl shorter hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))`, `color-mix(in hsl, rgb(191, 64, 149), rgb(191, 106, 64))`); + + test_valid_value(`color`, `color-mix(in hsl longer hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))`, `color-mix(in hsl longer hue, rgb(191, 149, 64), rgb(191, 191, 64))`); + test_valid_value(`color`, `color-mix(in hsl longer hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))`, `color-mix(in hsl longer hue, rgb(191, 191, 64), rgb(191, 149, 64))`); + test_valid_value(`color`, `color-mix(in hsl longer hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))`, `color-mix(in hsl longer hue, rgb(191, 170, 64), rgb(191, 64, 128))`); + test_valid_value(`color`, `color-mix(in hsl longer hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))`, `color-mix(in hsl longer hue, rgb(191, 64, 128), rgb(191, 170, 64))`); + test_valid_value(`color`, `color-mix(in hsl longer hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))`, `color-mix(in hsl longer hue, rgb(191, 106, 64), rgb(191, 64, 149))`); + test_valid_value(`color`, `color-mix(in hsl longer hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))`, `color-mix(in hsl longer hue, rgb(191, 64, 149), rgb(191, 106, 64))`); + + test_valid_value(`color`, `color-mix(in hsl increasing hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))`, `color-mix(in hsl increasing hue, rgb(191, 149, 64), rgb(191, 191, 64))`); + test_valid_value(`color`, `color-mix(in hsl increasing hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))`, `color-mix(in hsl increasing hue, rgb(191, 191, 64), rgb(191, 149, 64))`); + test_valid_value(`color`, `color-mix(in hsl increasing hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))`, `color-mix(in hsl increasing hue, rgb(191, 170, 64), rgb(191, 64, 128))`); + test_valid_value(`color`, `color-mix(in hsl increasing hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))`, `color-mix(in hsl increasing hue, rgb(191, 64, 128), rgb(191, 170, 64))`); + test_valid_value(`color`, `color-mix(in hsl increasing hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))`, `color-mix(in hsl increasing hue, rgb(191, 106, 64), rgb(191, 64, 149))`); + test_valid_value(`color`, `color-mix(in hsl increasing hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))`, `color-mix(in hsl increasing hue, rgb(191, 64, 149), rgb(191, 106, 64))`); + + test_valid_value(`color`, `color-mix(in hsl decreasing hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))`, `color-mix(in hsl decreasing hue, rgb(191, 149, 64), rgb(191, 191, 64))`); + test_valid_value(`color`, `color-mix(in hsl decreasing hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))`, `color-mix(in hsl decreasing hue, rgb(191, 191, 64), rgb(191, 149, 64))`); + test_valid_value(`color`, `color-mix(in hsl decreasing hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))`, `color-mix(in hsl decreasing hue, rgb(191, 170, 64), rgb(191, 64, 128))`); + test_valid_value(`color`, `color-mix(in hsl decreasing hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))`, `color-mix(in hsl decreasing hue, rgb(191, 64, 128), rgb(191, 170, 64))`); + test_valid_value(`color`, `color-mix(in hsl decreasing hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))`, `color-mix(in hsl decreasing hue, rgb(191, 106, 64), rgb(191, 64, 149))`); + test_valid_value(`color`, `color-mix(in hsl decreasing hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))`, `color-mix(in hsl decreasing hue, rgb(191, 64, 149), rgb(191, 106, 64))`); + + test_valid_value(`color`, `color-mix(in hsl, hsl(none none none), hsl(none none none))`, `color-mix(in hsl, rgb(0, 0, 0), rgb(0, 0, 0))`); + test_valid_value(`color`, `color-mix(in hsl, hsl(none none none), hsl(30deg 40% 80%))`, `color-mix(in hsl, rgb(0, 0, 0), rgb(224, 204, 184))`); + test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 20% 40%), hsl(none none none))`, `color-mix(in hsl, rgb(82, 122, 82), rgb(0, 0, 0))`); + test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 20% none), hsl(30deg 40% 60%))`, `color-mix(in hsl, rgb(0, 0, 0), rgb(194, 153, 112))`); + test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 20% 40%), hsl(30deg 20% none))`, `color-mix(in hsl, rgb(82, 122, 82), rgb(0, 0, 0))`); + test_valid_value(`color`, `color-mix(in hsl, hsl(none 20% 40%), hsl(30deg none 80%))`, `color-mix(in hsl, rgb(122, 82, 82), rgb(204, 204, 204))`); + + test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 40% 40% / none), hsl(0deg 40% 40%))`, `color-mix(in hsl, rgba(61, 143, 61, 0), rgb(143, 61, 61))`); + test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 40% 40% / none), hsl(0deg 40% 40% / 0.5))`, `color-mix(in hsl, rgba(61, 143, 61, 0), rgba(143, 61, 61, 0.5))`); + test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 40% 40% / none), hsl(0deg 40% 40% / none))`, `color-mix(in hsl, rgba(61, 143, 61, 0), rgba(143, 61, 61, 0))`); + + test_valid_value(`color`, `color-mix(in hsl, color(display-p3 0 1 0) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hsl, color(display-p3 0 1 0) 100%, rgb(0, 0, 0))`); + test_valid_value(`color`, `color-mix(in hsl, lab(100 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hsl, lab(100 104.3 -50.9) 100%, rgb(0, 0, 0))`); + test_valid_value(`color`, `color-mix(in hsl, lab(0 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hsl, lab(0 104.3 -50.9) 100%, rgb(0, 0, 0))`); + test_valid_value(`color`, `color-mix(in hsl, lch(100 116 334) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hsl, lch(100 116 334) 100%, rgb(0, 0, 0))`); + test_valid_value(`color`, `color-mix(in hsl, lch(0 116 334) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hsl, lch(0 116 334) 100%, rgb(0, 0, 0))`); + test_valid_value(`color`, `color-mix(in hsl, oklab(100 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hsl, oklab(1 0.365 -0.16) 100%, rgb(0, 0, 0))`); + test_valid_value(`color`, `color-mix(in hsl, oklab(0 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hsl, oklab(0 0.365 -0.16) 100%, rgb(0, 0, 0))`); + test_valid_value(`color`, `color-mix(in hsl, oklch(100 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hsl, oklch(1 0.399 336.3) 100%, rgb(0, 0, 0))`); + test_valid_value(`color`, `color-mix(in hsl, oklab(1 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hsl, oklab(1 0.365 -0.16) 100%, rgb(0, 0, 0))`); + test_valid_value(`color`, `color-mix(in hsl, oklch(1 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hsl, oklch(1 0.399 336.3) 100%, rgb(0, 0, 0))`); + test_valid_value(`color`, `color-mix(in hsl, oklch(0 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hsl, oklch(0 0.399 336.3) 100%, rgb(0, 0, 0))`); + + test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%), hwb(30deg 30% 40%))`, `color-mix(in hwb, rgb(26, 204, 26), rgb(153, 115, 77))`); + test_valid_value(`color`, `color-mix(in hwb, 50% hwb(120deg 10% 20%), hwb(30deg 30% 40%))`, `color-mix(in hwb, rgb(26, 204, 26), rgb(153, 115, 77))`); + test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%), 50% hwb(30deg 30% 40%))`, `color-mix(in hwb, rgb(26, 204, 26), rgb(153, 115, 77))`); + test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%) 25%, hwb(30deg 30% 40%))`, `color-mix(in hwb, rgb(26, 204, 26) 25%, rgb(153, 115, 77))`); + test_valid_value(`color`, `color-mix(in hwb, 25% hwb(120deg 10% 20%), hwb(30deg 30% 40%))`, `color-mix(in hwb, rgb(26, 204, 26) 25%, rgb(153, 115, 77))`); + test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%), 25% hwb(30deg 30% 40%))`, `color-mix(in hwb, rgb(26, 204, 26) 75%, rgb(153, 115, 77))`); + test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%), hwb(30deg 30% 40%) 25%)`, `color-mix(in hwb, rgb(26, 204, 26) 75%, rgb(153, 115, 77))`); + test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%) 25%, hwb(30deg 30% 40%) 75%)`, `color-mix(in hwb, rgb(26, 204, 26) 25%, rgb(153, 115, 77))`); + test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%) 30%, hwb(30deg 30% 40%) 90%)`, `color-mix(in hwb, rgb(26, 204, 26) 30%, rgb(153, 115, 77) 90%)`); + test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%) 12.5%, hwb(30deg 30% 40%) 37.5%)`, `color-mix(in hwb, rgb(26, 204, 26) 12.5%, rgb(153, 115, 77) 37.5%)`); + test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%) 0%, hwb(30deg 30% 40%))`, `color-mix(in hwb, rgb(26, 204, 26) 0%, rgb(153, 115, 77))`); + + test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / .4), hwb(30deg 30% 40% / .8))`, `color-mix(in hwb, rgba(26, 204, 26, 0.4), rgba(153, 115, 77, 0.8))`); + test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / .4) 25%, hwb(30deg 30% 40% / .8))`, `color-mix(in hwb, rgba(26, 204, 26, 0.4) 25%, rgba(153, 115, 77, 0.8))`); + test_valid_value(`color`, `color-mix(in hwb, 25% hwb(120deg 10% 20% / .4), hwb(30deg 30% 40% / .8))`, `color-mix(in hwb, rgba(26, 204, 26, 0.4) 25%, rgba(153, 115, 77, 0.8))`); + test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%), 25% hwb(30deg 30% 40% / .8))`, `color-mix(in hwb, rgb(26, 204, 26) 75%, rgba(153, 115, 77, 0.8))`); + test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / .4), hwb(30deg 30% 40% / .8) 25%)`, `color-mix(in hwb, rgba(26, 204, 26, 0.4) 75%, rgba(153, 115, 77, 0.8))`); + test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / .4) 25%, hwb(30deg 30% 40% / .8) 75%)`, `color-mix(in hwb, rgba(26, 204, 26, 0.4) 25%, rgba(153, 115, 77, 0.8))`); + test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / .4) 30%, hwb(30deg 30% 40% / .8) 90%)`, `color-mix(in hwb, rgba(26, 204, 26, 0.4) 30%, rgba(153, 115, 77, 0.8) 90%)`); + test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / .4) 12.5%, hwb(30deg 30% 40% / .8) 37.5%)`, `color-mix(in hwb, rgba(26, 204, 26, 0.4) 12.5%, rgba(153, 115, 77, 0.8) 37.5%)`); + test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / .4) 0%, hwb(30deg 30% 40% / .8))`, `color-mix(in hwb, rgba(26, 204, 26, 0.4) 0%, rgba(153, 115, 77, 0.8))`); + + test_valid_value(`color`, `color-mix(in hwb, hwb(40deg 30% 40%), hwb(60deg 30% 40%))`, `color-mix(in hwb, rgb(153, 128, 77), rgb(153, 153, 77))`); + test_valid_value(`color`, `color-mix(in hwb, hwb(60deg 30% 40%), hwb(40deg 30% 40%))`, `color-mix(in hwb, rgb(153, 153, 77), rgb(153, 128, 77))`); + test_valid_value(`color`, `color-mix(in hwb, hwb(50deg 30% 40%), hwb(330deg 30% 40%))`, `color-mix(in hwb, rgb(153, 140, 77), rgb(153, 77, 115))`); + test_valid_value(`color`, `color-mix(in hwb, hwb(330deg 30% 40%), hwb(50deg 30% 40%))`, `color-mix(in hwb, rgb(153, 77, 115), rgb(153, 140, 77))`); + test_valid_value(`color`, `color-mix(in hwb, hwb(20deg 30% 40%), hwb(320deg 30% 40%))`, `color-mix(in hwb, rgb(153, 102, 77), rgb(153, 77, 128))`); + test_valid_value(`color`, `color-mix(in hwb, hwb(320deg 30% 40%), hwb(20deg 30% 40%))`, `color-mix(in hwb, rgb(153, 77, 128), rgb(153, 102, 77))`); + + test_valid_value(`color`, `color-mix(in hwb shorter hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))`, `color-mix(in hwb, rgb(153, 128, 77), rgb(153, 153, 77))`); + test_valid_value(`color`, `color-mix(in hwb shorter hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))`, `color-mix(in hwb, rgb(153, 153, 77), rgb(153, 128, 77))`); + test_valid_value(`color`, `color-mix(in hwb shorter hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))`, `color-mix(in hwb, rgb(153, 140, 77), rgb(153, 77, 115))`); + test_valid_value(`color`, `color-mix(in hwb shorter hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))`, `color-mix(in hwb, rgb(153, 77, 115), rgb(153, 140, 77))`); + test_valid_value(`color`, `color-mix(in hwb shorter hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))`, `color-mix(in hwb, rgb(153, 102, 77), rgb(153, 77, 128))`); + test_valid_value(`color`, `color-mix(in hwb shorter hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))`, `color-mix(in hwb, rgb(153, 77, 128), rgb(153, 102, 77))`); + + test_valid_value(`color`, `color-mix(in hwb longer hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))`, `color-mix(in hwb longer hue, rgb(153, 128, 77), rgb(153, 153, 77))`); + test_valid_value(`color`, `color-mix(in hwb longer hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))`, `color-mix(in hwb longer hue, rgb(153, 153, 77), rgb(153, 128, 77))`); + test_valid_value(`color`, `color-mix(in hwb longer hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))`, `color-mix(in hwb longer hue, rgb(153, 140, 77), rgb(153, 77, 115))`); + test_valid_value(`color`, `color-mix(in hwb longer hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))`, `color-mix(in hwb longer hue, rgb(153, 77, 115), rgb(153, 140, 77))`); + test_valid_value(`color`, `color-mix(in hwb longer hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))`, `color-mix(in hwb longer hue, rgb(153, 102, 77), rgb(153, 77, 128))`); + test_valid_value(`color`, `color-mix(in hwb longer hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))`, `color-mix(in hwb longer hue, rgb(153, 77, 128), rgb(153, 102, 77))`); + + test_valid_value(`color`, `color-mix(in hwb increasing hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))`, `color-mix(in hwb increasing hue, rgb(153, 128, 77), rgb(153, 153, 77))`); + test_valid_value(`color`, `color-mix(in hwb increasing hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))`, `color-mix(in hwb increasing hue, rgb(153, 153, 77), rgb(153, 128, 77))`); + test_valid_value(`color`, `color-mix(in hwb increasing hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))`, `color-mix(in hwb increasing hue, rgb(153, 140, 77), rgb(153, 77, 115))`); + test_valid_value(`color`, `color-mix(in hwb increasing hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))`, `color-mix(in hwb increasing hue, rgb(153, 77, 115), rgb(153, 140, 77))`); + test_valid_value(`color`, `color-mix(in hwb increasing hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))`, `color-mix(in hwb increasing hue, rgb(153, 102, 77), rgb(153, 77, 128))`); + test_valid_value(`color`, `color-mix(in hwb increasing hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))`, `color-mix(in hwb increasing hue, rgb(153, 77, 128), rgb(153, 102, 77))`); + + test_valid_value(`color`, `color-mix(in hwb decreasing hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))`, `color-mix(in hwb decreasing hue, rgb(153, 128, 77), rgb(153, 153, 77))`); + test_valid_value(`color`, `color-mix(in hwb decreasing hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))`, `color-mix(in hwb decreasing hue, rgb(153, 153, 77), rgb(153, 128, 77))`); + test_valid_value(`color`, `color-mix(in hwb decreasing hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))`, `color-mix(in hwb decreasing hue, rgb(153, 140, 77), rgb(153, 77, 115))`); + test_valid_value(`color`, `color-mix(in hwb decreasing hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))`, `color-mix(in hwb decreasing hue, rgb(153, 77, 115), rgb(153, 140, 77))`); + test_valid_value(`color`, `color-mix(in hwb decreasing hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))`, `color-mix(in hwb decreasing hue, rgb(153, 102, 77), rgb(153, 77, 128))`); + test_valid_value(`color`, `color-mix(in hwb decreasing hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))`, `color-mix(in hwb decreasing hue, rgb(153, 77, 128), rgb(153, 102, 77))`); + + test_valid_value(`color`, `color-mix(in hwb, hwb(none none none), hwb(none none none))`, `color-mix(in hwb, rgb(255, 0, 0), rgb(255, 0, 0))`); + test_valid_value(`color`, `color-mix(in hwb, hwb(none none none), hwb(30deg 30% 40%))`, `color-mix(in hwb, rgb(255, 0, 0), rgb(153, 115, 77))`); + test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%), hwb(none none none))`, `color-mix(in hwb, rgb(26, 204, 26), rgb(255, 0, 0))`); + test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% none), hwb(30deg 30% 40%))`, `color-mix(in hwb, rgb(26, 255, 26), rgb(153, 115, 77))`); + test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%), hwb(30deg 30% none))`, `color-mix(in hwb, rgb(26, 204, 26), rgb(255, 166, 77))`); + test_valid_value(`color`, `color-mix(in hwb, hwb(none 10% 20%), hwb(30deg none 40%))`, `color-mix(in hwb, rgb(204, 26, 26), rgb(153, 77, 0))`); + test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / none), hwb(30deg 30% 40%))`, `color-mix(in hwb, rgba(26, 204, 26, 0), rgb(153, 115, 77))`); + test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / none), hwb(30deg 30% 40% / 0.5))`, `color-mix(in hwb, rgba(26, 204, 26, 0), rgba(153, 115, 77, 0.5))`); + test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / none), hwb(30deg 30% 40% / none))`, `color-mix(in hwb, rgba(26, 204, 26, 0), rgba(153, 115, 77, 0))`); + + test_valid_value(`color`, `color-mix(in hwb, color(display-p3 0 1 0) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hwb, color(display-p3 0 1 0) 100%, rgb(0, 0, 0))`); + test_valid_value(`color`, `color-mix(in hwb, lab(100 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hwb, lab(100 104.3 -50.9) 100%, rgb(0, 0, 0))`); + test_valid_value(`color`, `color-mix(in hwb, lab(0 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hwb, lab(0 104.3 -50.9) 100%, rgb(0, 0, 0))`); + test_valid_value(`color`, `color-mix(in hwb, lch(100 116 334) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hwb, lch(100 116 334) 100%, rgb(0, 0, 0))`); + test_valid_value(`color`, `color-mix(in hwb, lch(0 116 334) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hwb, lch(0 116 334) 100%, rgb(0, 0, 0))`); + test_valid_value(`color`, `color-mix(in hwb, oklab(100 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hwb, oklab(1 0.365 -0.16) 100%, rgb(0, 0, 0))`); + test_valid_value(`color`, `color-mix(in hwb, oklab(0 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hwb, oklab(0 0.365 -0.16) 100%, rgb(0, 0, 0))`); + test_valid_value(`color`, `color-mix(in hwb, oklch(100 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hwb, oklch(1 0.399 336.3) 100%, rgb(0, 0, 0))`); + test_valid_value(`color`, `color-mix(in hwb, oklch(0 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hwb, oklch(0 0.399 336.3) 100%, rgb(0, 0, 0))`); + test_valid_value(`color`, `color-mix(in hwb, oklab(1 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hwb, oklab(1 0.365 -0.16) 100%, rgb(0, 0, 0))`); + test_valid_value(`color`, `color-mix(in hwb, oklch(1 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hwb, oklch(1 0.399 336.3) 100%, rgb(0, 0, 0))`); + + // lch() + test_valid_value(`color`, `color-mix(in lch, lch(10 20 30deg), lch(50 60 70deg))`, `color-mix(in lch, lch(10 20 30), lch(50 60 70))`); + test_valid_value(`color`, `color-mix(in lch, lch(10 20 30deg) 25%, lch(50 60 70deg))`, `color-mix(in lch, lch(10 20 30) 25%, lch(50 60 70))`); + test_valid_value(`color`, `color-mix(in lch, 25% lch(10 20 30deg), lch(50 60 70deg))`, `color-mix(in lch, lch(10 20 30) 25%, lch(50 60 70))`); + test_valid_value(`color`, `color-mix(in lch, lch(10 20 30deg), 25% lch(50 60 70deg))`, `color-mix(in lch, lch(10 20 30) 75%, lch(50 60 70))`); + test_valid_value(`color`, `color-mix(in lch, lch(10 20 30deg), lch(50 60 70deg) 25%)`, `color-mix(in lch, lch(10 20 30) 75%, lch(50 60 70))`); + test_valid_value(`color`, `color-mix(in lch, lch(10 20 30deg) 25%, lch(50 60 70deg) 75%)`, `color-mix(in lch, lch(10 20 30) 25%, lch(50 60 70))`); + test_valid_value(`color`, `color-mix(in lch, lch(10 20 30deg) 30%, lch(50 60 70deg) 90%)`, `color-mix(in lch, lch(10 20 30) 30%, lch(50 60 70) 90%)`); + test_valid_value(`color`, `color-mix(in lch, lch(10 20 30deg) 12.5%, lch(50 60 70deg) 37.5%)`, `color-mix(in lch, lch(10 20 30) 12.5%, lch(50 60 70) 37.5%)`); + test_valid_value(`color`, `color-mix(in lch, lch(10 20 30deg) 0%, lch(50 60 70deg))`, `color-mix(in lch, lch(10 20 30) 0%, lch(50 60 70))`); + + test_valid_value(`color`, `color-mix(in lch, lch(10 20 30deg / .4), lch(50 60 70deg / .8))`, `color-mix(in lch, lch(10 20 30 / 0.4), lch(50 60 70 / 0.8))`); + test_valid_value(`color`, `color-mix(in lch, lch(10 20 30deg / .4) 25%, lch(50 60 70deg / .8))`, `color-mix(in lch, lch(10 20 30 / 0.4) 25%, lch(50 60 70 / 0.8))`); + test_valid_value(`color`, `color-mix(in lch, 25% lch(10 20 30deg / .4), lch(50 60 70deg / .8))`, `color-mix(in lch, lch(10 20 30 / 0.4) 25%, lch(50 60 70 / 0.8))`); + test_valid_value(`color`, `color-mix(in lch, lch(10 20 30deg / .4), 25% lch(50 60 70deg / .8))`, `color-mix(in lch, lch(10 20 30 / 0.4) 75%, lch(50 60 70 / 0.8))`); + test_valid_value(`color`, `color-mix(in lch, lch(10 20 30deg / .4), lch(50 60 70deg / .8) 25%)`, `color-mix(in lch, lch(10 20 30 / 0.4) 75%, lch(50 60 70 / 0.8))`); + test_valid_value(`color`, `color-mix(in lch, lch(10 20 30deg / .4) 25%, lch(50 60 70deg / .8) 75%)`, `color-mix(in lch, lch(10 20 30 / 0.4) 25%, lch(50 60 70 / 0.8))`); + test_valid_value(`color`, `color-mix(in lch, lch(10 20 30deg / .4) 30%, lch(50 60 70deg / .8) 90%)`, `color-mix(in lch, lch(10 20 30 / 0.4) 30%, lch(50 60 70 / 0.8) 90%)`); + test_valid_value(`color`, `color-mix(in lch, lch(10 20 30deg / .4) 12.5%, lch(50 60 70deg / .8) 37.5%)`, `color-mix(in lch, lch(10 20 30 / 0.4) 12.5%, lch(50 60 70 / 0.8) 37.5%)`); + test_valid_value(`color`, `color-mix(in lch, lch(10 20 30deg / .4) 0%, lch(50 60 70deg / .8))`, `color-mix(in lch, lch(10 20 30 / 0.4) 0%, lch(50 60 70 / 0.8))`); + + test_valid_value(`color`, `color-mix(in lch, lch(100 0 40deg), lch(100 0 60deg))`, `color-mix(in lch, lch(100 0 40), lch(100 0 60))`); + test_valid_value(`color`, `color-mix(in lch, lch(100 0 60deg), lch(100 0 40deg))`, `color-mix(in lch, lch(100 0 60), lch(100 0 40))`); + test_valid_value(`color`, `color-mix(in lch, lch(100 0 50deg), lch(100 0 330deg))`, `color-mix(in lch, lch(100 0 50), lch(100 0 330))`); + test_valid_value(`color`, `color-mix(in lch, lch(100 0 330deg), lch(100 0 50deg))`, `color-mix(in lch, lch(100 0 330), lch(100 0 50))`); + test_valid_value(`color`, `color-mix(in lch, lch(100 0 20deg), lch(100 0 320deg))`, `color-mix(in lch, lch(100 0 20), lch(100 0 320))`); + test_valid_value(`color`, `color-mix(in lch, lch(100 0 320deg), lch(100 0 20deg))`, `color-mix(in lch, lch(100 0 320), lch(100 0 20))`); + + test_valid_value(`color`, `color-mix(in lch shorter hue, lch(100 0 40deg), lch(100 0 60deg))`, `color-mix(in lch, lch(100 0 40), lch(100 0 60))`); + test_valid_value(`color`, `color-mix(in lch shorter hue, lch(100 0 60deg), lch(100 0 40deg))`, `color-mix(in lch, lch(100 0 60), lch(100 0 40))`); + test_valid_value(`color`, `color-mix(in lch shorter hue, lch(100 0 50deg), lch(100 0 330deg))`, `color-mix(in lch, lch(100 0 50), lch(100 0 330))`); + test_valid_value(`color`, `color-mix(in lch shorter hue, lch(100 0 330deg), lch(100 0 50deg))`, `color-mix(in lch, lch(100 0 330), lch(100 0 50))`); + test_valid_value(`color`, `color-mix(in lch shorter hue, lch(100 0 20deg), lch(100 0 320deg))`, `color-mix(in lch, lch(100 0 20), lch(100 0 320))`); + test_valid_value(`color`, `color-mix(in lch shorter hue, lch(100 0 320deg), lch(100 0 20deg))`, `color-mix(in lch, lch(100 0 320), lch(100 0 20))`); + + test_valid_value(`color`, `color-mix(in lch longer hue, lch(100 0 40deg), lch(100 0 60deg))`, `color-mix(in lch longer hue, lch(100 0 40), lch(100 0 60))`); + test_valid_value(`color`, `color-mix(in lch longer hue, lch(100 0 60deg), lch(100 0 40deg))`, `color-mix(in lch longer hue, lch(100 0 60), lch(100 0 40))`); + test_valid_value(`color`, `color-mix(in lch longer hue, lch(100 0 50deg), lch(100 0 330deg))`, `color-mix(in lch longer hue, lch(100 0 50), lch(100 0 330))`); + test_valid_value(`color`, `color-mix(in lch longer hue, lch(100 0 330deg), lch(100 0 50deg))`, `color-mix(in lch longer hue, lch(100 0 330), lch(100 0 50))`); + test_valid_value(`color`, `color-mix(in lch longer hue, lch(100 0 20deg), lch(100 0 320deg))`, `color-mix(in lch longer hue, lch(100 0 20), lch(100 0 320))`); + test_valid_value(`color`, `color-mix(in lch longer hue, lch(100 0 320deg), lch(100 0 20deg))`, `color-mix(in lch longer hue, lch(100 0 320), lch(100 0 20))`); + + test_valid_value(`color`, `color-mix(in lch increasing hue, lch(100 0 40deg), lch(100 0 60deg))`, `color-mix(in lch increasing hue, lch(100 0 40), lch(100 0 60))`); + test_valid_value(`color`, `color-mix(in lch increasing hue, lch(100 0 60deg), lch(100 0 40deg))`, `color-mix(in lch increasing hue, lch(100 0 60), lch(100 0 40))`); + test_valid_value(`color`, `color-mix(in lch increasing hue, lch(100 0 50deg), lch(100 0 330deg))`, `color-mix(in lch increasing hue, lch(100 0 50), lch(100 0 330))`); + test_valid_value(`color`, `color-mix(in lch increasing hue, lch(100 0 330deg), lch(100 0 50deg))`, `color-mix(in lch increasing hue, lch(100 0 330), lch(100 0 50))`); + test_valid_value(`color`, `color-mix(in lch increasing hue, lch(100 0 20deg), lch(100 0 320deg))`, `color-mix(in lch increasing hue, lch(100 0 20), lch(100 0 320))`); + test_valid_value(`color`, `color-mix(in lch increasing hue, lch(100 0 320deg), lch(100 0 20deg))`, `color-mix(in lch increasing hue, lch(100 0 320), lch(100 0 20))`); + + test_valid_value(`color`, `color-mix(in lch decreasing hue, lch(100 0 40deg), lch(100 0 60deg))`, `color-mix(in lch decreasing hue, lch(100 0 40), lch(100 0 60))`); + test_valid_value(`color`, `color-mix(in lch decreasing hue, lch(100 0 60deg), lch(100 0 40deg))`, `color-mix(in lch decreasing hue, lch(100 0 60), lch(100 0 40))`); + test_valid_value(`color`, `color-mix(in lch decreasing hue, lch(100 0 50deg), lch(100 0 330deg))`, `color-mix(in lch decreasing hue, lch(100 0 50), lch(100 0 330))`); + test_valid_value(`color`, `color-mix(in lch decreasing hue, lch(100 0 330deg), lch(100 0 50deg))`, `color-mix(in lch decreasing hue, lch(100 0 330), lch(100 0 50))`); + test_valid_value(`color`, `color-mix(in lch decreasing hue, lch(100 0 20deg), lch(100 0 320deg))`, `color-mix(in lch decreasing hue, lch(100 0 20), lch(100 0 320))`); + test_valid_value(`color`, `color-mix(in lch decreasing hue, lch(100 0 320deg), lch(100 0 20deg))`, `color-mix(in lch decreasing hue, lch(100 0 320), lch(100 0 20))`); + + test_valid_value(`color`, `color-mix(in lch, lch(none none none), lch(none none none))`, `color-mix(in lch, lch(none none none), lch(none none none))`); + test_valid_value(`color`, `color-mix(in lch, lch(none none none), lch(50 60 70deg))`, `color-mix(in lch, lch(none none none), lch(50 60 70))`); + test_valid_value(`color`, `color-mix(in lch, lch(10 20 30deg), lch(none none none))`, `color-mix(in lch, lch(10 20 30), lch(none none none))`); + test_valid_value(`color`, `color-mix(in lch, lch(10 20 none), lch(50 60 70deg))`, `color-mix(in lch, lch(10 20 none), lch(50 60 70))`); + test_valid_value(`color`, `color-mix(in lch, lch(10 20 30deg), lch(50 60 none))`, `color-mix(in lch, lch(10 20 30), lch(50 60 none))`); + test_valid_value(`color`, `color-mix(in lch, lch(none 20 30deg), lch(50 none 70deg))`, `color-mix(in lch, lch(none 20 30), lch(50 none 70))`); + test_valid_value(`color`, `color-mix(in lch, lch(10 20 30deg / none), lch(50 60 70deg))`, `color-mix(in lch, lch(10 20 30 / none), lch(50 60 70))`); + test_valid_value(`color`, `color-mix(in lch, lch(10 20 30deg / none), lch(50 60 70deg / 0.5))`, `color-mix(in lch, lch(10 20 30 / none), lch(50 60 70 / 0.5))`); + test_valid_value(`color`, `color-mix(in lch, lch(10 20 30deg / none), lch(50 60 70deg / none))`, `color-mix(in lch, lch(10 20 30 / none), lch(50 60 70 / none))`); + + // oklch() + test_valid_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg), oklch(0.5 0.6 70deg))`, `color-mix(in oklch, oklch(0.1 0.2 30), oklch(0.5 0.6 70))`); + test_valid_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg) 25%, oklch(0.5 0.6 70deg))`, `color-mix(in oklch, oklch(0.1 0.2 30) 25%, oklch(0.5 0.6 70))`); + test_valid_value(`color`, `color-mix(in oklch, 25% oklch(0.1 0.2 30deg), oklch(0.5 0.6 70deg))`, `color-mix(in oklch, oklch(0.1 0.2 30) 25%, oklch(0.5 0.6 70))`); + test_valid_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg), 25% oklch(0.5 0.6 70deg))`, `color-mix(in oklch, oklch(0.1 0.2 30) 75%, oklch(0.5 0.6 70))`); + test_valid_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg), oklch(0.5 0.6 70deg) 25%)`, `color-mix(in oklch, oklch(0.1 0.2 30) 75%, oklch(0.5 0.6 70))`); + test_valid_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg) 25%, oklch(0.5 0.6 70deg) 75%)`, `color-mix(in oklch, oklch(0.1 0.2 30) 25%, oklch(0.5 0.6 70))`); + test_valid_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg) 30%, oklch(0.5 0.6 70deg) 90%)`, `color-mix(in oklch, oklch(0.1 0.2 30) 30%, oklch(0.5 0.6 70) 90%)`); + test_valid_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg) 12.5%, oklch(0.5 0.6 70deg) 37.5%)`, `color-mix(in oklch, oklch(0.1 0.2 30) 12.5%, oklch(0.5 0.6 70) 37.5%)`); + test_valid_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg) 0%, oklch(0.5 0.6 70deg))`, `color-mix(in oklch, oklch(0.1 0.2 30) 0%, oklch(0.5 0.6 70))`); + + test_valid_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg / .4), oklch(0.5 0.6 70deg / .8))`, `color-mix(in oklch, oklch(0.1 0.2 30 / 0.4), oklch(0.5 0.6 70 / 0.8))`); + test_valid_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg / .4) 25%, oklch(0.5 0.6 70deg / .8))`, `color-mix(in oklch, oklch(0.1 0.2 30 / 0.4) 25%, oklch(0.5 0.6 70 / 0.8))`); + test_valid_value(`color`, `color-mix(in oklch, 25% oklch(0.1 0.2 30deg / .4), oklch(0.5 0.6 70deg / .8))`, `color-mix(in oklch, oklch(0.1 0.2 30 / 0.4) 25%, oklch(0.5 0.6 70 / 0.8))`); + test_valid_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg / .4), 25% oklch(0.5 0.6 70deg / .8))`, `color-mix(in oklch, oklch(0.1 0.2 30 / 0.4) 75%, oklch(0.5 0.6 70 / 0.8))`); + test_valid_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg / .4), oklch(0.5 0.6 70deg / .8) 25%)`, `color-mix(in oklch, oklch(0.1 0.2 30 / 0.4) 75%, oklch(0.5 0.6 70 / 0.8))`); + test_valid_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg / .4) 25%, oklch(0.5 0.6 70deg / .8) 75%)`, `color-mix(in oklch, oklch(0.1 0.2 30 / 0.4) 25%, oklch(0.5 0.6 70 / 0.8))`); + test_valid_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg / .4) 30%, oklch(0.5 0.6 70deg / .8) 90%)`, `color-mix(in oklch, oklch(0.1 0.2 30 / 0.4) 30%, oklch(0.5 0.6 70 / 0.8) 90%)`); + test_valid_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg / .4) 12.5%, oklch(0.5 0.6 70deg / .8) 37.5%)`, `color-mix(in oklch, oklch(0.1 0.2 30 / 0.4) 12.5%, oklch(0.5 0.6 70 / 0.8) 37.5%)`); + test_valid_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg / .4) 0%, oklch(0.5 0.6 70deg / .8))`, `color-mix(in oklch, oklch(0.1 0.2 30 / 0.4) 0%, oklch(0.5 0.6 70 / 0.8))`); + + test_valid_value(`color`, `color-mix(in oklch, oklch(1 0 40deg), oklch(1 0 60deg))`, `color-mix(in oklch, oklch(1 0 40), oklch(1 0 60))`); + test_valid_value(`color`, `color-mix(in oklch, oklch(1 0 60deg), oklch(1 0 40deg))`, `color-mix(in oklch, oklch(1 0 60), oklch(1 0 40))`); + test_valid_value(`color`, `color-mix(in oklch, oklch(1 0 50deg), oklch(1 0 330deg))`, `color-mix(in oklch, oklch(1 0 50), oklch(1 0 330))`); + test_valid_value(`color`, `color-mix(in oklch, oklch(1 0 330deg), oklch(1 0 50deg))`, `color-mix(in oklch, oklch(1 0 330), oklch(1 0 50))`); + test_valid_value(`color`, `color-mix(in oklch, oklch(1 0 20deg), oklch(1 0 320deg))`, `color-mix(in oklch, oklch(1 0 20), oklch(1 0 320))`); + test_valid_value(`color`, `color-mix(in oklch, oklch(1 0 320deg), oklch(1 0 20deg))`, `color-mix(in oklch, oklch(1 0 320), oklch(1 0 20))`); + + test_valid_value(`color`, `color-mix(in oklch shorter hue, oklch(1 0 40deg), oklch(1 0 60deg))`, `color-mix(in oklch, oklch(1 0 40), oklch(1 0 60))`); + test_valid_value(`color`, `color-mix(in oklch shorter hue, oklch(1 0 60deg), oklch(1 0 40deg))`, `color-mix(in oklch, oklch(1 0 60), oklch(1 0 40))`); + test_valid_value(`color`, `color-mix(in oklch shorter hue, oklch(1 0 50deg), oklch(1 0 330deg))`, `color-mix(in oklch, oklch(1 0 50), oklch(1 0 330))`); + test_valid_value(`color`, `color-mix(in oklch shorter hue, oklch(1 0 330deg), oklch(1 0 50deg))`, `color-mix(in oklch, oklch(1 0 330), oklch(1 0 50))`); + test_valid_value(`color`, `color-mix(in oklch shorter hue, oklch(1 0 20deg), oklch(1 0 320deg))`, `color-mix(in oklch, oklch(1 0 20), oklch(1 0 320))`); + test_valid_value(`color`, `color-mix(in oklch shorter hue, oklch(1 0 320deg), oklch(1 0 20deg))`, `color-mix(in oklch, oklch(1 0 320), oklch(1 0 20))`); + + test_valid_value(`color`, `color-mix(in oklch longer hue, oklch(1 0 40deg), oklch(1 0 60deg))`, `color-mix(in oklch longer hue, oklch(1 0 40), oklch(1 0 60))`); + test_valid_value(`color`, `color-mix(in oklch longer hue, oklch(1 0 60deg), oklch(1 0 40deg))`, `color-mix(in oklch longer hue, oklch(1 0 60), oklch(1 0 40))`); + test_valid_value(`color`, `color-mix(in oklch longer hue, oklch(1 0 50deg), oklch(1 0 330deg))`, `color-mix(in oklch longer hue, oklch(1 0 50), oklch(1 0 330))`); + test_valid_value(`color`, `color-mix(in oklch longer hue, oklch(1 0 330deg), oklch(1 0 50deg))`, `color-mix(in oklch longer hue, oklch(1 0 330), oklch(1 0 50))`); + test_valid_value(`color`, `color-mix(in oklch longer hue, oklch(1 0 20deg), oklch(1 0 320deg))`, `color-mix(in oklch longer hue, oklch(1 0 20), oklch(1 0 320))`); + test_valid_value(`color`, `color-mix(in oklch longer hue, oklch(1 0 320deg), oklch(1 0 20deg))`, `color-mix(in oklch longer hue, oklch(1 0 320), oklch(1 0 20))`); + + test_valid_value(`color`, `color-mix(in oklch increasing hue, oklch(1 0 40deg), oklch(1 0 60deg))`, `color-mix(in oklch increasing hue, oklch(1 0 40), oklch(1 0 60))`); + test_valid_value(`color`, `color-mix(in oklch increasing hue, oklch(1 0 60deg), oklch(1 0 40deg))`, `color-mix(in oklch increasing hue, oklch(1 0 60), oklch(1 0 40))`); + test_valid_value(`color`, `color-mix(in oklch increasing hue, oklch(1 0 50deg), oklch(1 0 330deg))`, `color-mix(in oklch increasing hue, oklch(1 0 50), oklch(1 0 330))`); + test_valid_value(`color`, `color-mix(in oklch increasing hue, oklch(1 0 330deg), oklch(1 0 50deg))`, `color-mix(in oklch increasing hue, oklch(1 0 330), oklch(1 0 50))`); + test_valid_value(`color`, `color-mix(in oklch increasing hue, oklch(1 0 20deg), oklch(1 0 320deg))`, `color-mix(in oklch increasing hue, oklch(1 0 20), oklch(1 0 320))`); + test_valid_value(`color`, `color-mix(in oklch increasing hue, oklch(1 0 320deg), oklch(1 0 20deg))`, `color-mix(in oklch increasing hue, oklch(1 0 320), oklch(1 0 20))`); + + test_valid_value(`color`, `color-mix(in oklch decreasing hue, oklch(1 0 40deg), oklch(1 0 60deg))`, `color-mix(in oklch decreasing hue, oklch(1 0 40), oklch(1 0 60))`); + test_valid_value(`color`, `color-mix(in oklch decreasing hue, oklch(1 0 60deg), oklch(1 0 40deg))`, `color-mix(in oklch decreasing hue, oklch(1 0 60), oklch(1 0 40))`); + test_valid_value(`color`, `color-mix(in oklch decreasing hue, oklch(1 0 50deg), oklch(1 0 330deg))`, `color-mix(in oklch decreasing hue, oklch(1 0 50), oklch(1 0 330))`); + test_valid_value(`color`, `color-mix(in oklch decreasing hue, oklch(1 0 330deg), oklch(1 0 50deg))`, `color-mix(in oklch decreasing hue, oklch(1 0 330), oklch(1 0 50))`); + test_valid_value(`color`, `color-mix(in oklch decreasing hue, oklch(1 0 20deg), oklch(1 0 320deg))`, `color-mix(in oklch decreasing hue, oklch(1 0 20), oklch(1 0 320))`); + test_valid_value(`color`, `color-mix(in oklch decreasing hue, oklch(1 0 320deg), oklch(1 0 20deg))`, `color-mix(in oklch decreasing hue, oklch(1 0 320), oklch(1 0 20))`); + + test_valid_value(`color`, `color-mix(in oklch, oklch(none none none), oklch(none none none))`, `color-mix(in oklch, oklch(none none none), oklch(none none none))`); + test_valid_value(`color`, `color-mix(in oklch, oklch(none none none), oklch(0.5 0.6 70deg))`, `color-mix(in oklch, oklch(none none none), oklch(0.5 0.6 70))`); + test_valid_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg), oklch(none none none))`, `color-mix(in oklch, oklch(0.1 0.2 30), oklch(none none none))`); + test_valid_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 none), oklch(0.5 0.6 70deg))`, `color-mix(in oklch, oklch(0.1 0.2 none), oklch(0.5 0.6 70))`); + test_valid_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg), oklch(0.5 0.6 none))`, `color-mix(in oklch, oklch(0.1 0.2 30), oklch(0.5 0.6 none))`); + test_valid_value(`color`, `color-mix(in oklch, oklch(none 0.2 30deg), oklch(0.5 none 70deg))`, `color-mix(in oklch, oklch(none 0.2 30), oklch(0.5 none 70))`); + test_valid_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg / none), oklch(0.5 0.6 70deg))`, `color-mix(in oklch, oklch(0.1 0.2 30 / none), oklch(0.5 0.6 70))`); + test_valid_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg / none), oklch(0.5 0.6 70deg / 0.5))`, `color-mix(in oklch, oklch(0.1 0.2 30 / none), oklch(0.5 0.6 70 / 0.5))`); + test_valid_value(`color`, `color-mix(in oklch, oklch(0.1 0.2 30deg / none), oklch(0.5 0.6 70deg / none))`, `color-mix(in oklch, oklch(0.1 0.2 30 / none), oklch(0.5 0.6 70 / none))`); + + // lab() + test_valid_value(`color`, `color-mix(in lab, lab(10 20 30), lab(50 60 70))`, `color-mix(in lab, lab(10 20 30), lab(50 60 70))`); + test_valid_value(`color`, `color-mix(in lab, lab(10 20 30) 25%, lab(50 60 70))`, `color-mix(in lab, lab(10 20 30) 25%, lab(50 60 70))`); + test_valid_value(`color`, `color-mix(in lab, 25% lab(10 20 30), lab(50 60 70))`, `color-mix(in lab, lab(10 20 30) 25%, lab(50 60 70))`); + test_valid_value(`color`, `color-mix(in lab, lab(10 20 30), 25% lab(50 60 70))`, `color-mix(in lab, lab(10 20 30) 75%, lab(50 60 70))`); + test_valid_value(`color`, `color-mix(in lab, lab(10 20 30), lab(50 60 70) 25%)`, `color-mix(in lab, lab(10 20 30) 75%, lab(50 60 70))`); + test_valid_value(`color`, `color-mix(in lab, lab(10 20 30) 25%, lab(50 60 70) 75%)`, `color-mix(in lab, lab(10 20 30) 25%, lab(50 60 70))`); + test_valid_value(`color`, `color-mix(in lab, lab(10 20 30) 30%, lab(50 60 70) 90%)`, `color-mix(in lab, lab(10 20 30) 30%, lab(50 60 70) 90%)`); + test_valid_value(`color`, `color-mix(in lab, lab(10 20 30) 12.5%, lab(50 60 70) 37.5%)`, `color-mix(in lab, lab(10 20 30) 12.5%, lab(50 60 70) 37.5%)`); + test_valid_value(`color`, `color-mix(in lab, lab(10 20 30) 0%, lab(50 60 70))`, `color-mix(in lab, lab(10 20 30) 0%, lab(50 60 70))`); + + test_valid_value(`color`, `color-mix(in lab, lab(10 20 30 / .4), lab(50 60 70 / .8))`, `color-mix(in lab, lab(10 20 30 / 0.4), lab(50 60 70 / 0.8))`); + test_valid_value(`color`, `color-mix(in lab, lab(10 20 30 / .4) 25%, lab(50 60 70 / .8))`, `color-mix(in lab, lab(10 20 30 / 0.4) 25%, lab(50 60 70 / 0.8))`); + test_valid_value(`color`, `color-mix(in lab, 25% lab(10 20 30 / .4), lab(50 60 70 / .8))`, `color-mix(in lab, lab(10 20 30 / 0.4) 25%, lab(50 60 70 / 0.8))`); + test_valid_value(`color`, `color-mix(in lab, lab(10 20 30 / .4), 25% lab(50 60 70 / .8))`, `color-mix(in lab, lab(10 20 30 / 0.4) 75%, lab(50 60 70 / 0.8))`); + test_valid_value(`color`, `color-mix(in lab, lab(10 20 30 / .4), lab(50 60 70 / .8) 25%)`, `color-mix(in lab, lab(10 20 30 / 0.4) 75%, lab(50 60 70 / 0.8))`); + test_valid_value(`color`, `color-mix(in lab, lab(10 20 30 / .4) 25%, lab(50 60 70 / .8) 75%)`, `color-mix(in lab, lab(10 20 30 / 0.4) 25%, lab(50 60 70 / 0.8))`); + test_valid_value(`color`, `color-mix(in lab, lab(10 20 30 / .4) 30%, lab(50 60 70 / .8) 90%)`, `color-mix(in lab, lab(10 20 30 / 0.4) 30%, lab(50 60 70 / 0.8) 90%)`); + test_valid_value(`color`, `color-mix(in lab, lab(10 20 30 / .4) 12.5%, lab(50 60 70 / .8) 37.5%)`, `color-mix(in lab, lab(10 20 30 / 0.4) 12.5%, lab(50 60 70 / 0.8) 37.5%)`); + test_valid_value(`color`, `color-mix(in lab, lab(10 20 30 / .4) 0%, lab(50 60 70 / .8))`, `color-mix(in lab, lab(10 20 30 / 0.4) 0%, lab(50 60 70 / 0.8))`); + + test_valid_value(`color`, `color-mix(in lab, lab(none none none), lab(none none none))`, `color-mix(in lab, lab(none none none), lab(none none none))`); + test_valid_value(`color`, `color-mix(in lab, lab(none none none), lab(50 60 70))`, `color-mix(in lab, lab(none none none), lab(50 60 70))`); + test_valid_value(`color`, `color-mix(in lab, lab(10 20 30), lab(none none none))`, `color-mix(in lab, lab(10 20 30), lab(none none none))`); + test_valid_value(`color`, `color-mix(in lab, lab(10 20 none), lab(50 60 70))`, `color-mix(in lab, lab(10 20 none), lab(50 60 70))`); + test_valid_value(`color`, `color-mix(in lab, lab(10 20 30), lab(50 60 none))`, `color-mix(in lab, lab(10 20 30), lab(50 60 none))`); + test_valid_value(`color`, `color-mix(in lab, lab(none 20 30), lab(50 none 70))`, `color-mix(in lab, lab(none 20 30), lab(50 none 70))`); + test_valid_value(`color`, `color-mix(in lab, lab(10 20 30 / none), lab(50 60 70))`, `color-mix(in lab, lab(10 20 30 / none), lab(50 60 70))`); + test_valid_value(`color`, `color-mix(in lab, lab(10 20 30 / none), lab(50 60 70 / 0.5))`, `color-mix(in lab, lab(10 20 30 / none), lab(50 60 70 / 0.5))`); + test_valid_value(`color`, `color-mix(in lab, lab(10 20 30 / none), lab(50 60 70 / none))`, `color-mix(in lab, lab(10 20 30 / none), lab(50 60 70 / none))`); + + // oklab() + test_valid_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3), oklab(0.5 0.6 0.7))`, `color-mix(in oklab, oklab(0.1 0.2 0.3), oklab(0.5 0.6 0.7))`); + test_valid_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3) 25%, oklab(0.5 0.6 0.7))`, `color-mix(in oklab, oklab(0.1 0.2 0.3) 25%, oklab(0.5 0.6 0.7))`); + test_valid_value(`color`, `color-mix(in oklab, 25% oklab(0.1 0.2 0.3), oklab(0.5 0.6 0.7))`, `color-mix(in oklab, oklab(0.1 0.2 0.3) 25%, oklab(0.5 0.6 0.7))`); + test_valid_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3), 25% oklab(0.5 0.6 0.7))`, `color-mix(in oklab, oklab(0.1 0.2 0.3) 75%, oklab(0.5 0.6 0.7))`); + test_valid_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3), oklab(0.5 0.6 0.7) 25%)`, `color-mix(in oklab, oklab(0.1 0.2 0.3) 75%, oklab(0.5 0.6 0.7))`); + test_valid_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3) 25%, oklab(0.5 0.6 0.7) 75%)`, `color-mix(in oklab, oklab(0.1 0.2 0.3) 25%, oklab(0.5 0.6 0.7))`); + test_valid_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3) 30%, oklab(0.5 0.6 0.7) 90%)`, `color-mix(in oklab, oklab(0.1 0.2 0.3) 30%, oklab(0.5 0.6 0.7) 90%)`); + test_valid_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3) 12.5%, oklab(0.5 0.6 0.7) 37.5%)`, `color-mix(in oklab, oklab(0.1 0.2 0.3) 12.5%, oklab(0.5 0.6 0.7) 37.5%)`); + test_valid_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3) 0%, oklab(0.5 0.6 0.7))`, `color-mix(in oklab, oklab(0.1 0.2 0.3) 0%, oklab(0.5 0.6 0.7))`); + + test_valid_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / .4), oklab(0.5 0.6 0.7 / .8))`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / 0.4), oklab(0.5 0.6 0.7 / 0.8))`); + test_valid_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / .4) 25%, oklab(0.5 0.6 0.7 / .8))`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / 0.4) 25%, oklab(0.5 0.6 0.7 / 0.8))`); + test_valid_value(`color`, `color-mix(in oklab, 25% oklab(0.1 0.2 0.3 / .4), oklab(0.5 0.6 0.7 / .8))`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / 0.4) 25%, oklab(0.5 0.6 0.7 / 0.8))`); + test_valid_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / .4), 25% oklab(0.5 0.6 0.7 / .8))`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / 0.4) 75%, oklab(0.5 0.6 0.7 / 0.8))`); + test_valid_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / .4), oklab(0.5 0.6 0.7 / .8) 25%)`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / 0.4) 75%, oklab(0.5 0.6 0.7 / 0.8))`); + test_valid_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / .4) 25%, oklab(0.5 0.6 0.7 / .8) 75%)`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / 0.4) 25%, oklab(0.5 0.6 0.7 / 0.8))`); + test_valid_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / .4) 30%, oklab(0.5 0.6 0.7 / .8) 90%)`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / 0.4) 30%, oklab(0.5 0.6 0.7 / 0.8) 90%)`); + test_valid_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / .4) 12.5%, oklab(0.5 0.6 0.7 / .8) 37.5%)`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / 0.4) 12.5%, oklab(0.5 0.6 0.7 / 0.8) 37.5%)`); + test_valid_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / .4) 0%, oklab(0.5 0.6 0.7 / .8))`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / 0.4) 0%, oklab(0.5 0.6 0.7 / 0.8))`); + + test_valid_value(`color`, `color-mix(in oklab, oklab(none none none), oklab(none none none))`, `color-mix(in oklab, oklab(none none none), oklab(none none none))`); + test_valid_value(`color`, `color-mix(in oklab, oklab(none none none), oklab(0.5 0.6 0.7))`, `color-mix(in oklab, oklab(none none none), oklab(0.5 0.6 0.7))`); + test_valid_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3), oklab(none none none))`, `color-mix(in oklab, oklab(0.1 0.2 0.3), oklab(none none none))`); + test_valid_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 none), oklab(0.5 0.6 0.7))`, `color-mix(in oklab, oklab(0.1 0.2 none), oklab(0.5 0.6 0.7))`); + test_valid_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3), oklab(0.5 0.6 none))`, `color-mix(in oklab, oklab(0.1 0.2 0.3), oklab(0.5 0.6 none))`); + test_valid_value(`color`, `color-mix(in oklab, oklab(none 0.2 0.3), oklab(0.5 none 0.7))`, `color-mix(in oklab, oklab(none 0.2 0.3), oklab(0.5 none 0.7))`); + test_valid_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / none), oklab(0.5 0.6 0.7))`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / none), oklab(0.5 0.6 0.7))`); + test_valid_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / none), oklab(0.5 0.6 0.7 / 0.5))`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / none), oklab(0.5 0.6 0.7 / 0.5))`); + test_valid_value(`color`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / none), oklab(0.5 0.6 0.7 / none))`, `color-mix(in oklab, oklab(0.1 0.2 0.3 / none), oklab(0.5 0.6 0.7 / none))`); + + for (const colorSpace of [ "srgb", "srgb-linear", "xyz", "xyz-d50", "xyz-d65" ]) { + const resultColorSpace = colorSpace == "xyz" ? "xyz-d65" : colorSpace; + + test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3), color(${colorSpace} .5 .6 .7))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3), color(${resultColorSpace} 0.5 0.6 0.7))`); + test_valid_value(`color`, `color-mix(in ${colorSpace}, 50% color(${colorSpace} .1 .2 .3), color(${colorSpace} .5 .6 .7))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3), color(${resultColorSpace} 0.5 0.6 0.7))`); + test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3), 50% color(${colorSpace} .5 .6 .7))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3), color(${resultColorSpace} 0.5 0.6 0.7))`); + test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3) 25%, color(${colorSpace} .5 .6 .7))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3) 25%, color(${resultColorSpace} 0.5 0.6 0.7))`); + test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3), color(${colorSpace} .5 .6 .7) 25%)`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3) 75%, color(${resultColorSpace} 0.5 0.6 0.7))`); + test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3) 25%, color(${colorSpace} .5 .6 .7) 75%)`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3) 25%, color(${resultColorSpace} 0.5 0.6 0.7))`); + test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3) 30%, color(${colorSpace} .5 .6 .7) 90%)`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3) 30%, color(${resultColorSpace} 0.5 0.6 0.7) 90%)`); + test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3) 12.5%, color(${colorSpace} .5 .6 .7) 37.5%)`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3) 12.5%, color(${resultColorSpace} 0.5 0.6 0.7) 37.5%)`); + test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3) 0%, color(${colorSpace} .5 .6 .7))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3) 0%, color(${resultColorSpace} 0.5 0.6 0.7))`); + + test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .5), color(${colorSpace} .5 .6 .7 / .8))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3 / 0.5), color(${resultColorSpace} 0.5 0.6 0.7 / 0.8))`); + test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4) 25%, color(${colorSpace} .5 .6 .7 / .8))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3 / 0.4) 25%, color(${resultColorSpace} 0.5 0.6 0.7 / 0.8))`); + test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4), color(${colorSpace} .5 .6 .7 / .8) 25%)`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3 / 0.4) 75%, color(${resultColorSpace} 0.5 0.6 0.7 / 0.8))`); + test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4) 25%, color(${colorSpace} .5 .6 .7 / .8) 75%)`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3 / 0.4) 25%, color(${resultColorSpace} 0.5 0.6 0.7 / 0.8))`); + test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4) 30%, color(${colorSpace} .5 .6 .7 / .8) 90%)`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3 / 0.4) 30%, color(${resultColorSpace} 0.5 0.6 0.7 / 0.8) 90%)`); + test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4) 12.5%, color(${colorSpace} .5 .6 .7 / .8) 37.5%)`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3 / 0.4) 12.5%, color(${resultColorSpace} 0.5 0.6 0.7 / 0.8) 37.5%)`); + test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4) 0%, color(${colorSpace} .5 .6 .7 / .8))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3 / 0.4) 0%, color(${resultColorSpace} 0.5 0.6 0.7 / 0.8))`); + + test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} 2 3 4 / 5), color(${colorSpace} 4 6 8 / 10))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 2 3 4), color(${resultColorSpace} 4 6 8))`); + test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} -2 -3 -4), color(${colorSpace} -4 -6 -8))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} -2 -3 -4), color(${resultColorSpace} -4 -6 -8))`); + test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} -2 -3 -4 / -5), color(${colorSpace} -4 -6 -8 / -10))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} -2 -3 -4 / 0), color(${resultColorSpace} -4 -6 -8 / 0))`); + + test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} none none none), color(${colorSpace} none none none))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} none none none), color(${resultColorSpace} none none none))`); + test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} none none none), color(${colorSpace} .5 .6 .7))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} none none none), color(${resultColorSpace} 0.5 0.6 0.7))`); + test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3), color(${colorSpace} none none none))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3), color(${resultColorSpace} none none none))`); + test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 none), color(${colorSpace} .5 .6 .7))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 none), color(${resultColorSpace} 0.5 0.6 0.7))`); + test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3), color(${colorSpace} .5 .6 none))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3), color(${resultColorSpace} 0.5 0.6 none))`); + test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} none .2 .3), color(${colorSpace} .5 none .7))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} none 0.2 0.3), color(${resultColorSpace} 0.5 none 0.7))`); + test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / none), color(${colorSpace} .5 .6 .7))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3 / none), color(${resultColorSpace} 0.5 0.6 0.7))`); + test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / none), color(${colorSpace} .5 .6 .7 / 0.5))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3 / none), color(${resultColorSpace} 0.5 0.6 0.7 / 0.5))`); + test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / none), color(${colorSpace} .5 .6 .7 / none))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3 / none), color(${resultColorSpace} 0.5 0.6 0.7 / none))`); + } +</script> +</body> +</html> diff --git a/testing/web-platform/tests/css/css-color/parsing/color-valid-hsl.html b/testing/web-platform/tests/css/css-color/parsing/color-valid-hsl.html new file mode 100644 index 0000000000..7ab1274176 --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/color-valid-hsl.html @@ -0,0 +1,59 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 4: Parsing and serialization of colors using valid HSL notation</title> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#the-hsl-notation"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#resolving-sRGB-values"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#serializing-sRGB-values"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_valid_value("color", "hsl(120 30% 50%)", "rgb(89, 166, 89)"); +test_valid_value("color", "hsl(120 30% 50% / 0.5)", "rgba(89, 166, 89, 0.5)"); +test_valid_value("color", "hsl(none none none)", "rgb(0, 0, 0)"); +test_valid_value("color", "hsl(0 0% 0%)", "rgb(0, 0, 0)"); +test_valid_value("color", "hsl(none none none / none)", "rgba(0, 0, 0, 0)"); +test_valid_value("color", "hsl(0 0% 0% / 0)", "rgba(0, 0, 0, 0)"); +test_valid_value("color", "hsla(none none none)", "rgb(0, 0, 0)"); +test_valid_value("color", "hsla(0 0% 0%)", "rgb(0, 0, 0)"); +test_valid_value("color", "hsla(none none none / none)", "rgba(0, 0, 0, 0)"); +test_valid_value("color", "hsla(0 0% 0% / 0)", "rgba(0, 0, 0, 0)"); +test_valid_value("color", "hsl(120 none none)", "rgb(0, 0, 0)"); +test_valid_value("color", "hsl(120 0% 0%)", "rgb(0, 0, 0)"); +test_valid_value("color", "hsl(120 80% none)", "rgb(0, 0, 0)"); +test_valid_value("color", "hsl(120 80% 0%)", "rgb(0, 0, 0)"); +test_valid_value("color", "hsl(120 none 50%)", "rgb(128, 128, 128)"); +test_valid_value("color", "hsl(120 0% 50%)", "rgb(128, 128, 128)"); +test_valid_value("color", "hsl(120 100% 50% / none)", "rgba(0, 255, 0, 0)"); +test_valid_value("color", "hsl(120 100% 50% / 0)", "rgba(0, 255, 0, 0)"); +test_valid_value("color", "hsl(none 100% 50%)", "rgb(255, 0, 0)"); +test_valid_value("color", "hsl(0 100% 50%)", "rgb(255, 0, 0)"); + +// Test with number components. +test_valid_value("color", "hsl(120 30 50)", "rgb(89, 166, 89)"); +test_valid_value("color", "hsl(120 30 50 / 0.5)", "rgba(89, 166, 89, 0.5)"); +test_valid_value("color", "hsl(120 30% 50)", "rgb(89, 166, 89)"); +test_valid_value("color", "hsl(120 30% 50 / 0.5)", "rgba(89, 166, 89, 0.5)"); +test_valid_value("color", "hsl(120 30 50%)", "rgb(89, 166, 89)"); +test_valid_value("color", "hsl(120 30 50% / 0.5)", "rgba(89, 166, 89, 0.5)"); +test_valid_value("color", "hsl(120 none 50)", "rgb(128, 128, 128)"); +test_valid_value("color", "hsl(120 none 50 / 0.5)", "rgba(128, 128, 128, 0.5)"); +test_valid_value("color", "hsl(120 30 none)", "rgb(0, 0, 0)"); +test_valid_value("color", "hsl(120 30 none / 0.5)", "rgba(0, 0, 0, 0.5)"); +test_valid_value("color", "hsl(120 30 50 / none)", "rgba(89, 166, 89, 0)"); + +// Test non-finite values. calc(infinity) goes to upper bound while calc(-infinity) and NaN go to the lower bound. +// See: https://github.com/w3c/csswg-drafts/issues/8629 +test_valid_value("color", "hsl(calc(infinity) 100% 50%)", "rgb(255, 0, 0)"); // hsl(360 100% 50%) +test_valid_value("color", "hsl(calc(-infinity) 100% 50%)", "rgb(255, 0, 0)"); // hsl(0 100% 50%) +test_valid_value("color", "hsl(calc(0 / 0) 100% 50%)", "rgb(255, 0, 0)"); // hsl(0 100% 50%) +test_valid_value("color", "hsl(90 50% 50% / calc(infinity))", "rgb(128, 191, 64)"); // hsl(90 50% 50%) +test_valid_value("color", "hsl(90 50% 50% / calc(-infinity))", "rgba(128, 191, 64, 0)"); // hsl(90 50% 50% / 0) +test_valid_value("color", "hsl(90 50% 50% / calc(0 / 0))", "rgba(128, 191, 64, 0)"); // hsl(90 50% 50% / 0) +</script> +</body> +</html> diff --git a/testing/web-platform/tests/css/css-color/parsing/color-valid-hwb.html b/testing/web-platform/tests/css/css-color/parsing/color-valid-hwb.html new file mode 100644 index 0000000000..374634c084 --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/color-valid-hwb.html @@ -0,0 +1,61 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 4: Parsing and serialization of colors using valid HWB notation</title> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#the-hwb-notation"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#resolving-sRGB-values"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#serializing-sRGB-values"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_valid_value("color", "hwb(120 30% 50%)", "rgb(77, 128, 77)"); +test_valid_value("color", "hwb(120 30% 50% / 0.5)", "rgba(77, 128, 77, 0.5)"); +test_valid_value("color", "hwb(none none none)", "rgb(255, 0, 0)"); +test_valid_value("color", "hwb(0 0% 0%)", "rgb(255, 0, 0)"); +test_valid_value("color", "hwb(none none none / none)", "rgba(255, 0, 0, 0)"); +test_valid_value("color", "hwb(0 0% 0% / 0)", "rgba(255, 0, 0, 0)"); +test_valid_value("color", "hwb(120 none none)", "rgb(0, 255, 0)"); +test_valid_value("color", "hwb(120 0% 0%)", "rgb(0, 255, 0)"); +test_valid_value("color", "hwb(120 80% none)", "rgb(204, 255, 204)"); +test_valid_value("color", "hwb(120 80% 0%)", "rgb(204, 255, 204)"); +test_valid_value("color", "hwb(120 none 50%)", "rgb(0, 128, 0)"); +test_valid_value("color", "hwb(120 0% 50%)", "rgb(0, 128, 0)"); +test_valid_value("color", "hwb(120 30% 50% / none)", "rgba(77, 128, 77, 0)"); +test_valid_value("color", "hwb(120 30% 50% / 0)", "rgba(77, 128, 77, 0)"); +test_valid_value("color", "hwb(none 100% 50% / none)", "rgba(170, 170, 170, 0)"); +test_valid_value("color", "hwb(0 100% 50% / 0)", "rgba(170, 170, 170, 0)"); + +// Test with number components. +test_valid_value("color", "hwb(120 30 50)", "rgb(77, 128, 77)"); +test_valid_value("color", "hwb(120 30 50 / 0.5)", "rgba(77, 128, 77, 0.5)"); +test_valid_value("color", "hwb(120 30% 50)", "rgb(77, 128, 77)"); +test_valid_value("color", "hwb(120 30% 50 / 0.5)", "rgba(77, 128, 77, 0.5)"); +test_valid_value("color", "hwb(120 30 50%)", "rgb(77, 128, 77)"); +test_valid_value("color", "hwb(120 30 50% / 0.5)", "rgba(77, 128, 77, 0.5)"); +test_valid_value("color", "hwb(120 none 50)", "rgb(0, 128, 0)"); +test_valid_value("color", "hwb(120 none 50 / 0.5)", "rgba(0, 128, 0, 0.5)"); +test_valid_value("color", "hwb(120 30 none)", "rgb(77, 255, 77)"); +test_valid_value("color", "hwb(120 30 none / 0.5)", "rgba(77, 255, 77, 0.5)"); +test_valid_value("color", "hwb(120 30 50 / none)", "rgba(77, 128, 77, 0)"); + +// Test that rounding happens properly. hwb(320deg 30% 40%) in sRGB has a blue +// channel of exactly one-half. +// 0.5 * 255 = 127.5. This value should be rounded UP to 128, not down to 127. +test_valid_value("color", "hwb(320deg 30% 40%)", "rgb(153, 77, 128)"); + +// Test non-finite values. calc(infinity) goes to upper bound while calc(-infinity) and NaN go to the lower bound. +// See: https://github.com/w3c/csswg-drafts/issues/8629 +test_valid_value("color", "hwb(calc(infinity) 20% 10%)", "rgb(230, 51, 51)"); // hwb(360 20% 10%) +test_valid_value("color", "hwb(calc(-infinity) 20% 10%)", "rgb(230, 51, 51)"); // hwb(0 20% 10%) +test_valid_value("color", "hwb(calc(0 / 0) 20% 10%)", "rgb(230, 51, 51)"); // hwb(0 20% 10%) +test_valid_value("color", "hwb(90 20% 10% / calc(infinity))", "rgb(140, 230, 51)"); // hwb(90 20% 10%) +test_valid_value("color", "hwb(90 20% 10% / calc(-infinity))", "rgba(140, 230, 51, 0)"); // hwb(90 20% 10% / 0) +test_valid_value("color", "hwb(90 20% 10% / calc(0 / 0))", "rgba(140, 230, 51, 0)"); // hwb(90 20% 10% / 0) + +</script> +</body> +</html> diff --git a/testing/web-platform/tests/css/css-color/parsing/color-valid-lab.html b/testing/web-platform/tests/css/css-color/parsing/color-valid-lab.html new file mode 100644 index 0000000000..95423f1965 --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/color-valid-lab.html @@ -0,0 +1,157 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 4: Parsing and serialization of colors using valid Lab notation</title> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#lab-colors"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#resolving-lab-lch-values"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#resolving-oklab-oklch-values"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#serializing-lab-lch"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#serializing-oklab-oklch"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<script> + +// lab() +test_valid_value("color", "lab(0 0 0)", "lab(0 0 0)"); +test_valid_value("color", "lab(0 0 0 / 1)", "lab(0 0 0)"); +test_valid_value("color", "lab(0 0 0 / 0.5)", "lab(0 0 0 / 0.5)"); +test_valid_value("color", "lab(20 0 10/0.5)", "lab(20 0 10 / 0.5)"); +test_valid_value("color", "lab(20 0 10/50%)", "lab(20 0 10 / 0.5)"); +test_valid_value("color", "lab(400 0 10/50%)", "lab(100 0 10 / 0.5)"); +test_valid_value("color", "lab(50 -160 160)", "lab(50 -160 160)"); +test_valid_value("color", "lab(50 -200 200)", "lab(50 -200 200)"); +test_valid_value("color", "lab(0 0 0 / -10%)", "lab(0 0 0 / 0)"); +test_valid_value("color", "lab(0 0 0 / 110%)", "lab(0 0 0)"); +test_valid_value("color", "lab(0 0 0 / 300%)", "lab(0 0 0)"); +test_valid_value("color", "lab(-40 0 0)", "lab(0 0 0)"); +test_valid_value("color", "lab(50 -20 0)", "lab(50 -20 0)"); +test_valid_value("color", "lab(50 0 -20)", "lab(50 0 -20)"); +test_valid_value("color", "lab(calc(50 * 3) calc(0.5 - 1) calc(1.5) / calc(-0.5 + 1))", "lab(100 -0.5 1.5 / 0.5)"); +test_valid_value("color", "lab(calc(-50 * 3) calc(0.5 + 1) calc(-1.5) / calc(-0.5 * 2))", "lab(0 1.5 -1.5 / 0)"); + +test_valid_value("color", "lab(none none none / none)", "lab(none none none / none)"); +test_valid_value("color", "lab(none none none)", "lab(none none none)"); +test_valid_value("color", "lab(20 none none / none)", "lab(20 none none / none)"); +test_valid_value("color", "lab(none none none / 0.5)", "lab(none none none / 0.5)"); +test_valid_value("color", "lab(0 0 0 / none)", "lab(0 0 0 / none)"); + +test_valid_value("color", "lab(calc(infinity) 0 0)", "lab(100 0 0)"); +test_valid_value("color", "lab(50 calc(infinity) 0)", "lab(50 calc(infinity) 0)"); +test_valid_value("color", "lab(50 calc(-infinity) 0)", "lab(50 calc(-infinity) 0)"); +test_valid_value("color", "lab(calc(NaN) 0 0)", "lab(calc(NaN) 0 0)"); +test_valid_value("color", "lab(calc(0 / 0) 0 0)", "lab(calc(NaN) 0 0)"); + +// oklab() +test_valid_value("color", "oklab(0 0 0)", "oklab(0 0 0)"); +test_valid_value("color", "oklab(0 0 0 / 1)", "oklab(0 0 0)"); +test_valid_value("color", "oklab(0 0 0 / 0.5)", "oklab(0 0 0 / 0.5)"); +test_valid_value("color", "oklab(0.2 0 0.1/0.5)", "oklab(0.2 0 0.1 / 0.5)"); +test_valid_value("color", "oklab(0.2 0 0.1/50%)", "oklab(0.2 0 0.1 / 0.5)"); +test_valid_value("color", "oklab(4 0 0.1/50%)", "oklab(1 0 0.1 / 0.5)"); +test_valid_value("color", "oklab(0.5 -1.6 1.6)", "oklab(0.5 -1.6 1.6)"); +test_valid_value("color", "oklab(0.5 -2 2)", "oklab(0.5 -2 2)"); +test_valid_value("color", "oklab(0 0 0 / -10%)", "oklab(0 0 0 / 0)"); +test_valid_value("color", "oklab(0 0 0 / 110%)", "oklab(0 0 0)"); +test_valid_value("color", "oklab(0 0 0 / 300%)", "oklab(0 0 0)"); +test_valid_value("color", "oklab(-0.4 0 0)", "oklab(0 0 0)"); +test_valid_value("color", "oklab(0.5 -2 0)", "oklab(0.5 -2 0)"); +test_valid_value("color", "oklab(0.5 0 -2)", "oklab(0.5 0 -2)"); +test_valid_value("color", "oklab(calc(0.5 * 3) calc(0.5 - 1) calc(1.5) / calc(-0.5 + 1))", "oklab(1 -0.5 1.5 / 0.5)"); +test_valid_value("color", "oklab(calc(-0.5 * 3) calc(0.5 + 1) calc(-1.5) / calc(-0.5 * 2))", "oklab(0 1.5 -1.5 / 0)"); + +test_valid_value("color", "oklab(none none none / none)", "oklab(none none none / none)"); +test_valid_value("color", "oklab(none none none)", "oklab(none none none)"); +test_valid_value("color", "oklab(0.2 none none / none)", "oklab(0.2 none none / none)"); +test_valid_value("color", "oklab(none none none / 0.5)", "oklab(none none none / 0.5)"); +test_valid_value("color", "oklab(0 0 0 / none)", "oklab(0 0 0 / none)"); + +// These tests validate the ranges of lab() vs. oklab() components +test_valid_value("color", "lab(20% -50% 90%/0.5)", "lab(20 -62.5 112.5 / 0.5)"); +test_valid_value("color", "oklab(20% 70% -80%/0.5)", "oklab(0.2 0.28 -0.32 / 0.5)"); + +test_valid_value("color", "oklab(calc(infinity) 0 0)", "oklab(1 0 0)"); +test_valid_value("color", "oklab(0.5 calc(infinity) 0)", "oklab(0.5 calc(infinity) 0)"); +test_valid_value("color", "oklab(0.5 calc(-infinity) 0)", "oklab(0.5 calc(-infinity) 0)"); +test_valid_value("color", "oklab(calc(NaN) 0 0)", "oklab(calc(NaN) 0 0)"); +test_valid_value("color", "oklab(calc(0 / 0) 0 0)", "oklab(calc(NaN) 0 0)"); + +// lch() +test_valid_value("color", "lch(0 0 0deg)", "lch(0 0 0)"); +test_valid_value("color", "lch(0 0 0deg / 1)", "lch(0 0 0)"); +test_valid_value("color", "lch(0 0 0deg / 0.5)", "lch(0 0 0 / 0.5)"); +test_valid_value("color", "lch(100 230 0deg / 0.5)", "lch(100 230 0 / 0.5)"); +test_valid_value("color", "lch(20 50 20deg/0.5)", "lch(20 50 20 / 0.5)"); +test_valid_value("color", "lch(20 50 20deg/50%)", "lch(20 50 20 / 0.5)"); +test_valid_value("color", "lch(10 20 20deg / -10%)", "lch(10 20 20 / 0)"); +test_valid_value("color", "lch(10 20 20deg / 110%)", "lch(10 20 20)"); +test_valid_value("color", "lch(10 20 1.28rad)", "lch(10 20 73.3386)"); +test_valid_value("color", "lch(10 20 380deg)", "lch(10 20 20)"); +test_valid_value("color", "lch(10 20 -340deg)", "lch(10 20 20)"); +test_valid_value("color", "lch(10 20 740deg)", "lch(10 20 20)"); +test_valid_value("color", "lch(10 20 -700deg)", "lch(10 20 20)"); +test_valid_value("color", "lch(-40 0 0)", "lch(0 0 0)"); +test_valid_value("color", "lch(20 -20 0)", "lch(20 0 0)"); +test_valid_value("color", "lch(0 0 0 / 0.5)", "lch(0 0 0 / 0.5)"); +test_valid_value("color", "lch(10 20 20 / 110%)", "lch(10 20 20)"); +test_valid_value("color", "lch(10 20 -700)", "lch(10 20 20)"); +test_valid_value("color", "lch(calc(50 * 3) calc(0.5 - 1) calc(20deg * 2) / calc(-0.5 + 1))", "lch(100 0 40 / 0.5)"); +test_valid_value("color", "lch(calc(-50 * 3) calc(0.5 + 1) calc(-20deg * 2) / calc(-0.5 * 2))", "lch(0 1.5 320 / 0)"); + +test_valid_value("color", "lch(none none none / none)", "lch(none none none / none)"); +test_valid_value("color", "lch(none none none)", "lch(none none none)"); +test_valid_value("color", "lch(20 none none / none)", "lch(20 none none / none)"); +test_valid_value("color", "lch(none none none / 0.5)", "lch(none none none / 0.5)"); +test_valid_value("color", "lch(0 0 0 / none)", "lch(0 0 0 / none)"); + +test_valid_value("color", "lch(calc(infinity) 0 0)", "lch(100 0 0)"); +test_valid_value("color", "lch(50 calc(infinity) 0)", "lch(50 calc(infinity) 0)"); +test_valid_value("color", "lch(50 calc(-infinity) 0)", "lch(50 0 0)"); +test_valid_value("color", "lch(calc(NaN) 0 0)", "lch(calc(NaN) 0 0)"); +test_valid_value("color", "lch(calc(0 / 0) 0 0)", "lch(calc(NaN) 0 0)"); + +// oklch() +test_valid_value("color", "oklch(0 0 0deg)", "oklch(0 0 0)"); +test_valid_value("color", "oklch(0 0 0deg / 1)", "oklch(0 0 0)"); +test_valid_value("color", "oklch(0 0 0deg / 0.5)", "oklch(0 0 0 / 0.5)"); +test_valid_value("color", "oklch(1 2.3 0deg / 0.5)", "oklch(1 2.3 0 / 0.5)"); +test_valid_value("color", "oklch(0.2 0.5 20deg/0.5)", "oklch(0.2 0.5 20 / 0.5)"); +test_valid_value("color", "oklch(0.2 0.5 20deg/50%)", "oklch(0.2 0.5 20 / 0.5)"); +test_valid_value("color", "oklch(0.1 0.2 20deg / -10%)", "oklch(0.1 0.2 20 / 0)"); +test_valid_value("color", "oklch(0.1 0.2 20deg / 110%)", "oklch(0.1 0.2 20)"); +test_valid_value("color", "oklch(0.1 0.2 1.28rad)", "oklch(0.1 0.2 73.3386)"); +test_valid_value("color", "oklch(0.1 0.2 380deg)", "oklch(0.1 0.2 20)"); +test_valid_value("color", "oklch(0.1 0.2 -340deg)", "oklch(0.1 0.2 20)"); +test_valid_value("color", "oklch(0.1 0.2 740deg)", "oklch(0.1 0.2 20)"); +test_valid_value("color", "oklch(0.1 0.2 -700deg)", "oklch(0.1 0.2 20)"); +test_valid_value("color", "oklch(-4 0 0)", "oklch(0 0 0)"); +test_valid_value("color", "oklch(0.2 -0.2 0)", "oklch(0.2 0 0)"); +test_valid_value("color", "oklch(0 0 0 / 0.5)", "oklch(0 0 0 / 0.5)"); +test_valid_value("color", "oklch(0.1 0.2 20 / 110%)", "oklch(0.1 0.2 20)"); +test_valid_value("color", "oklch(0.1 0.2 -700)", "oklch(0.1 0.2 20)"); +test_valid_value("color", "oklch(calc(0.5 * 3) calc(0.5 - 1) calc(20deg * 2) / calc(-0.5 + 1))", "oklch(1 0 40 / 0.5)"); +test_valid_value("color", "oklch(calc(-0.5 * 3) calc(0.5 + 1) calc(-20deg * 2) / calc(-0.5 * 2))", "oklch(0 1.5 320 / 0)"); + +test_valid_value("color", "oklch(none none none / none)", "oklch(none none none / none)"); +test_valid_value("color", "oklch(none none none)", "oklch(none none none)"); +test_valid_value("color", "oklch(0.2 none none / none)", "oklch(0.2 none none / none)"); +test_valid_value("color", "oklch(none none none / 0.5)", "oklch(none none none / 0.5)"); +test_valid_value("color", "oklch(0 0 0 / none)", "oklch(0 0 0 / none)"); + + +// These tests validate the ranges of lch() vs. oklch() lightness and chroma +test_valid_value("color", "lch(20% 80% 10/0.5)", "lch(20 120 10 / 0.5)"); +test_valid_value("color", "oklch(20% 60% 10/0.5)", "oklch(0.2 0.24 10 / 0.5)"); + +test_valid_value("color", "oklch(calc(infinity) 0 0)", "oklch(1 0 0)"); +test_valid_value("color", "oklch(0.5 calc(infinity) 0)", "oklch(0.5 calc(infinity) 0)"); +test_valid_value("color", "oklch(0.5 calc(-infinity) 0)", "oklch(0.5 0 0)"); +test_valid_value("color", "oklch(calc(NaN) 0 0)", "oklch(calc(NaN) 0 0)"); +test_valid_value("color", "oklch(calc(0 / 0) 0 0)", "oklch(calc(NaN) 0 0)"); + +</script> +</body> +</html> diff --git a/testing/web-platform/tests/css/css-color/parsing/color-valid-relative-color.html b/testing/web-platform/tests/css/css-color/parsing/color-valid-relative-color.html new file mode 100644 index 0000000000..543c2486c0 --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/color-valid-relative-color.html @@ -0,0 +1,738 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 5: Parsing and serialization of colors using valid relative color syntax</title> +<link rel="author" title="Sam Weinig" href="mailto:weinig@apple.com"> +<link rel="help" href="https://drafts.csswg.org/css-color-5/#relative-colors"> +<link rel="help" href="https://drafts.csswg.org/css-color-5/#serial-relative-color"> +<meta name="assert" content="colors using relative color syntax parse and serialize as expected"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +<script src="/css/support/color-testcommon.js"></script> +<style> + html { + --bg-color: blue; + --color: green; + --accent: lightseagreen; + --mycolor: orchid; + --mygray: lch(from var(--mycolor) l 0 h); + } +</style> +</head> +<body> +<script> + // rgb(from ...) + + // Testing no modifications. + fuzzy_test_valid_color(`rgb(from rebeccapurple r g b)`, `color(srgb 0.4 0.2 0.6)`); + fuzzy_test_valid_color(`rgb(from rebeccapurple r g b / alpha)`, `color(srgb 0.4 0.2 0.6)`); + fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) r g b / alpha)`, `color(srgb 0.2 0.4 0.6 / 0.8)`); + fuzzy_test_valid_color(`rgb(from hsl(120deg 20% 50% / .5) r g b / alpha)`, `color(srgb 0.4 0.6 0.4 / 0.5)`); + + // Test nesting relative colors. + fuzzy_test_valid_color(`rgb(from rgb(from rebeccapurple r g b) r g b)`, `color(srgb 0.4 0.2 0.6)`); + + // Testing replacement with 0. + fuzzy_test_valid_color(`rgb(from rebeccapurple 0 0 0)`, `color(srgb 0 0 0)`); + fuzzy_test_valid_color(`rgb(from rebeccapurple 0 0 0 / 0)`, `color(srgb 0 0 0 / 0)`); + fuzzy_test_valid_color(`rgb(from rebeccapurple 0 g b / alpha)`, `color(srgb 0 0.2 0.6)`); + fuzzy_test_valid_color(`rgb(from rebeccapurple r 0 b / alpha)`, `color(srgb 0.4 0 0.6)`); + fuzzy_test_valid_color(`rgb(from rebeccapurple r g 0 / alpha)`, `color(srgb 0.4 0.2 0)`); + fuzzy_test_valid_color(`rgb(from rebeccapurple r g b / 0)`, `color(srgb 0.4 0.2 0.6 / 0)`); + fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) 0 g b / alpha)`, `color(srgb 0 0.4 0.6 / 0.8)`); + fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) r 0 b / alpha)`, `color(srgb 0.2 0 0.6 / 0.8)`); + fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) r g 0 / alpha)`, `color(srgb 0.2 0.4 0 / 0.8)`); + fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) r g b / 0)`, `color(srgb 0.2 0.4 0.6 / 0)`); + + // Testing replacement with a number. + fuzzy_test_valid_color(`rgb(from rebeccapurple 25 g b / alpha)`, `color(srgb 0.098 0.2 0.6)`); + fuzzy_test_valid_color(`rgb(from rebeccapurple r 25 b / alpha)`, `color(srgb 0.4 0.098 0.6)`); + fuzzy_test_valid_color(`rgb(from rebeccapurple r g 25 / alpha)`, `color(srgb 0.4 0.2 0.098)`); + fuzzy_test_valid_color(`rgb(from rebeccapurple r g b / .25)`, `color(srgb 0.4 0.2 0.6 / 0.25)`); + fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) 25 g b / alpha)`, `color(srgb 0.098 0.4 0.6 / 0.8)`); + fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) r 25 b / alpha)`, `color(srgb 0.2 0.098 0.6 / 0.8)`); + fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) r g 25 / alpha)`, `color(srgb 0.2 0.4 0.098 / 0.8)`); + fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) r g b / .20)`, `color(srgb 0.2 0.4 0.6 / 0.2)`); + + // Testing replacement with a percentage. + fuzzy_test_valid_color(`rgb(from rebeccapurple 20% g b / alpha)`, `color(srgb 0.2 0.2 0.6)`); + fuzzy_test_valid_color(`rgb(from rebeccapurple r 20% b / alpha)`, `color(srgb 0.4 0.2 0.6)`); + fuzzy_test_valid_color(`rgb(from rebeccapurple r g 20% / alpha)`, `color(srgb 0.4 0.2 0.2)`); + fuzzy_test_valid_color(`rgb(from rebeccapurple r g b / 20%)`, `color(srgb 0.4 0.2 0.6 / 0.2)`); + fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) 20% g b / alpha)`, `color(srgb 0.2 0.4 0.6 / 0.8)`); + fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) r 20% b / alpha)`, `color(srgb 0.2 0.2 0.6 / 0.8)`); + fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) r g 20% / alpha)`, `color(srgb 0.2 0.4 0.2 / 0.8)`); + fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) r g b / 20%)`, `color(srgb 0.2 0.4 0.6 / 0.2)`); + + // Testing replacement with a number for r, g, b but percent for alpha. + fuzzy_test_valid_color(`rgb(from rebeccapurple 25 g b / 25%)`, `color(srgb 0.098 0.2 0.6 / 0.25)`); + fuzzy_test_valid_color(`rgb(from rebeccapurple r 25 b / 25%)`, `color(srgb 0.4 0.098 0.6 / 0.25)`); + fuzzy_test_valid_color(`rgb(from rebeccapurple r g 25 / 25%)`, `color(srgb 0.4 0.2 0.098 / 0.25)`); + fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) 25 g b / 25%)`, `color(srgb 0.098 0.4 0.6 / 0.25)`); + fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) r 25 b / 25%)`, `color(srgb 0.2 0.098 0.6 / 0.25)`); + fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) r g 25 / 25%)`, `color(srgb 0.2 0.4 0.098 / 0.25)`); + + // Testing permutation. + fuzzy_test_valid_color(`rgb(from rebeccapurple g b r)`, `color(srgb 0.2 0.6 0.4)`); + fuzzy_test_valid_color(`rgb(from rebeccapurple b alpha r / g)`, `color(srgb 0.6 1 0.4 / 0.2)`); + fuzzy_test_valid_color(`rgb(from rebeccapurple r r r / r)`, `color(srgb 0.4 0.4 0.4 / 0.4)`); + fuzzy_test_valid_color(`rgb(from rebeccapurple alpha alpha alpha / alpha)`, `color(srgb 1 1 1)`); + fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) g b r)`, `color(srgb 0.4 0.6 0.2 / 0.8)`); + fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) b alpha r / g)`, `color(srgb 0.6 0.8 0.2 / 0.4)`); + fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) r r r / r)`, `color(srgb 0.2 0.2 0.2 / 0.2)`); + fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) alpha alpha alpha / alpha)`, `color(srgb 0.8 0.8 0.8 / 0.8)`); + + // Testing mixes of number and percentage. (These would not be allowed in the non-relative syntax). + fuzzy_test_valid_color(`rgb(from rebeccapurple r 20% 10)`, `color(srgb 0.4 0.2 0.0392)`); + fuzzy_test_valid_color(`rgb(from rebeccapurple r 10 20%)`, `color(srgb 0.4 0.0392 0.2)`); + fuzzy_test_valid_color(`rgb(from rebeccapurple 0% 10 10)`, `color(srgb 0 0.0392 0.0392)`); + fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) r 20% 10)`, `color(srgb 0.2 0.2 0.0392 / 0.8)`); + fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) r 10 20%)`, `color(srgb 0.2 0.0392 0.2 / 0.8)`); + fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) 0% 10 10)`, `color(srgb 0 0.0392 0.0392 / 0.8)`); + + // r g b + // 102 51 153 + // 40% 20% 60% + // Testing with calc(). + fuzzy_test_valid_color(`rgb(from rebeccapurple calc(r) calc(g) calc(b))`, `color(srgb 0.4 0.2 0.6)`); + fuzzy_test_valid_color(`rgb(from rebeccapurple r calc(g * 2) 10)`, `color(srgb 0.4 0.4 0.0392)`); + fuzzy_test_valid_color(`rgb(from rebeccapurple b calc(r * .5) 10)`, `color(srgb 0.6 0.2 0.0392)`); + fuzzy_test_valid_color(`rgb(from rebeccapurple r calc(g * .5 + g * .5) 10)`, `color(srgb 0.4 0.2 0.0392)`); + fuzzy_test_valid_color(`rgb(from rebeccapurple r calc(b * .5 - g * .5) 10)`, `color(srgb 0.4 0.2 0.0392)`); + fuzzy_test_valid_color(`rgb(from rgb(20%, 40%, 60%, 80%) calc(r) calc(g) calc(b) / calc(alpha))`, `color(srgb 0.2 0.4 0.6 / 0.8)`); + + // Testing with 'none'. + fuzzy_test_valid_color(`rgb(from rebeccapurple none none none)`, `color(srgb none none none)`); + fuzzy_test_valid_color(`rgb(from rebeccapurple none none none / none)`, `color(srgb none none none / none)`); + fuzzy_test_valid_color(`rgb(from rebeccapurple r g none)`, `color(srgb 0.4 0.2 none)`); + fuzzy_test_valid_color(`rgb(from rebeccapurple r g none / alpha)`, `color(srgb 0.4 0.2 none)`); + fuzzy_test_valid_color(`rgb(from rebeccapurple r g b / none)`, `color(srgb 0.4 0.2 0.6 / none)`); + fuzzy_test_valid_color(`rgb(from rgb(20% 40% 60% / 80%) r g none / alpha)`, `color(srgb 0.2 0.4 none / 0.8)`); + fuzzy_test_valid_color(`rgb(from rgb(20% 40% 60% / 80%) r g b / none)`, `color(srgb 0.2 0.4 0.6 / none)`); + // FIXME: Clarify with spec editors if 'none' should pass through to the constants. + fuzzy_test_valid_color(`rgb(from rgb(none none none) r g b)`, `color(srgb 0 0 0)`); + fuzzy_test_valid_color(`rgb(from rgb(none none none / none) r g b / alpha)`, `color(srgb 0 0 0 / 0)`); + fuzzy_test_valid_color(`rgb(from rgb(20% none 60%) r g b)`, `color(srgb 0.2 0 0.6)`); + fuzzy_test_valid_color(`rgb(from rgb(20% 40% 60% / none) r g b / alpha)`, `color(srgb 0.2 0.4 0.6 / 0)`); + + // Testing with 'currentColor' + fuzzy_test_valid_color(`rgb(from currentColor r g b)`, `rgb(from currentColor r g b)`); + + // hsl(from ...) + + // Testing no modifications. + fuzzy_test_valid_color(`hsl(from rebeccapurple h s l)`, `color(srgb 0.4 0.2 0.6)`); + fuzzy_test_valid_color(`hsl(from rebeccapurple h s l / alpha)`, `color(srgb 0.4 0.2 0.6)`); + fuzzy_test_valid_color(`hsl(from rgb(20%, 40%, 60%, 80%) h s l / alpha)`, `color(srgb 0.2 0.4 0.6 / 0.8)`); + fuzzy_test_valid_color(`hsl(from hsl(120deg 20% 50% / .5) h s l / alpha)`, `color(srgb 0.4 0.6 0.4 / 0.5)`); + + // Test nesting relative colors. + fuzzy_test_valid_color(`hsl(from hsl(from rebeccapurple h s l) h s l)`, `color(srgb 0.4 0.2 0.6)`); + + // Testing replacement with 0. + fuzzy_test_valid_color(`hsl(from rebeccapurple 0 0% 0%)`, `color(srgb 0 0 0)`); + fuzzy_test_valid_color(`hsl(from rebeccapurple 0deg 0% 0%)`, `color(srgb 0 0 0)`); + fuzzy_test_valid_color(`hsl(from rebeccapurple 0 0% 0% / 0)`, `color(srgb 0 0 0 / 0)`); + fuzzy_test_valid_color(`hsl(from rebeccapurple 0deg 0% 0% / 0)`, `color(srgb 0 0 0 / 0)`); + fuzzy_test_valid_color(`hsl(from rebeccapurple 0 s l / alpha)`, `color(srgb 0.6 0.2 0.2)`); + fuzzy_test_valid_color(`hsl(from rebeccapurple 0deg s l / alpha)`, `color(srgb 0.6 0.2 0.2)`); + fuzzy_test_valid_color(`hsl(from rebeccapurple h 0% l / alpha)`, `color(srgb 0.4 0.4 0.4)`); + fuzzy_test_valid_color(`hsl(from rebeccapurple h s 0% / alpha)`, `color(srgb 0 0 0)`); + fuzzy_test_valid_color(`hsl(from rebeccapurple h s l / 0)`, `color(srgb 0.4 0.2 0.6 / 0)`); + fuzzy_test_valid_color(`hsl(from rgb(20%, 40%, 60%, 80%) 0 s l / alpha)`, `color(srgb 0.6 0.2 0.2 / 0.8)`); + fuzzy_test_valid_color(`hsl(from rgb(20%, 40%, 60%, 80%) 0deg s l / alpha)`, `color(srgb 0.6 0.2 0.2 / 0.8)`); + fuzzy_test_valid_color(`hsl(from rgb(20%, 40%, 60%, 80%) h 0% l / alpha)`, `color(srgb 0.4 0.4 0.4 / 0.8)`); + fuzzy_test_valid_color(`hsl(from rgb(20%, 40%, 60%, 80%) h s 0% / alpha)`, `color(srgb 0 0 0 / 0.8)`); + fuzzy_test_valid_color(`hsl(from rgb(20%, 40%, 60%, 80%) h s l / 0)`, `color(srgb 0.2 0.4 0.6 / 0)`); + + fuzzy_test_valid_color(`hsl(from rebeccapurple 25 s l / alpha)`, `color(srgb 0.6 0.3667 0.2)`); + fuzzy_test_valid_color(`hsl(from rebeccapurple 25deg s l / alpha)`, `color(srgb 0.6 0.3667 0.2)`); + fuzzy_test_valid_color(`hsl(from rebeccapurple h 20% l / alpha)`, `color(srgb 0.4 0.32 0.48)`); + // hsl(from rebeccapurple h s 20% / alpha) is equivalent to color(srgb 0.2 0.1 0.3). + // For the green channel: 0.1 * 255 = 25.5. This should get rounded towards infinity to 26. + // https://www.w3.org/TR/css-color-4/#rgb-functions + fuzzy_test_valid_color(`hsl(from rebeccapurple h s 20% / alpha)`, `color(srgb 0.2 0.1 0.3)`); + fuzzy_test_valid_color(`hsl(from rebeccapurple h s l / .25)`, `color(srgb 0.4 0.2 0.6 / 0.25)`); + fuzzy_test_valid_color(`hsl(from rgb(20%, 40%, 60%, 80%) 25 s l / alpha)`, `color(srgb 0.6 0.3667 0.2 / 0.8)`); + fuzzy_test_valid_color(`hsl(from rgb(20%, 40%, 60%, 80%) 25deg s l / alpha)`, `color(srgb 0.6 0.3667 0.2 / 0.8)`); + fuzzy_test_valid_color(`hsl(from rgb(20%, 40%, 60%, 80%) h 20% l / alpha)`, `color(srgb 0.32 0.4 0.48 / 0.8)`); + // hsl(from rgb(20%, 40%, 60%, 80%) h s 20% / alpha) is equivalent to color(srgb 0.1 0.2 0.3). + // For the red channel: 0.1 * 255 = 25.5. This should get rounded towards infinity to 26. + // https://www.w3.org/TR/css-color-4/#rgb-functions + fuzzy_test_valid_color(`hsl(from rgb(20%, 40%, 60%, 80%) h s 20% / alpha)`, `color(srgb 0.1 0.2 0.3 / 0.8)`); + fuzzy_test_valid_color(`hsl(from rgb(20%, 40%, 60%, 80%) h s l / .2)`, `color(srgb 0.2 0.4 0.6 / 0.2)`); + + // Testing valid permutation (types match). + fuzzy_test_valid_color(`hsl(from rebeccapurple h l s)`, `color(srgb 0.5 0.3 0.7)`); + fuzzy_test_valid_color(`hsl(from rebeccapurple h alpha l / s)`, `color(srgb 0.4 0 0.8 / 0.5)`); + fuzzy_test_valid_color(`hsl(from rebeccapurple h l l / l)`, `color(srgb 0.4 0.24 0.56 / 0.4)`); + fuzzy_test_valid_color(`hsl(from rebeccapurple h alpha alpha / alpha)`, `color(srgb 1 1 1)`); + fuzzy_test_valid_color(`hsl(from rgb(20%, 40%, 60%, 80%) h l s)`, `color(srgb 0.3 0.5 0.7 / 0.8)`); + fuzzy_test_valid_color(`hsl(from rgb(20%, 40%, 60%, 80%) h alpha l / s)`, `color(srgb 0.08 0.4 0.72 / 0.5)`); + fuzzy_test_valid_color(`hsl(from rgb(20%, 40%, 60%, 80%) h l l / l)`, `color(srgb 0.24 0.4 0.56 / 0.4)`); + fuzzy_test_valid_color(`hsl(from rgb(20%, 40%, 60%, 80%) h alpha alpha / alpha)`, `color(srgb 0.64 0.8 0.96 / 0.8)`); + + // Testing with calc(). + fuzzy_test_valid_color(`hsl(from rebeccapurple calc(h) calc(s) calc(l))`, `color(srgb 0.4 0.2 0.6)`); + fuzzy_test_valid_color(`hsl(from rgb(20%, 40%, 60%, 80%) calc(h) calc(s) calc(l) / calc(alpha))`, `color(srgb 0.2 0.4 0.6 / 0.8)`); + + // Testing with 'none'. + fuzzy_test_valid_color(`hsl(from rebeccapurple none none none)`, `color(srgb none none none)`); + fuzzy_test_valid_color(`hsl(from rebeccapurple none none none / none)`, `color(srgb none none none / none)`); + fuzzy_test_valid_color(`hsl(from rebeccapurple h s none)`, `color(srgb 0 0 none)`); + fuzzy_test_valid_color(`hsl(from rebeccapurple h s none / alpha)`, `color(srgb 0 0 none)`); + fuzzy_test_valid_color(`hsl(from rebeccapurple h s l / none)`, `color(srgb 0.4 0.2 0.6 / none)`); + fuzzy_test_valid_color(`hsl(from rebeccapurple none s l / alpha)`, `color(srgb none 0.2 0.2)`); + fuzzy_test_valid_color(`hsl(from hsl(120deg 20% 50% / .5) h s none / alpha)`, `color(srgb 0 0 none / 0.5)`); + fuzzy_test_valid_color(`hsl(from hsl(120deg 20% 50% / .5) h s l / none)`, `color(srgb 0.4 0.6 0.4 / none)`); + fuzzy_test_valid_color(`hsl(from hsl(120deg 20% 50% / .5) none s l / alpha)`, `color(srgb none 0.4 0.4 / 0.5)`); + // FIXME: Clarify with spec editors if 'none' should pass through to the constants. + fuzzy_test_valid_color(`hsl(from hsl(none none none) h s l)`, `color(srgb 0 0 0)`); + fuzzy_test_valid_color(`hsl(from hsl(none none none / none) h s l / alpha)`, `color(srgb 0 0 0 / 0)`); + fuzzy_test_valid_color(`hsl(from hsl(120deg none 50% / .5) h s l)`, `color(srgb 0.5 0.5 0.5 / 0.5)`); + fuzzy_test_valid_color(`hsl(from hsl(120deg 20% 50% / none) h s l / alpha)`, `color(srgb 0.4 0.6 0.4 / 0)`); + fuzzy_test_valid_color(`hsl(from hsl(none 20% 50% / .5) h s l / alpha)`, `color(srgb 0.6 0.4 0.4 / 0.5)`); + + // Testing with 'currentColor' + fuzzy_test_valid_color(`hsl(from currentColor h s l)`, `hsl(from currentColor h s l)`); + + // hwb(from ...) + + // Testing no modifications. + fuzzy_test_valid_color(`hwb(from rebeccapurple h w b)`, `color(srgb 0.4 0.2 0.6)`); + fuzzy_test_valid_color(`hwb(from rebeccapurple h w b / alpha)`, `color(srgb 0.4 0.2 0.6)`); + fuzzy_test_valid_color(`hwb(from rgb(20%, 40%, 60%, 80%) h w b / alpha)`, `color(srgb 0.2 0.4 0.6 / 0.8)`); + fuzzy_test_valid_color(`hwb(from hsl(120deg 20% 50% / .5) h w b / alpha)`, `color(srgb 0.4 0.6 0.4 / 0.5)`); + + // Test nesting relative colors. + fuzzy_test_valid_color(`hwb(from hwb(from rebeccapurple h w b) h w b)`, `color(srgb 0.4 0.2 0.6)`); + + // Testing replacement with 0. + fuzzy_test_valid_color(`hwb(from rebeccapurple 0 0% 0%)`, `color(srgb 1 0 0)`); + fuzzy_test_valid_color(`hwb(from rebeccapurple 0deg 0% 0%)`, `color(srgb 1 0 0)`); + fuzzy_test_valid_color(`hwb(from rebeccapurple 0 0% 0% / 0)`, `color(srgb 1 0 0 / 0)`); + fuzzy_test_valid_color(`hwb(from rebeccapurple 0deg 0% 0% / 0)`, `color(srgb 1 0 0 / 0)`); + fuzzy_test_valid_color(`hwb(from rebeccapurple 0 w b / alpha)`, `color(srgb 0.6 0.2 0.2)`); + fuzzy_test_valid_color(`hwb(from rebeccapurple 0deg w b / alpha)`, `color(srgb 0.6 0.2 0.2)`); + fuzzy_test_valid_color(`hwb(from rebeccapurple h 0% b / alpha)`, `color(srgb 0.3 0 0.6)`); + fuzzy_test_valid_color(`hwb(from rebeccapurple h w 0% / alpha)`, `color(srgb 0.6 0.2 1)`); + fuzzy_test_valid_color(`hwb(from rebeccapurple h w b / 0)`, `color(srgb 0.4 0.2 0.6 / 0)`); + fuzzy_test_valid_color(`hwb(from rgb(20%, 40%, 60%, 80%) 0 w b / alpha)`, `color(srgb 0.6 0.2 0.2 / 0.8)`); + fuzzy_test_valid_color(`hwb(from rgb(20%, 40%, 60%, 80%) 0deg w b / alpha)`, `color(srgb 0.6 0.2 0.2 / 0.8)`); + fuzzy_test_valid_color(`hwb(from rgb(20%, 40%, 60%, 80%) h 0% b / alpha)`, `color(srgb 0 0.3 0.6 / 0.8)`); + fuzzy_test_valid_color(`hwb(from rgb(20%, 40%, 60%, 80%) h w 0% / alpha)`, `color(srgb 0.2 0.6 1 / 0.8)`); + fuzzy_test_valid_color(`hwb(from rgb(20%, 40%, 60%, 80%) h w b / 0)`, `color(srgb 0.2 0.4 0.6 / 0)`); + + // Testing replacement with a constant. + fuzzy_test_valid_color(`hwb(from rebeccapurple 25 w b / alpha)`, `color(srgb 0.6 0.3667 0.2)`); + fuzzy_test_valid_color(`hwb(from rebeccapurple 25deg w b / alpha)`, `color(srgb 0.6 0.3667 0.2)`); + fuzzy_test_valid_color(`hwb(from rebeccapurple h 20% b / alpha)`, `color(srgb 0.4 0.2 0.6)`); + fuzzy_test_valid_color(`hwb(from rebeccapurple h w 20% / alpha)`, `color(srgb 0.5 0.2 0.8)`); + fuzzy_test_valid_color(`hwb(from rebeccapurple h w b / .2)`, `color(srgb 0.4 0.2 0.6 / 0.2)`); + fuzzy_test_valid_color(`hwb(from rgb(20%, 40%, 60%, 80%) 25 w b / alpha)`, `color(srgb 0.6 0.3667 0.2 / 0.8)`); + fuzzy_test_valid_color(`hwb(from rgb(20%, 40%, 60%, 80%) 25deg w b / alpha)`, `color(srgb 0.6 0.3667 0.2 / 0.8)`); + fuzzy_test_valid_color(`hwb(from rgb(20%, 40%, 60%, 80%) h 20% b / alpha)`, `color(srgb 0.2 0.4 0.6 / 0.8)`); + fuzzy_test_valid_color(`hwb(from rgb(20%, 40%, 60%, 80%) h w 20% / alpha)`, `color(srgb 0.2 0.5 0.8 / 0.8)`); + fuzzy_test_valid_color(`hwb(from rgb(20%, 40%, 60%, 80%) h w b / .2)`, `color(srgb 0.2 0.4 0.6 / 0.2)`); + + // Testing valid permutation (types match). + fuzzy_test_valid_color(`hwb(from rebeccapurple h b w)`, `color(srgb 0.6 0.4 0.8)`); + fuzzy_test_valid_color(`hwb(from rebeccapurple h alpha w / b)`, `color(srgb 0.8333 0.8333 0.8333 / 0.4)`); + fuzzy_test_valid_color(`hwb(from rebeccapurple h w w / w)`, `color(srgb 0.5 0.2 0.8 / 0.2)`); + fuzzy_test_valid_color(`hwb(from rebeccapurple h alpha alpha / alpha)`, `color(srgb 0.5 0.5 0.5)`); + fuzzy_test_valid_color(`hwb(from rgb(20%, 40%, 60%, 80%) h b w)`, `color(srgb 0.4 0.6 0.8 / 0.8)`); + fuzzy_test_valid_color(`hwb(from rgb(20%, 40%, 60%, 80%) h alpha w / b)`, `color(srgb 0.8 0.8 0.8 / 0.4)`); + fuzzy_test_valid_color(`hwb(from rgb(20%, 40%, 60%, 80%) h w w / w)`, `color(srgb 0.2 0.5 0.8 / 0.2)`); + fuzzy_test_valid_color(`hwb(from rgb(20%, 40%, 60%, 80%) h alpha alpha / alpha)`, `color(srgb 0.5 0.5 0.5 / 0.8)`); + + // Testing with calc(). + fuzzy_test_valid_color(`hwb(from rebeccapurple calc(h) calc(w) calc(b))`, `color(srgb 0.4 0.2 0.6)`); + fuzzy_test_valid_color(`hwb(from rgb(20%, 40%, 60%, 80%) calc(h) calc(w) calc(b) / calc(alpha))`, `color(srgb 0.2 0.4 0.6 / 0.8)`); + + // Testing with 'none'. + fuzzy_test_valid_color(`hwb(from rebeccapurple none none none)`, `color(srgb none none none)`); + fuzzy_test_valid_color(`hwb(from rebeccapurple none none none / none)`, `color(srgb none none none / none)`); + fuzzy_test_valid_color(`hwb(from rebeccapurple h w none)`, `color(srgb 0.6 0.2 none)`); + fuzzy_test_valid_color(`hwb(from rebeccapurple h w none / alpha)`, `color(srgb 0.6 0.2 none)`); + fuzzy_test_valid_color(`hwb(from rebeccapurple h w b / none)`, `color(srgb 0.4 0.2 0.6 / none)`); + fuzzy_test_valid_color(`hwb(from rebeccapurple none w b / alpha)`, `color(srgb none 0.2 0.2)`); + fuzzy_test_valid_color(`hwb(from hwb(120deg 20% 50% / .5) h w none / alpha)`, `color(srgb 0.2 1 none / 0.5)`); + fuzzy_test_valid_color(`hwb(from hwb(120deg 20% 50% / .5) h w b / none)`, `color(srgb 0.2 0.5 0.2 / none)`); + fuzzy_test_valid_color(`hwb(from hwb(120deg 20% 50% / .5) none w b / alpha)`, `color(srgb none 0.2 0.2 / 0.5)`); + // FIXME: Clarify with spec editors if 'none' should pass through to the constants. + fuzzy_test_valid_color(`hwb(from hwb(none none none) h w b)`, `color(srgb 1 0 0)`); + fuzzy_test_valid_color(`hwb(from hwb(none none none / none) h w b / alpha)`, `color(srgb 1 0 0 / 0)`); + fuzzy_test_valid_color(`hwb(from hwb(120deg none 50% / .5) h w b)`, `color(srgb 0 0.5 0 / 0.5)`); + fuzzy_test_valid_color(`hwb(from hwb(120deg 20% 50% / none) h w b / alpha)`, `color(srgb 0.2 0.5 0.2 / 0)`); + fuzzy_test_valid_color(`hwb(from hwb(none 20% 50% / .5) h w b / alpha)`, `color(srgb 0.5 0.2 0.2 / 0.5)`); + + // Testing with 'currentColor' + fuzzy_test_valid_color(`hwb(from currentColor h w b)`, `hwb(from currentColor h w b)`); + + // lab() + + // Testing no modifications. + fuzzy_test_valid_color(`lab(from lab(25 20 50) l a b)`, `lab(25 20 50)`); + fuzzy_test_valid_color(`lab(from lab(25 20 50) l a b / alpha)`, `lab(25 20 50)`); + fuzzy_test_valid_color(`lab(from lab(25 20 50 / 40%) l a b / alpha)`, `lab(25 20 50 / 0.4)`); + fuzzy_test_valid_color(`lab(from lab(200 300 400 / 500%) l a b / alpha)`, `lab(100 300 400)`); + fuzzy_test_valid_color(`lab(from lab(-200 -300 -400 / -500%) l a b / alpha)`, `lab(0 -300 -400 / 0)`); + + // Test nesting relative colors. + fuzzy_test_valid_color(`lab(from lab(from lab(25 20 50) l a b) l a b)`, `lab(25 20 50)`); + + // Testing non-lab origin to see conversion. + fuzzy_test_valid_color(`lab(from color(display-p3 0 0 0) l a b / alpha)`, `lab(0 0 0)`); + + // Testing replacement with 0. + fuzzy_test_valid_color(`lab(from lab(25 20 50) 0 0 0)`, `lab(0 0 0)`); + fuzzy_test_valid_color(`lab(from lab(25 20 50) 0 0 0 / 0)`, `lab(0 0 0 / 0)`); + fuzzy_test_valid_color(`lab(from lab(25 20 50) 0 a b / alpha)`, `lab(0 20 50)`); + fuzzy_test_valid_color(`lab(from lab(25 20 50) l 0 b / alpha)`, `lab(25 0 50)`); + fuzzy_test_valid_color(`lab(from lab(25 20 50) l a 0 / alpha)`, `lab(25 20 0)`); + fuzzy_test_valid_color(`lab(from lab(25 20 50) l a b / 0)`, `lab(25 20 50 / 0)`); + fuzzy_test_valid_color(`lab(from lab(25 20 50 / 40%) 0 a b / alpha)`, `lab(0 20 50 / 0.4)`); + fuzzy_test_valid_color(`lab(from lab(25 20 50 / 40%) l 0 b / alpha)`, `lab(25 0 50 / 0.4)`); + fuzzy_test_valid_color(`lab(from lab(25 20 50 / 40%) l a 0 / alpha)`, `lab(25 20 0 / 0.4)`); + fuzzy_test_valid_color(`lab(from lab(25 20 50 / 40%) l a b / 0)`, `lab(25 20 50 / 0)`); + + // Testing replacement with a constant. + fuzzy_test_valid_color(`lab(from lab(25 20 50) 35 a b / alpha)`, `lab(35 20 50)`); + fuzzy_test_valid_color(`lab(from lab(25 20 50) l 35 b / alpha)`, `lab(25 35 50)`); + fuzzy_test_valid_color(`lab(from lab(25 20 50) l a 35 / alpha)`, `lab(25 20 35)`); + fuzzy_test_valid_color(`lab(from lab(25 20 50) l a b / .35)`, `lab(25 20 50 / 0.35)`); + fuzzy_test_valid_color(`lab(from lab(25 20 50 / 40%) 35 a b / alpha)`, `lab(35 20 50 / 0.4)`); + fuzzy_test_valid_color(`lab(from lab(25 20 50 / 40%) l 35 b / alpha)`, `lab(25 35 50 / 0.4)`); + fuzzy_test_valid_color(`lab(from lab(25 20 50 / 40%) l a 35 / alpha)`, `lab(25 20 35 / 0.4)`); + fuzzy_test_valid_color(`lab(from lab(25 20 50 / 40%) l a b / .35)`, `lab(25 20 50 / 0.35)`); + fuzzy_test_valid_color(`lab(from lab(0.7 45 30 / 40%) 200 300 400 / 500)`, `lab(100 300 400)`); + fuzzy_test_valid_color(`lab(from lab(0.7 45 30 / 40%) -200 -300 -400 / -500)`, `lab(0 -300 -400 / 0)`); + + // Testing valid permutation (types match). + fuzzy_test_valid_color(`lab(from lab(25 20 50) l b a)`, `lab(25 50 20)`); + fuzzy_test_valid_color(`lab(from lab(25 20 50) l a a / a)`, `lab(25 20 20)`); + fuzzy_test_valid_color(`lab(from lab(25 20 50 / 40%) l b a)`, `lab(25 50 20 / 0.4)`); + fuzzy_test_valid_color(`lab(from lab(25 20 50 / 40%) l a a / a)`, `lab(25 20 20)`); + + // Testing with calc(). + fuzzy_test_valid_color(`lab(from lab(25 20 50) calc(l) calc(a) calc(b))`, `lab(25 20 50)`); + fuzzy_test_valid_color(`lab(from lab(25 20 50 / 40%) calc(l) calc(a) calc(b) / calc(alpha))`, `lab(25 20 50 / 0.4)`); + fuzzy_test_valid_color(`lab(from lab(50 -30 40) calc(l - 20) a b)`, `lab(30 -30 40)`); + fuzzy_test_valid_color(`lab(from lab(50 -30 40) l calc(a / 3) calc(b / 2))`, `lab(50 -10 20)`); + + // Testing with 'none'. + fuzzy_test_valid_color(`lab(from lab(25 20 50) none none none)`, `lab(none none none)`); + fuzzy_test_valid_color(`lab(from lab(25 20 50) none none none / none)`, `lab(none none none / none)`); + fuzzy_test_valid_color(`lab(from lab(25 20 50) l a none)`, `lab(25 20 none)`); + fuzzy_test_valid_color(`lab(from lab(25 20 50) l a none / alpha)`, `lab(25 20 none)`); + fuzzy_test_valid_color(`lab(from lab(25 20 50) l a b / none)`, `lab(25 20 50 / none)`); + fuzzy_test_valid_color(`lab(from lab(25 20 50 / 40%) l a none / alpha)`, `lab(25 20 none / 0.4)`); + fuzzy_test_valid_color(`lab(from lab(25 20 50 / 40%) l a b / none)`, `lab(25 20 50 / none)`); + // FIXME: Clarify with spec editors if 'none' should pass through to the constants. + fuzzy_test_valid_color(`lab(from lab(none none none) l a b)`, `lab(0 0 0)`); + fuzzy_test_valid_color(`lab(from lab(none none none / none) l a b / alpha)`, `lab(0 0 0 / 0)`); + fuzzy_test_valid_color(`lab(from lab(25 none 50) l a b)`, `lab(25 0 50)`); + fuzzy_test_valid_color(`lab(from lab(25 20 50 / none) l a b / alpha)`, `lab(25 20 50 / 0)`); + + // Testing with 'currentColor' + fuzzy_test_valid_color(`lab(from currentColor l a b)`, `lab(from currentColor l a b)`); + + // oklab() + + // Testing no modifications. + fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) l a b)`, `oklab(0.25 0.2 0.5)`); + fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) l a b / alpha)`, `oklab(0.25 0.2 0.5)`); + fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l a b / alpha)`, `oklab(0.25 0.2 0.5 / 0.4)`); + fuzzy_test_valid_color(`oklab(from oklab(2 3 4 / 500%) l a b / alpha)`, `oklab(1 3 4)`); + fuzzy_test_valid_color(`oklab(from oklab(-2 -3 -4 / -500%) l a b / alpha)`, `oklab(0 -3 -4 / 0)`); + + // Test nesting relative colors. + fuzzy_test_valid_color(`oklab(from oklab(from oklab(0.25 0.2 0.5) l a b) l a b)`, `oklab(0.25 0.2 0.5)`); + + // Testing non-oklab origin to see conversion. + fuzzy_test_valid_color(`oklab(from color(display-p3 0 0 0) l a b / alpha)`, `oklab(0 0 0)`); + + // Testing replacement with 0. + fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) 0 0 0)`, `oklab(0 0 0)`); + fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) 0 0 0 / 0)`, `oklab(0 0 0 / 0)`); + fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) 0 a b / alpha)`, `oklab(0 0.2 0.5)`); + fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) l 0 b / alpha)`, `oklab(0.25 0 0.5)`); + fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) l a 0 / alpha)`, `oklab(0.25 0.2 0)`); + fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) l a b / 0)`, `oklab(0.25 0.2 0.5 / 0)`); + fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) 0 a b / alpha)`, `oklab(0 0.2 0.5 / 0.4)`); + fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l 0 b / alpha)`, `oklab(0.25 0 0.5 / 0.4)`); + fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l a 0 / alpha)`, `oklab(0.25 0.2 0 / 0.4)`); + fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l a b / 0)`, `oklab(0.25 0.2 0.5 / 0)`); + + // Testing replacement with a constant. + fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) 0.35 a b / alpha)`, `oklab(0.35 0.2 0.5)`); + fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) l 0.35 b / alpha)`, `oklab(0.25 0.35 0.5)`); + fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) l a 0.35 / alpha)`, `oklab(0.25 0.2 0.35)`); + fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) l a b / .35)`, `oklab(0.25 0.2 0.5 / 0.35)`); + fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) 0.35 a b / alpha)`, `oklab(0.35 0.2 0.5 / 0.4)`); + fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l 0.35 b / alpha)`, `oklab(0.25 0.35 0.5 / 0.4)`); + fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l a 0.35 / alpha)`, `oklab(0.25 0.2 0.35 / 0.4)`); + fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l a b / .35)`, `oklab(0.25 0.2 0.5 / 0.35)`); + fuzzy_test_valid_color(`oklab(from oklab(0.7 0.45 0.3 / 40%) 2 3 4 / 500)`, `oklab(1 3 4)`); + fuzzy_test_valid_color(`oklab(from oklab(0.7 0.45 0.3 / 40%) -2 -3 -4 / -500)`, `oklab(0 -3 -4 / 0)`); + + // Testing valid permutation (types match). + fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) l b a)`, `oklab(0.25 0.5 0.2)`); + fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) l a a / a)`, `oklab(0.25 0.2 0.2 / 0.2)`); + fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l b a)`, `oklab(0.25 0.5 0.2 / 0.4)`); + fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l a a / a)`, `oklab(0.25 0.2 0.2 / 0.2)`); + + // Testing with calc(). + fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) calc(l) calc(a) calc(b))`, `oklab(0.25 0.2 0.5)`); + fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) calc(l) calc(a) calc(b) / calc(alpha))`, `oklab(0.25 0.2 0.5 / 0.4)`); + fuzzy_test_valid_color(`oklab(from oklab(0.7 0.25 -0.15) calc(l - 0.2) a b)`, `oklab(0.5 0.25 -0.15)`); + fuzzy_test_valid_color(`oklab(from oklab(0.7 0.25 -0.15) l calc(a / 2) calc(b / 3))`, `oklab(0.7 0.125 -0.075)`); + + // Testing with 'none'. + fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) none none none)`, `oklab(none none none)`); + fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) none none none / none)`, `oklab(none none none / none)`); + fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) l a none)`, `oklab(0.25 0.2 none)`); + fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) l a none / alpha)`, `oklab(0.25 0.2 none)`); + fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5) l a b / none)`, `oklab(0.25 0.2 0.5 / none)`); + fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l a none / alpha)`, `oklab(0.25 0.2 none / 0.4)`); + fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5 / 40%) l a b / none)`, `oklab(0.25 0.2 0.5 / none)`); + // FIXME: Clarify with spec editors if 'none' should pass through to the constants. + fuzzy_test_valid_color(`oklab(from oklab(none none none) l a b)`, `oklab(0 0 0)`); + fuzzy_test_valid_color(`oklab(from oklab(none none none / none) l a b / alpha)`, `oklab(0 0 0 / 0)`); + fuzzy_test_valid_color(`oklab(from oklab(0.25 none 0.5) l a b)`, `oklab(0.25 0 0.5)`); + fuzzy_test_valid_color(`oklab(from oklab(0.25 0.2 0.5 / none) l a b / alpha)`, `oklab(0.25 0.2 0.5 / 0)`); + + // Testing with 'currentColor' + fuzzy_test_valid_color(`oklab(from currentColor l a b)`, `oklab(from currentColor l a b)`); + + // lch() + + // Testing no modifications. + fuzzy_test_valid_color(`lch(from lch(0.7 45 30) l c h)`, `lch(0.7 45 30)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30) l c h / alpha)`, `lch(0.7 45 30)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) l c h / alpha)`, `lch(0.7 45 30 / 0.4)`); + fuzzy_test_valid_color(`lch(from lch(200 300 400 / 500%) l c h / alpha)`, `lch(100 300 40)`); + fuzzy_test_valid_color(`lch(from lch(-200 -300 -400 / -500%) l c h / alpha)`, `lch(0 0 320 / 0)`); + + // Test nesting relative colors. + fuzzy_test_valid_color(`lch(from lch(from lch(0.7 45 30) l c h) l c h)`, `lch(0.7 45 30)`); + + // Testing non-sRGB origin colors (no gamut mapping will happen since the destination is not a bounded RGB color space). + fuzzy_test_valid_color(`lch(from color(display-p3 0 0 0) l c h / alpha)`, `lch(0 0 0)`); + fuzzy_test_valid_color(`lch(from lab(0.7 45 30) l c h / alpha)`, `lch(0.7 54.08327 33.690067)`); + + // Testing replacement with 0. + fuzzy_test_valid_color(`lch(from lch(0.7 45 30) 0 0 0)`, `lch(0 0 0)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30) 0 0 0deg)`, `lch(0 0 0)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30) 0 0 0 / 0)`, `lch(0 0 0 / 0)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30) 0 0 0deg / 0)`, `lch(0 0 0 / 0)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30) 0 c h / alpha)`, `lch(0 45 30)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30) l 0 h / alpha)`, `lch(0.7 0 30)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30) l c 0 / alpha)`, `lch(0.7 45 0)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30) l c 0deg / alpha)`, `lch(0.7 45 0)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30) l c h / 0)`, `lch(0.7 45 30 / 0)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) 0 c h / alpha)`, `lch(0 45 30 / 0.4)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) l 0 h / alpha)`, `lch(0.7 0 30 / 0.4)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) l c 0 / alpha)`, `lch(0.7 45 0 / 0.4)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) l c 0deg / alpha)`, `lch(0.7 45 0 / 0.4)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) l c h / 0)`, `lch(0.7 45 30 / 0)`); + + // Testing replacement with a constant. + fuzzy_test_valid_color(`lch(from lch(0.7 45 30) 25 c h / alpha)`, `lch(25 45 30)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30) l 25 h / alpha)`, `lch(0.7 25 30)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30) l c 25 / alpha)`, `lch(0.7 45 25)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30) l c 25deg / alpha)`, `lch(0.7 45 25)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30) l c h / .25)`, `lch(0.7 45 30 / 0.25)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) 25 c h / alpha)`, `lch(25 45 30 / 0.4)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) l 25 h / alpha)`, `lch(0.7 25 30 / 0.4)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) l c 25 / alpha)`, `lch(0.7 45 25 / 0.4)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) l c 25deg / alpha)`, `lch(0.7 45 25 / 0.4)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) l c h / .25)`, `lch(0.7 45 30 / 0.25)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) 200 300 400 / 500)`, `lch(100 300 40)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) -200 -300 -400 / -500)`, `lch(0 0 320 / 0)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) 50 120 400deg / 500)`, `lch(50 120 40)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) 50 120 -400deg / -500)`, `lch(50 120 320 / 0)`); + + // Testing valid permutation (types match). + // NOTE: 'c' is a vaild hue, as hue is <angle>|<number>. + fuzzy_test_valid_color(`lch(from lch(.7 45 30) l c c / alpha)`, `lch(0.7 45 45)`); + fuzzy_test_valid_color(`lch(from lch(.7 45 30 / 40%) l c c / alpha)`, `lch(0.7 45 45 / 0.4)`); + + // Testing with calc(). + fuzzy_test_valid_color(`lch(from lch(0.7 45 30) calc(l) calc(c) calc(h))`, `lch(0.7 45 30)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) calc(l) calc(c) calc(h) / calc(alpha))`, `lch(0.7 45 30 / 0.4)`); + fuzzy_test_valid_color(`lch(from lch(50 100 300) calc(l - 20) c h)`, `lch(30 100 300)`); + fuzzy_test_valid_color(`lch(from lch(50 100 300) l calc(c / 2) h)`, `lch(50 50 300)`); + fuzzy_test_valid_color(`lch(from lch(50 100 300) l c calc(h * 2.5))`, `lch(50 100 30)`); + + // Testing with 'none'. + fuzzy_test_valid_color(`lch(from lch(0.7 45 30) none none none)`, `lch(none none none)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30) none none none / none)`, `lch(none none none / none)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30) l c none)`, `lch(0.7 45 none)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30) l c none / alpha)`, `lch(0.7 45 none)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30) l c h / none)`, `lch(0.7 45 30 / none)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) l c none / alpha)`, `lch(0.7 45 none / 0.4)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / 40%) l c h / none)`, `lch(0.7 45 30 / none)`); + // FIXME: Clarify with spec editors if 'none' should pass through to the constants. + fuzzy_test_valid_color(`lch(from lch(none none none) l c h)`, `lch(0 0 0)`); + fuzzy_test_valid_color(`lch(from lch(none none none / none) l c h / alpha)`, `lch(0 0 0 / 0)`); + fuzzy_test_valid_color(`lch(from lch(0.7 none 30) l c h)`, `lch(0.7 0 30)`); + fuzzy_test_valid_color(`lch(from lch(0.7 45 30 / none) l c h / alpha)`, `lch(0.7 45 30 / 0)`); + + // Testing with 'currentColor' + fuzzy_test_valid_color(`lch(from currentColor) l c h)`, `lch(from currentColor) l c h)`); + + // oklch() + + // Testing no modifications. + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) l c h)`, `oklch(0.7 0.45 30)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) l c h / alpha)`, `oklch(0.7 0.45 30)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c h / alpha)`, `oklch(0.7 0.45 30 / 0.4)`); + fuzzy_test_valid_color(`oklch(from oklch(2 3 400 / 500%) l c h / alpha)`, `oklch(1 3 40)`); + fuzzy_test_valid_color(`oklch(from oklch(-2 -3 -400 / -500%) l c h / alpha)`, `oklch(0 0 320 / 0)`); + + // Test nesting relative colors. + fuzzy_test_valid_color(`oklch(from oklch(from oklch(0.7 0.45 30) l c h) l c h)`, `oklch(0.7 0.45 30)`); + + // Testing non-sRGB origin colors (no gamut mapping will happen since the destination is not a bounded RGB color space). + fuzzy_test_valid_color(`oklch(from color(display-p3 0 0 0) l c h / alpha)`, `oklch(0 0 0)`); + // TODO: redo conversion with oklab(0.7 0.45 0.3) + fuzzy_test_valid_color(`oklch(from oklab(0.7 45 30) l c h / alpha)`, `oklch(0.7 54.08327 33.690067)`); + + // Testing replacement with 0. + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) 0 0 0)`, `oklch(0 0 0)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) 0 0 0deg)`, `oklch(0 0 0)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) 0 0 0 / 0)`, `oklch(0 0 0 / 0)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) 0 0 0deg / 0)`, `oklch(0 0 0 / 0)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) 0 c h / alpha)`, `oklch(0 0.45 30)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) l 0 h / alpha)`, `oklch(0.7 0 30)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) l c 0 / alpha)`, `oklch(0.7 0.45 0)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) l c 0deg / alpha)`, `oklch(0.7 0.45 0)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) l c h / 0)`, `oklch(0.7 0.45 30 / 0)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) 0 c h / alpha)`, `oklch(0 0.45 30 / 0.4)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) l 0 h / alpha)`, `oklch(0.7 0 30 / 0.4)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c 0 / alpha)`, `oklch(0.7 0.45 0 / 0.4)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c 0deg / alpha)`, `oklch(0.7 0.45 0 / 0.4)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c h / 0)`, `oklch(0.7 0.45 30 / 0)`); + + // Testing replacement with a constant. + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) 0.25 c h / alpha)`, `oklch(0.25 0.45 30)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) l 0.25 h / alpha)`, `oklch(0.7 0.25 30)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) l c 0.25 / alpha)`, `oklch(0.7 0.45 0.25)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) l c 25deg / alpha)`, `oklch(0.7 0.45 25)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) l c h / .25)`, `oklch(0.7 0.45 30 / 0.25)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) 0.25 c h / alpha)`, `oklch(0.25 0.45 30 / 0.4)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) l 0.25 h / alpha)`, `oklch(0.7 0.25 30 / 0.4)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c 0.25 / alpha)`, `oklch(0.7 0.45 0.25 / 0.4)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c 25deg / alpha)`, `oklch(0.7 0.45 25 / 0.4)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c h / .25)`, `oklch(0.7 0.45 30 / 0.25)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) 2 3 400 / 500)`, `oklch(1 3 40)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) -2 -3 -400 / -500)`, `oklch(0 0 320 / 0)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) 0.5 1.2 400deg / 500)`, `oklch(0.5 1.2 40)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) 0.5 1.2 -400deg / -500)`, `oklch(0.5 1.2 320 / 0)`); + + // Testing valid permutation (types match). + // NOTE: 'c' is a vaild hue, as hue is <angle>|<number>. + fuzzy_test_valid_color(`oklch(from oklch(.7 0.45 30) l c c / alpha)`, `oklch(0.7 0.45 0.45)`); + fuzzy_test_valid_color(`oklch(from oklch(.7 0.45 30 / 40%) l c c / alpha)`, `oklch(0.7 0.45 0.45 / 0.4)`); + + // Testing with calc(). + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) calc(l) calc(c) calc(h))`, `oklch(0.7 0.45 30)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) calc(l) calc(c) calc(h) / calc(alpha))`, `oklch(0.7 0.45 30 / 0.4)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.2 300) calc(l - 0.2) c h)`, `oklch(0.5 0.2 300)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.2 300) l calc(c / 2) h)`, `oklch(0.7 0.1 300)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.2 300) l c calc(h * 2.5))`, `oklch(0.7 0.2 30)`); + + // Testing with 'none'. + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) none none none)`, `oklch(none none none)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) none none none / none)`, `oklch(none none none / none)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) l c none)`, `oklch(0.7 0.45 none)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) l c none / alpha)`, `oklch(0.7 0.45 none)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30) l c h / none)`, `oklch(0.7 0.45 30 / none)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c none / alpha)`, `oklch(0.7 0.45 none / 0.4)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / 40%) l c h / none)`, `oklch(0.7 0.45 30 / none)`); + // FIXME: Clarify with spec editors if 'none' should pass through to the constants. + fuzzy_test_valid_color(`oklch(from oklch(none none none) l c h)`, `oklch(0 0 0)`); + fuzzy_test_valid_color(`oklch(from oklch(none none none / none) l c h / alpha)`, `oklch(0 0 0 / 0)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 none 30) l c h)`, `oklch(0.7 0 30)`); + fuzzy_test_valid_color(`oklch(from oklch(0.7 0.45 30 / none) l c h / alpha)`, `oklch(0.7 0.45 30 / 0)`); + + // Testing with 'currentColor' + fuzzy_test_valid_color(`oklch(from currentColor l c h)`, `oklch(from currentColor l c h)`); + + for (const colorSpace of [ "srgb", "srgb-linear", "a98-rgb", "rec2020", "prophoto-rgb", "display-p3" ]) { + // Testing no modifications. + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b)`, `color(${colorSpace} 0.7 0.5 0.3)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b / alpha)`, `color(${colorSpace} 0.7 0.5 0.3)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b)`, `color(${colorSpace} 0.7 0.5 0.3 / 0.4)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b / alpha)`, `color(${colorSpace} 0.7 0.5 0.3 / 0.4)`); + + // Test nesting relative colors. + fuzzy_test_valid_color(`color(from color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b) ${colorSpace} r g b)`, `color(${colorSpace} 0.7 0.5 0.3)`); + + // Testing replacement with 0. + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 0 0 0)`, `color(${colorSpace} 0 0 0)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 0 0 0 / 0)`, `color(${colorSpace} 0 0 0 / 0)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 0 g b / alpha)`, `color(${colorSpace} 0 0.5 0.3)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r 0 b / alpha)`, `color(${colorSpace} 0.7 0 0.3)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g 0 / alpha)`, `color(${colorSpace} 0.7 0.5 0)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b / 0)`, `color(${colorSpace} 0.7 0.5 0.3 / 0)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} 0 g b / alpha)`, `color(${colorSpace} 0 0.5 0.3 / 0.4)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r 0 b / alpha)`, `color(${colorSpace} 0.7 0 0.3 / 0.4)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g 0 / alpha)`, `color(${colorSpace} 0.7 0.5 0 / 0.4)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b / 0)`, `color(${colorSpace} 0.7 0.5 0.3 / 0)`); + + // Testing replacement with a constant. + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 0.2 g b / alpha)`, `color(${colorSpace} 0.2 0.5 0.3)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 20% g b / alpha)`, `color(${colorSpace} 0.2 0.5 0.3)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r 0.2 b / alpha)`, `color(${colorSpace} 0.7 0.2 0.3)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r 20% b / alpha)`, `color(${colorSpace} 0.7 0.2 0.3)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g 0.2 / alpha)`, `color(${colorSpace} 0.7 0.5 0.2)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g 20% / alpha)`, `color(${colorSpace} 0.7 0.5 0.2)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b / 0.2)`, `color(${colorSpace} 0.7 0.5 0.3 / 0.2)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b / 20%)`, `color(${colorSpace} 0.7 0.5 0.3 / 0.2)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} 0.2 g b / alpha)`, `color(${colorSpace} 0.2 0.5 0.3 / 0.4)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} 20% g b / alpha)`, `color(${colorSpace} 0.2 0.5 0.3 / 0.4)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r 0.2 b / alpha)`, `color(${colorSpace} 0.7 0.2 0.3 / 0.4)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r 20% b / alpha)`, `color(${colorSpace} 0.7 0.2 0.3 / 0.4)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g 0.2 / alpha)`, `color(${colorSpace} 0.7 0.5 0.2 / 0.4)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g 20% / alpha)`, `color(${colorSpace} 0.7 0.5 0.2 / 0.4)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b / 0.2)`, `color(${colorSpace} 0.7 0.5 0.3 / 0.2)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b / 20%)`, `color(${colorSpace} 0.7 0.5 0.3 / 0.2)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 2 3 4)`, `color(${colorSpace} 2 3 4)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 2 3 4 / 5)`, `color(${colorSpace} 2 3 4)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} -2 -3 -4)`, `color(${colorSpace} -2 -3 -4)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} -2 -3 -4 / -5)`, `color(${colorSpace} -2 -3 -4 / 0)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 200% 300% 400%)`, `color(${colorSpace} 2 3 4)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} 200% 300% 400% / 500%)`, `color(${colorSpace} 2 3 4)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} -200% -300% -400%)`, `color(${colorSpace} -2 -3 -4)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} -200% -300% -400% / -500%)`, `color(${colorSpace} -2 -3 -4 / 0)`); + + // Testing valid permutation (types match). + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} g b r)`, `color(${colorSpace} 0.5 0.3 0.7)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} b alpha r / g)`, `color(${colorSpace} 0.3 1 0.7 / 0.5)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r r r / r)`, `color(${colorSpace} 0.7 0.7 0.7 / 0.7)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} alpha alpha alpha / alpha)`, `color(${colorSpace} 1 1 1)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} g b r)`, `color(${colorSpace} 0.5 0.3 0.7 / 0.4)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} b alpha r / g)`, `color(${colorSpace} 0.3 0.4 0.7 / 0.5)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r r r / r)`, `color(${colorSpace} 0.7 0.7 0.7 / 0.7)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} alpha alpha alpha / alpha)`, `color(${colorSpace} 0.4 0.4 0.4 / 0.4)`); + + // Testing out of gamut components. + fuzzy_test_valid_color(`color(from color(${colorSpace} 1.7 1.5 1.3) ${colorSpace} r g b)`, `color(${colorSpace} 1.7 1.5 1.3)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 1.7 1.5 1.3) ${colorSpace} r g b / alpha)`, `color(${colorSpace} 1.7 1.5 1.3)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 1.7 1.5 1.3 / 140%) ${colorSpace} r g b)`, `color(${colorSpace} 1.7 1.5 1.3)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 1.7 1.5 1.3 / 140%) ${colorSpace} r g b / alpha)`, `color(${colorSpace} 1.7 1.5 1.3)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} -0.7 -0.5 -0.3) ${colorSpace} r g b)`, `color(${colorSpace} -0.7 -0.5 -0.3)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} -0.7 -0.5 -0.3) ${colorSpace} r g b / alpha)`, `color(${colorSpace} -0.7 -0.5 -0.3)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} -0.7 -0.5 -0.3 / -40%) ${colorSpace} r g b)`, `color(${colorSpace} -0.7 -0.5 -0.3 / 0)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} -0.7 -0.5 -0.3 / -40%) ${colorSpace} r g b / alpha)`, `color(${colorSpace} -0.7 -0.5 -0.3 / 0)`); + + // Testing with calc(). + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} calc(r) calc(g) calc(b))`, `color(${colorSpace} 0.7 0.5 0.3)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} calc(r) calc(g) calc(b) / calc(alpha))`, `color(${colorSpace} 0.7 0.5 0.3 / 0.4)`); + + // Testing with 'none'. + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} none none none)`, `color(${colorSpace} none none none)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} none none none / none)`, `color(${colorSpace} none none none / none)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g none)`, `color(${colorSpace} 0.7 0.5 none)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g none / alpha)`, `color(${colorSpace} 0.7 0.5 none)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3) ${colorSpace} r g b / none)`, `color(${colorSpace} 0.7 0.5 0.3 / none)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g none / alpha)`, `color(${colorSpace} 0.7 0.5 none / 0.4)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / 40%) ${colorSpace} r g b / none)`, `color(${colorSpace} 0.7 0.5 0.3 / none)`); + // FIXME: Clarify with spec editors if 'none' should pass through to the constants. + fuzzy_test_valid_color(`color(from color(${colorSpace} none none none) ${colorSpace} r g b)`, `color(${colorSpace} 0 0 0)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} none none none / none) ${colorSpace} r g b / alpha)`, `color(${colorSpace} 0 0 0 / 0)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 none 0.3) ${colorSpace} r g b)`, `color(${colorSpace} 0.7 0 0.3)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 0.7 0.5 0.3 / none) ${colorSpace} r g b / alpha)`, `color(${colorSpace} 0.7 0.5 0.3 / 0)`); + + // Testing with 'currentColor' + fuzzy_test_valid_color(`color(from currentColor ${colorSpace} r g b)`, `color(from currentColor ${colorSpace} r g b)`); + + } + + for (const colorSpace of [ "xyz", "xyz-d50", "xyz-d65" ]) { + const resultColorSpace = colorSpace == "xyz" ? "xyz-d65" : colorSpace; + + // Testing no modifications. + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z)`, `color(${resultColorSpace} 7 -20.5 100)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z / alpha)`, `color(${resultColorSpace} 7 -20.5 100)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y z)`, `color(${resultColorSpace} 7 -20.5 100 / 0.4)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y z / alpha)`, `color(${resultColorSpace} 7 -20.5 100 / 0.4)`); + + // Test nesting relative colors. + fuzzy_test_valid_color(`color(from color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z) ${colorSpace} x y z)`, `color(${resultColorSpace} 7 -20.5 100)`); + + // Testing replacement with 0. + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} 0 0 0)`, `color(${resultColorSpace} 0 0 0)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} 0 0 0 / 0)`, `color(${resultColorSpace} 0 0 0 / 0)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} 0 y z / alpha)`, `color(${resultColorSpace} 0 -20.5 100)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x 0 z / alpha)`, `color(${resultColorSpace} 7 0 100)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y 0 / alpha)`, `color(${resultColorSpace} 7 -20.5 0)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z / 0)`, `color(${resultColorSpace} 7 -20.5 100 / 0)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} 0 y z / alpha)`, `color(${resultColorSpace} 0 -20.5 100 / 0.4)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x 0 z / alpha)`, `color(${resultColorSpace} 7 0 100 / 0.4)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y 0 / alpha)`, `color(${resultColorSpace} 7 -20.5 0 / 0.4)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y z / 0)`, `color(${resultColorSpace} 7 -20.5 100 / 0)`); + + // Testing replacement with a constant. + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} 0.2 y z / alpha)`, `color(${resultColorSpace} 0.2 -20.5 100)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x 0.2 z / alpha)`, `color(${resultColorSpace} 7 0.2 100)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y 0.2 / alpha)`, `color(${resultColorSpace} 7 -20.5 0.2)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z / 0.2)`, `color(${resultColorSpace} 7 -20.5 100 / 0.2)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z / 20%)`, `color(${resultColorSpace} 7 -20.5 100 / 0.2)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} 0.2 y z / alpha)`, `color(${resultColorSpace} 0.2 -20.5 100 / 0.4)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x 0.2 z / alpha)`, `color(${resultColorSpace} 7 0.2 100 / 0.4)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y 0.2 / alpha)`, `color(${resultColorSpace} 7 -20.5 0.2 / 0.4)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y z / 0.2)`, `color(${resultColorSpace} 7 -20.5 100 / 0.2)`); + + // Testing valid permutation (types match). + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} y z x)`, `color(${resultColorSpace} -20.5 100 7)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x x x / x)`, `color(${resultColorSpace} 7 7 7)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} y z x)`, `color(${resultColorSpace} -20.5 100 7 / 0.4)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x x x / x)`, `color(${resultColorSpace} 7 7 7)`); + + // Testing with calc(). + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} calc(x) calc(y) calc(z))`, `color(${resultColorSpace} 7 -20.5 100)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} calc(x) calc(y) calc(z) / calc(alpha))`, `color(${resultColorSpace} 7 -20.5 100 / 0.4)`); + + // Testing with 'none'. + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} none none none)`, `color(${resultColorSpace} none none none)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} none none none / none)`, `color(${resultColorSpace} none none none / none)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y none)`, `color(${resultColorSpace} 7 -20.5 none)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y none / alpha)`, `color(${resultColorSpace} 7 -20.5 none)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100) ${colorSpace} x y z / none)`, `color(${resultColorSpace} 7 -20.5 100 / none)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y none / alpha)`, `color(${resultColorSpace} 7 -20.5 none / 0.4)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100 / 40%) ${colorSpace} x y z / none)`, `color(${resultColorSpace} 7 -20.5 100 / none)`); + // FIXME: Clarify with spec editors if 'none' should pass through to the constants. + fuzzy_test_valid_color(`color(from color(${colorSpace} none none none) ${colorSpace} x y z)`, `color(${resultColorSpace} 0 0 0)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} none none none / none) ${colorSpace} x y z / alpha)`, `color(${resultColorSpace} 0 0 0 / 0)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 none 100) ${colorSpace} x y z)`, `color(${resultColorSpace} 7 0 100)`); + fuzzy_test_valid_color(`color(from color(${colorSpace} 7 -20.5 100 / none) ${colorSpace} x y z / alpha)`, `color(${resultColorSpace} 7 -20.5 100 / 0)`); + + // Testing with 'currentColor' + fuzzy_test_valid_color(`color(from currentColor ${colorSpace} x y z)`, `color(from currentColor ${colorSpace} x y z)`); + } + + // Spec Examples: https://www.w3.org/TR/css-color-5/#relative-colors + fuzzy_test_valid_color(`rgb(from var(--bg-color) r g b / 80%)`); + fuzzy_test_valid_color(`lch(from var(--color) calc(l / 2) c h)`); + fuzzy_test_valid_color(`rgb(from var(--color) calc(r * .3 + g * .59 + b * .11) calc(r * .3 + g * .59 + b * .11) calc(r * .3 + g * .59 + b * .11))`); + fuzzy_test_valid_color(`lch(from var(--color) l 0 h)`); + // This particular test does a lot of math so a wider epsilon is needed. + fuzzy_test_valid_color(`rgb(from indianred 255 g b)`, `color(srgb 1 0.36 0.36)`, 0.02 /* epsilon */); + fuzzy_test_valid_color(`hsl(from var(--accent) calc(h + 180) s l)`); + fuzzy_test_valid_color(`lab(from var(--mycolor) l a b / 100%)`); + fuzzy_test_valid_color(`lab(from var(--mycolor) l a b / calc(alpha * 0.8))`); + fuzzy_test_valid_color(`lab(from var(--mycolor) l 0 0)`); + // This particular test does a lot of math so a wider epsilon is needed. + fuzzy_test_valid_color(`lch(from peru calc(l * 0.8) c h)`, `lch(49.80 54 63.68)`, 0.02 /* epsilon */); + fuzzy_test_valid_color(`LCH(from var(--accent) l c calc(h + 180))`); + fuzzy_test_valid_color(`lch(from var(--mycolor) l 0 h)`); + fuzzy_test_valid_color(`var(--mygray)`); + fuzzy_test_valid_color(`lch(from var(--mygray) l 30 h)`); +</script> +</body> +</html> diff --git a/testing/web-platform/tests/css/css-color/parsing/color-valid-rgb.html b/testing/web-platform/tests/css/css-color/parsing/color-valid-rgb.html new file mode 100644 index 0000000000..a4995ac7ff --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/color-valid-rgb.html @@ -0,0 +1,73 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 4: Parsing and serialization of colors using valid RGB notation</title> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#rgb-functions"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#resolving-sRGB-values"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#serializing-sRGB-values"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_valid_value("color", "rgb(none none none)", "rgb(0, 0, 0)"); +test_valid_value("color", "rgb(none none none / none)", "rgba(0, 0, 0, 0)"); +test_valid_value("color", "rgb(128 none none)", "rgb(128, 0, 0)"); +test_valid_value("color", "rgb(128 none none / none)", "rgba(128, 0, 0, 0)"); +test_valid_value("color", "rgb(none none none / .5)", "rgba(0, 0, 0, 0.5)"); +test_valid_value("color", "rgb(20% none none)", "rgb(51, 0, 0)"); +test_valid_value("color", "rgb(20% none none / none)", "rgba(51, 0, 0, 0)"); +test_valid_value("color", "rgb(none none none / 50%)", "rgba(0, 0, 0, 0.5)"); +test_valid_value("color", "rgba(none none none)", "rgb(0, 0, 0)"); +test_valid_value("color", "rgba(none none none / none)", "rgba(0, 0, 0, 0)"); +test_valid_value("color", "rgba(128 none none)", "rgb(128, 0, 0)"); +test_valid_value("color", "rgba(128 none none / none)", "rgba(128, 0, 0, 0)"); +test_valid_value("color", "rgba(none none none / .5)", "rgba(0, 0, 0, 0.5)"); +test_valid_value("color", "rgba(20% none none)", "rgb(51, 0, 0)"); +test_valid_value("color", "rgba(20% none none / none)", "rgba(51, 0, 0, 0)"); +test_valid_value("color", "rgba(none none none / 50%)", "rgba(0, 0, 0, 0.5)"); +test_valid_value("color", "rgb(-2 3 4)", "rgb(0, 3, 4)"); +test_valid_value("color", "rgb(-20% 20% 40%)", "rgb(0, 51, 102)"); +test_valid_value("color", "rgb(257 30 40)", "rgb(255, 30, 40)"); +test_valid_value("color", "rgb(250% 20% 40%)", "rgb(255, 51, 102)"); +test_valid_value("color", "rgba(-2 3 4)", "rgb(0, 3, 4)"); +test_valid_value("color", "rgba(-20% 20% 40%)", "rgb(0, 51, 102)"); +test_valid_value("color", "rgba(257 30 40)", "rgb(255, 30, 40)"); +test_valid_value("color", "rgba(250% 20% 40%)", "rgb(255, 51, 102)"); +test_valid_value("color", "rgba(-2 3 4 / .5)", "rgba(0, 3, 4, 0.5)"); +test_valid_value("color", "rgba(-20% 20% 40% / 50%)", "rgba(0, 51, 102, 0.5)"); +test_valid_value("color", "rgba(257 30 40 / 50%)", "rgba(255, 30, 40, 0.5)"); +test_valid_value("color", "rgba(250% 20% 40% / .5)", "rgba(255, 51, 102, 0.5)"); + +// Test with mixed components. +test_valid_value("color", "rgb(250% 51 40%)", "rgb(255, 51, 102)"); +test_valid_value("color", "rgb(255 20% 102)", "rgb(255, 51, 102)"); + +// rgb are in the range [0, 255], alpha is in the range [0, 1]. +// Values above or below these numbers should get resolved to the upper/lower bound. +test_valid_value("color", "rgb(500, 0, 0)", "rgb(255, 0, 0)"); +test_valid_value("color", "rgb(-500, 64, 128)", "rgb(0, 64, 128)"); + +// calc(infinity) resolves to the upper bound while calc(-infinity) and calc(NaN) resolves the lower bound. +// See: https://github.com/w3c/csswg-drafts/issues/8629 +test_valid_value("color", "rgb(calc(infinity), 0, 0)", "rgb(255, 0, 0)"); +test_valid_value("color", "rgb(0, calc(infinity), 0)", "rgb(0, 255, 0)"); +test_valid_value("color", "rgb(0, 0, calc(infinity))", "rgb(0, 0, 255)"); +test_valid_value("color", "rgba(0, 0, 0, calc(infinity))", "rgb(0, 0, 0)"); +test_valid_value("color", "rgb(calc(-infinity), 0, 0)", "rgb(0, 0, 0)"); +test_valid_value("color", "rgb(0, calc(-infinity), 0)", "rgb(0, 0, 0)"); +test_valid_value("color", "rgb(0, 0, calc(-infinity))", "rgb(0, 0, 0)"); +test_valid_value("color", "rgba(0, 0, 0, calc(-infinity))", "rgba(0, 0, 0, 0)"); +test_valid_value("color", "rgb(calc(NaN), 0, 0)", "rgb(0, 0, 0)"); +test_valid_value("color", "rgb(0, calc(NaN), 0)", "rgb(0, 0, 0)"); +test_valid_value("color", "rgb(0, 0, calc(NaN))", "rgb(0, 0, 0)"); +test_valid_value("color", "rgba(0, 0, 0, calc(NaN))", "rgba(0, 0, 0, 0)"); +test_valid_value("color", "rgb(calc(0 / 0), 0, 0)", "rgb(0, 0, 0)"); +test_valid_value("color", "rgb(0, calc(0 / 0), 0)", "rgb(0, 0, 0)"); +test_valid_value("color", "rgb(0, 0, calc(0 / 0))", "rgb(0, 0, 0)"); +test_valid_value("color", "rgba(0, 0, 0, calc(0 / 0))", "rgba(0, 0, 0, 0)"); +</script> +</body> +</html> diff --git a/testing/web-platform/tests/css/css-color/parsing/color-valid-system-color.html b/testing/web-platform/tests/css/css-color/parsing/color-valid-system-color.html new file mode 100644 index 0000000000..af644aaa45 --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/color-valid-system-color.html @@ -0,0 +1,37 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 4: Parsing and serialization of colors using valid system color values</title> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#css-system-colors"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#resolving-other-colors"> +<link rel="help" href="https://drafts.csswg.org/css-color-4/#serializing-sRGB-values"> +<meta name="assert" content="system color keyword support"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_valid_value("color", "ActiveText", "activetext"); +test_valid_value("color", "ButtonBorder", "buttonborder"); +test_valid_value("color", "ButtonFace", "buttonface"); +test_valid_value("color", "ButtonText", "buttontext"); +test_valid_value("color", "Canvas", "canvas"); +test_valid_value("color", "CanvasText", "canvastext"); +test_valid_value("color", "Field", "field"); +test_valid_value("color", "FieldText", "fieldtext"); +test_valid_value("color", "GrayText", "graytext"); +test_valid_value("color", "Highlight", "highlight"); +test_valid_value("color", "HighlightText", "highlighttext"); +test_valid_value("color", "LinkText", "linktext"); +test_valid_value("color", "Mark", "mark"); +test_valid_value("color", "MarkText", "marktext"); +test_valid_value("color", "VisitedText", "visitedtext"); +test_valid_value("color", "SelectedItem", "selecteditem"); +test_valid_value("color", "SelectedItemText", "selecteditemtext"); +test_valid_value("color", "AccentColor", "accentcolor"); +test_valid_value("color", "AccentColorText", "accentcolortext"); +</script> +</body> +</html> diff --git a/testing/web-platform/tests/css/css-color/parsing/color-valid.html b/testing/web-platform/tests/css/css-color/parsing/color-valid.html new file mode 100644 index 0000000000..5c18d62d75 --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/color-valid.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 3: parsing color with valid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://www.w3.org/TR/css-color-3/#foreground"> +<meta name="assert" content="color supports the '<color>' grammar defined in CSS Color Level 3."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_valid_value("color", "currentcolor"); +test_valid_value("color", "transparent"); +test_valid_value("color", "red"); +test_valid_value("color", "magenta"); +test_valid_value("color", "#234", "rgb(34, 51, 68)"); +test_valid_value("color", "#FEDCBA", "rgb(254, 220, 186)"); +test_valid_value("color", "rgb(2, 3, 4)"); +test_valid_value("color", "rgb(100%, 0%, 0%)", "rgb(255, 0, 0)"); +test_valid_value("color", "rgba(2, 3, 4, 0.5)"); +test_valid_value("color", "rgba(2, 3, 4, 50%)", "rgba(2, 3, 4, 0.5)"); +test_valid_value("color", "hsl(120, 100%, 50%)", "rgb(0, 255, 0)"); +test_valid_value("color", "hsla(120, 100%, 50%, 0.25)", "rgba(0, 255, 0, 0.25)"); +test_valid_value("color", "rgb(-2, 3, 4)", "rgb(0, 3, 4)"); +test_valid_value("color", "rgb(100, 200, 300)", "rgb(100, 200, 255)"); +test_valid_value("color", "rgb(20, 10, 0, -10)", "rgba(20, 10, 0, 0)"); +test_valid_value("color", "rgb(100%, 200%, 300%)", "rgb(255, 255, 255)"); +</script> +</body> +</html> diff --git a/testing/web-platform/tests/css/css-color/parsing/opacity-computed.html b/testing/web-platform/tests/css/css-color/parsing/opacity-computed.html new file mode 100644 index 0000000000..27d9316415 --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/opacity-computed.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 3: getComputedStyle().opacity</title> +<link rel="help" href="https://www.w3.org/TR/css-color-3/#opacity"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/computed-testcommon.js"></script> +</head> +<body> +<div id="target"></div> +<script> +test_computed_value("opacity", "1"); +test_computed_value("opacity", "0.5"); +test_computed_value("opacity", "0"); +test_computed_value("opacity", "-2", "0"); +test_computed_value("opacity", "3", "1"); +test_computed_value("opacity", "-100%", "0"); +test_computed_value("opacity", "50%", "0.5"); +test_computed_value("opacity", "300%", "1"); + +</script> +</body> +</html> diff --git a/testing/web-platform/tests/css/css-color/parsing/opacity-invalid.html b/testing/web-platform/tests/css/css-color/parsing/opacity-invalid.html new file mode 100644 index 0000000000..d85f604801 --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/opacity-invalid.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 3: parsing opacity with invalid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://www.w3.org/TR/css-color-3/#opacity"> +<meta name="assert" content="opacity supports only the grammar '<alphavalue>'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_invalid_value("opacity", "auto"); +test_invalid_value("opacity", "10px"); +test_invalid_value("opacity", "0 1"); +</script> +</body> +</html> diff --git a/testing/web-platform/tests/css/css-color/parsing/opacity-valid.html b/testing/web-platform/tests/css/css-color/parsing/opacity-valid.html new file mode 100644 index 0000000000..ad65ad6df2 --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/opacity-valid.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 3: parsing opacity with valid values</title> +<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> +<link rel="help" href="https://www.w3.org/TR/css-color-3/#opacity"> +<meta name="assert" content="opacity supports the full grammar '<alphavalue>'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_valid_value("opacity", "1"); +test_valid_value("opacity", "0.5"); +test_valid_value("opacity", "0"); +test_valid_value("opacity", "-2"); +test_valid_value("opacity", "3"); +test_valid_value("opacity", "-100%", "-1"); +test_valid_value("opacity", "50%", "0.5"); +test_valid_value("opacity", "300%", "3"); +test_valid_value("opacity", "clamp(50%, 0%, 70%)", "calc(0.5)"); +test_valid_value("opacity", "clamp(50%, 80%, 70%)", "calc(0.7)"); +test_valid_value("opacity", "clamp(50%, 60%, 70%)", "calc(0.6)"); +test_valid_value("opacity", "min(50%, 0%)", "calc(0)"); +test_valid_value("opacity", "min(0%, 50%)", "calc(0)"); +test_valid_value("opacity", "max(50%, 0%)", "calc(0.5)"); +test_valid_value("opacity", "max(0%, 50%)", "calc(0.5)"); +test_valid_value("opacity", "min(-40%, 50%)", "calc(-0.4)"); + +</script> +</body> +</html> diff --git a/testing/web-platform/tests/css/css-color/parsing/relative-color-out-of-gamut.html b/testing/web-platform/tests/css/css-color/parsing/relative-color-out-of-gamut.html new file mode 100644 index 0000000000..745b21a040 --- /dev/null +++ b/testing/web-platform/tests/css/css-color/parsing/relative-color-out-of-gamut.html @@ -0,0 +1,54 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Color Level 5: Parsing and serialization of colors using relative color syntax that result in out-of-gamut sRGB colors</title> +<link rel="author" title="Sam Weinig" href="mailto:weinig@apple.com"> +<link rel="author" title="Aaron Krajeski" href="mailto:aaronhk@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-color-5/#relative-colors"> +<link rel="help" href="https://drafts.csswg.org/css-color-5/#serial-relative-color"> +<meta name="assert" content="gamut mapping works for computed value of relative color syntax"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/computed-testcommon.js"></script> +<script src="/css/support/color-testcommon.js"></script> +</head> +<body> + <div id="target"></div> +</body> +<script> + // The following tests produce colors that are outside of the srgb gamut. + // No gamut mapping should occur and the resulting colors should be of the + // format color(srgb ... ) + // See: https://github.com/mozilla/wg-decisions/issues/1125 + fuzzy_test_computed_color(`rgb(from color(display-p3 0 1 0) r g b / alpha)`, `color(srgb -0.511814 1.01832 -0.310726)`); + fuzzy_test_computed_color(`rgb(from lab(100 104.3 -50.9) r g b)`, `color(srgb 1.59343 0.58802 1.40564)`); + fuzzy_test_computed_color(`rgb(from lab(0 104.3 -50.9) r g b)`, `color(srgb 0.351376 -0.213938 0.299501)`); + fuzzy_test_computed_color(`rgb(from lch(100 116 334) r g b)`, `color(srgb 1.59328 0.58828 1.40527)`); + fuzzy_test_computed_color(`rgb(from lch(0 116 334) r g b)`, `color(srgb 0.351307 -0.213865 0.299236)`); + fuzzy_test_computed_color(`rgb(from oklab(1 0.365 -0.16) r g b)`, `color(srgb 1.59295 0.360371 1.38571)`); + fuzzy_test_computed_color(`rgb(from oklab(0 0.365 -0.16) r g b)`, `color(srgb 0.0763893 -0.0456266 0.0932598)`); + fuzzy_test_computed_color(`rgb(from oklch(1 0.399 336.3) r g b)`, `color(srgb 1.59328 0.358736 1.38663)`); + fuzzy_test_computed_color(`rgb(from oklch(0 0.399 336.3) r g b)`, `color(srgb 0.0765362 -0.045825 0.0937443)`); + + fuzzy_test_computed_color(`hsl(from color(display-p3 0 1 0) h s l / alpha)`, `color(srgb -0.511814 1.01832 -0.310726)`); + fuzzy_test_computed_color(`hsl(from lab(100 104.3 -50.9) h s l)`, `color(srgb 1.59343 0.58802 1.40564)`); + fuzzy_test_computed_color(`hsl(from lab(0 104.3 -50.9) h s l)`, `color(srgb 0.351376 -0.213938 0.299502)`); + fuzzy_test_computed_color(`hsl(from lch(100 116 334) h s l)`, `color(srgb 1.59328 0.58828 1.40527)`); + fuzzy_test_computed_color(`hsl(from lch(0 116 334) h s l)`, `color(srgb 0.351307 -0.213865 0.299236)`); + fuzzy_test_computed_color(`hsl(from oklab(1 0.365 -0.16) h s l)`, `color(srgb 1.59295 0.360371 1.38571)`); + fuzzy_test_computed_color(`hsl(from oklab(0 0.365 -0.16) h s l)`, `color(srgb 0.0763893 -0.0456266 0.0932598)`); + fuzzy_test_computed_color(`hsl(from oklch(1 0.399 336.3) h s l)`, `color(srgb 1.59328 0.358736 1.38663)`); + fuzzy_test_computed_color(`hsl(from oklch(0 0.399 336.3) h s l)`, `color(srgb 0.0765362 -0.045825 0.0937443)`); + + fuzzy_test_computed_color(`hwb(from color(display-p3 0 1 0) h w b / alpha)`, `color(srgb -0.511814 1.01832 -0.310726)`); + fuzzy_test_computed_color(`hwb(from lab(100 104.3 -50.9) h w b)`, `color(srgb 1.59343 0.58802 1.40564)`); + fuzzy_test_computed_color(`hwb(from lab(0 104.3 -50.9) h w b)`, `color(srgb 0.351376 -0.213938 0.299502)`); + fuzzy_test_computed_color(`hwb(from lch(100 116 334) h w b)`, `color(srgb 1.59328 0.58828 1.40527)`); + fuzzy_test_computed_color(`hwb(from lch(0 116 334) h w b)`, `color(srgb 0.351307 -0.213865 0.299236)`); + fuzzy_test_computed_color(`hwb(from oklab(1 0.365 -0.16) h w b)`, `color(srgb 1.59295 0.360371 1.38571)`); + fuzzy_test_computed_color(`hwb(from oklab(0 0.365 -0.16) h w b)`, `color(srgb 0.0763894 -0.0456266 0.0932598)`); + fuzzy_test_computed_color(`hwb(from oklch(1 0.399 336.3) h w b)`, `color(srgb 1.59328 0.358736 1.38664)`); + fuzzy_test_computed_color(`hwb(from oklch(0 0.399 336.3) h w b)`, `color(srgb 0.0765362 -0.045825 0.0937443)`); +</script> +</html> |