From cef95647283dd055145d0900cb7bbdf76401b2a0 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 18 May 2025 15:59:11 +0200 Subject: [PATCH] LibWeb: Only serialize CSS numbers with up to 5 decimals This fixes an issue where we'd serialize some floating point numbers with excessive precision, resulting in unpleasant-looking numbers like 0.49999999999999999 and such. At least 90 new subtests passing on WPT, possibly more. :^) --- Libraries/LibWeb/CSS/Number.cpp | 2 +- .../css/css-values/sin-cos-tan-serialize.txt | 184 +++++++++--------- 2 files changed, 93 insertions(+), 93 deletions(-) diff --git a/Libraries/LibWeb/CSS/Number.cpp b/Libraries/LibWeb/CSS/Number.cpp index baed27419c5..b6c6c49b807 100644 --- a/Libraries/LibWeb/CSS/Number.cpp +++ b/Libraries/LibWeb/CSS/Number.cpp @@ -19,7 +19,7 @@ String Number::to_string() const return "-infinity"_string; if (isnan(m_value)) return "NaN"_string; - return String::number(m_value); + return MUST(String::formatted("{:.5}", m_value)); } } diff --git a/Tests/LibWeb/Text/expected/wpt-import/css/css-values/sin-cos-tan-serialize.txt b/Tests/LibWeb/Text/expected/wpt-import/css/css-values/sin-cos-tan-serialize.txt index 8c44740b426..eca6ff006fa 100644 --- a/Tests/LibWeb/Text/expected/wpt-import/css/css-values/sin-cos-tan-serialize.txt +++ b/Tests/LibWeb/Text/expected/wpt-import/css/css-values/sin-cos-tan-serialize.txt @@ -2,8 +2,8 @@ Harness status: OK Found 270 tests -144 Pass -126 Fail +234 Pass +36 Fail Pass cos(0) should be specified-value-equivalent to calc(1) Pass cos(0) should be computed-value-equivalent to 1 Pass cos(0) should be used-value-equivalent to 1 @@ -64,96 +64,96 @@ Pass tan(0deg) should be used-value-equivalent to 0 Pass calc(tan(0deg)) should be specified-value-equivalent to calc(0) Pass calc(tan(0deg)) should be computed-value-equivalent to 0 Pass calc(tan(0deg)) should be used-value-equivalent to 0 -Fail sin(30deg) should be specified-value-equivalent to calc(0.5) -Fail sin(30deg) should be computed-value-equivalent to 0.5 -Fail sin(30deg) should be used-value-equivalent to 0.5 -Fail calc(sin(30deg)) should be specified-value-equivalent to calc(0.5) -Fail calc(sin(30deg)) should be computed-value-equivalent to 0.5 -Fail calc(sin(30deg)) should be used-value-equivalent to 0.5 -Fail sin(0.523599) should be specified-value-equivalent to calc(0.5) -Fail sin(0.523599) should be computed-value-equivalent to 0.5 -Fail sin(0.523599) should be used-value-equivalent to 0.5 -Fail calc(sin(0.523599)) should be specified-value-equivalent to calc(0.5) -Fail calc(sin(0.523599)) should be computed-value-equivalent to 0.5 -Fail calc(sin(0.523599)) should be used-value-equivalent to 0.5 -Fail sin(0.523599rad) should be specified-value-equivalent to calc(0.5) -Fail sin(0.523599rad) should be computed-value-equivalent to 0.5 -Fail sin(0.523599rad) should be used-value-equivalent to 0.5 -Fail calc(sin(0.523599rad)) should be specified-value-equivalent to calc(0.5) -Fail calc(sin(0.523599rad)) should be computed-value-equivalent to 0.5 -Fail calc(sin(0.523599rad)) should be used-value-equivalent to 0.5 -Fail sin(33.333333grad) should be specified-value-equivalent to calc(0.5) -Fail sin(33.333333grad) should be computed-value-equivalent to 0.5 -Fail sin(33.333333grad) should be used-value-equivalent to 0.5 -Fail calc(sin(33.333333grad)) should be specified-value-equivalent to calc(0.5) -Fail calc(sin(33.333333grad)) should be computed-value-equivalent to 0.5 -Fail calc(sin(33.333333grad)) should be used-value-equivalent to 0.5 -Fail sin(0.08333333turn) should be specified-value-equivalent to calc(0.5) -Fail sin(0.08333333turn) should be computed-value-equivalent to 0.5 -Fail sin(0.08333333turn) should be used-value-equivalent to 0.5 -Fail calc(sin(0.08333333turn)) should be specified-value-equivalent to calc(0.5) -Fail calc(sin(0.08333333turn)) should be computed-value-equivalent to 0.5 -Fail calc(sin(0.08333333turn)) should be used-value-equivalent to 0.5 -Fail cos(60deg) should be specified-value-equivalent to calc(0.5) -Fail cos(60deg) should be computed-value-equivalent to 0.5 -Fail cos(60deg) should be used-value-equivalent to 0.5 -Fail calc(cos(60deg)) should be specified-value-equivalent to calc(0.5) -Fail calc(cos(60deg)) should be computed-value-equivalent to 0.5 -Fail calc(cos(60deg)) should be used-value-equivalent to 0.5 -Fail cos(66.66666666grad) should be specified-value-equivalent to calc(0.5) -Fail cos(66.66666666grad) should be computed-value-equivalent to 0.5 -Fail cos(66.66666666grad) should be used-value-equivalent to 0.5 -Fail calc(cos(66.66666666grad)) should be specified-value-equivalent to calc(0.5) -Fail calc(cos(66.66666666grad)) should be computed-value-equivalent to 0.5 -Fail calc(cos(66.66666666grad)) should be used-value-equivalent to 0.5 -Fail cos(1.047197551) should be specified-value-equivalent to calc(0.5) -Fail cos(1.047197551) should be computed-value-equivalent to 0.5 -Fail cos(1.047197551) should be used-value-equivalent to 0.5 -Fail calc(cos(1.047197551)) should be specified-value-equivalent to calc(0.5) -Fail calc(cos(1.047197551)) should be computed-value-equivalent to 0.5 -Fail calc(cos(1.047197551)) should be used-value-equivalent to 0.5 -Fail cos(1.047197551rad) should be specified-value-equivalent to calc(0.5) -Fail cos(1.047197551rad) should be computed-value-equivalent to 0.5 -Fail cos(1.047197551rad) should be used-value-equivalent to 0.5 -Fail calc(cos(1.047197551rad)) should be specified-value-equivalent to calc(0.5) -Fail calc(cos(1.047197551rad)) should be computed-value-equivalent to 0.5 -Fail calc(cos(1.047197551rad)) should be used-value-equivalent to 0.5 -Fail cos(0.16666666666turn) should be specified-value-equivalent to calc(0.5) -Fail cos(0.16666666666turn) should be computed-value-equivalent to 0.5 -Fail cos(0.16666666666turn) should be used-value-equivalent to 0.5 -Fail calc(cos(0.16666666666turn)) should be specified-value-equivalent to calc(0.5) -Fail calc(cos(0.16666666666turn)) should be computed-value-equivalent to 0.5 -Fail calc(cos(0.16666666666turn)) should be used-value-equivalent to 0.5 -Fail tan(45deg) should be specified-value-equivalent to calc(1) -Fail tan(45deg) should be computed-value-equivalent to 1 -Fail tan(45deg) should be used-value-equivalent to 1 -Fail calc(tan(45deg)) should be specified-value-equivalent to calc(1) -Fail calc(tan(45deg)) should be computed-value-equivalent to 1 -Fail calc(tan(45deg)) should be used-value-equivalent to 1 -Fail tan(50grad) should be specified-value-equivalent to calc(1) -Fail tan(50grad) should be computed-value-equivalent to 1 -Fail tan(50grad) should be used-value-equivalent to 1 -Fail calc(tan(50grad)) should be specified-value-equivalent to calc(1) -Fail calc(tan(50grad)) should be computed-value-equivalent to 1 -Fail calc(tan(50grad)) should be used-value-equivalent to 1 -Fail tan(0.78539816) should be specified-value-equivalent to calc(1) -Fail tan(0.78539816) should be computed-value-equivalent to 1 -Fail tan(0.78539816) should be used-value-equivalent to 1 -Fail calc(tan(0.78539816)) should be specified-value-equivalent to calc(1) -Fail calc(tan(0.78539816)) should be computed-value-equivalent to 1 -Fail calc(tan(0.78539816)) should be used-value-equivalent to 1 -Fail tan(0.78539816rad) should be specified-value-equivalent to calc(1) -Fail tan(0.78539816rad) should be computed-value-equivalent to 1 -Fail tan(0.78539816rad) should be used-value-equivalent to 1 -Fail calc(tan(0.78539816rad)) should be specified-value-equivalent to calc(1) -Fail calc(tan(0.78539816rad)) should be computed-value-equivalent to 1 -Fail calc(tan(0.78539816rad)) should be used-value-equivalent to 1 -Fail tan(0.125turn) should be specified-value-equivalent to calc(1) -Fail tan(0.125turn) should be computed-value-equivalent to 1 -Fail tan(0.125turn) should be used-value-equivalent to 1 -Fail calc(tan(0.125turn)) should be specified-value-equivalent to calc(1) -Fail calc(tan(0.125turn)) should be computed-value-equivalent to 1 -Fail calc(tan(0.125turn)) should be used-value-equivalent to 1 +Pass sin(30deg) should be specified-value-equivalent to calc(0.5) +Pass sin(30deg) should be computed-value-equivalent to 0.5 +Pass sin(30deg) should be used-value-equivalent to 0.5 +Pass calc(sin(30deg)) should be specified-value-equivalent to calc(0.5) +Pass calc(sin(30deg)) should be computed-value-equivalent to 0.5 +Pass calc(sin(30deg)) should be used-value-equivalent to 0.5 +Pass sin(0.523599) should be specified-value-equivalent to calc(0.5) +Pass sin(0.523599) should be computed-value-equivalent to 0.5 +Pass sin(0.523599) should be used-value-equivalent to 0.5 +Pass calc(sin(0.523599)) should be specified-value-equivalent to calc(0.5) +Pass calc(sin(0.523599)) should be computed-value-equivalent to 0.5 +Pass calc(sin(0.523599)) should be used-value-equivalent to 0.5 +Pass sin(0.523599rad) should be specified-value-equivalent to calc(0.5) +Pass sin(0.523599rad) should be computed-value-equivalent to 0.5 +Pass sin(0.523599rad) should be used-value-equivalent to 0.5 +Pass calc(sin(0.523599rad)) should be specified-value-equivalent to calc(0.5) +Pass calc(sin(0.523599rad)) should be computed-value-equivalent to 0.5 +Pass calc(sin(0.523599rad)) should be used-value-equivalent to 0.5 +Pass sin(33.333333grad) should be specified-value-equivalent to calc(0.5) +Pass sin(33.333333grad) should be computed-value-equivalent to 0.5 +Pass sin(33.333333grad) should be used-value-equivalent to 0.5 +Pass calc(sin(33.333333grad)) should be specified-value-equivalent to calc(0.5) +Pass calc(sin(33.333333grad)) should be computed-value-equivalent to 0.5 +Pass calc(sin(33.333333grad)) should be used-value-equivalent to 0.5 +Pass sin(0.08333333turn) should be specified-value-equivalent to calc(0.5) +Pass sin(0.08333333turn) should be computed-value-equivalent to 0.5 +Pass sin(0.08333333turn) should be used-value-equivalent to 0.5 +Pass calc(sin(0.08333333turn)) should be specified-value-equivalent to calc(0.5) +Pass calc(sin(0.08333333turn)) should be computed-value-equivalent to 0.5 +Pass calc(sin(0.08333333turn)) should be used-value-equivalent to 0.5 +Pass cos(60deg) should be specified-value-equivalent to calc(0.5) +Pass cos(60deg) should be computed-value-equivalent to 0.5 +Pass cos(60deg) should be used-value-equivalent to 0.5 +Pass calc(cos(60deg)) should be specified-value-equivalent to calc(0.5) +Pass calc(cos(60deg)) should be computed-value-equivalent to 0.5 +Pass calc(cos(60deg)) should be used-value-equivalent to 0.5 +Pass cos(66.66666666grad) should be specified-value-equivalent to calc(0.5) +Pass cos(66.66666666grad) should be computed-value-equivalent to 0.5 +Pass cos(66.66666666grad) should be used-value-equivalent to 0.5 +Pass calc(cos(66.66666666grad)) should be specified-value-equivalent to calc(0.5) +Pass calc(cos(66.66666666grad)) should be computed-value-equivalent to 0.5 +Pass calc(cos(66.66666666grad)) should be used-value-equivalent to 0.5 +Pass cos(1.047197551) should be specified-value-equivalent to calc(0.5) +Pass cos(1.047197551) should be computed-value-equivalent to 0.5 +Pass cos(1.047197551) should be used-value-equivalent to 0.5 +Pass calc(cos(1.047197551)) should be specified-value-equivalent to calc(0.5) +Pass calc(cos(1.047197551)) should be computed-value-equivalent to 0.5 +Pass calc(cos(1.047197551)) should be used-value-equivalent to 0.5 +Pass cos(1.047197551rad) should be specified-value-equivalent to calc(0.5) +Pass cos(1.047197551rad) should be computed-value-equivalent to 0.5 +Pass cos(1.047197551rad) should be used-value-equivalent to 0.5 +Pass calc(cos(1.047197551rad)) should be specified-value-equivalent to calc(0.5) +Pass calc(cos(1.047197551rad)) should be computed-value-equivalent to 0.5 +Pass calc(cos(1.047197551rad)) should be used-value-equivalent to 0.5 +Pass cos(0.16666666666turn) should be specified-value-equivalent to calc(0.5) +Pass cos(0.16666666666turn) should be computed-value-equivalent to 0.5 +Pass cos(0.16666666666turn) should be used-value-equivalent to 0.5 +Pass calc(cos(0.16666666666turn)) should be specified-value-equivalent to calc(0.5) +Pass calc(cos(0.16666666666turn)) should be computed-value-equivalent to 0.5 +Pass calc(cos(0.16666666666turn)) should be used-value-equivalent to 0.5 +Pass tan(45deg) should be specified-value-equivalent to calc(1) +Pass tan(45deg) should be computed-value-equivalent to 1 +Pass tan(45deg) should be used-value-equivalent to 1 +Pass calc(tan(45deg)) should be specified-value-equivalent to calc(1) +Pass calc(tan(45deg)) should be computed-value-equivalent to 1 +Pass calc(tan(45deg)) should be used-value-equivalent to 1 +Pass tan(50grad) should be specified-value-equivalent to calc(1) +Pass tan(50grad) should be computed-value-equivalent to 1 +Pass tan(50grad) should be used-value-equivalent to 1 +Pass calc(tan(50grad)) should be specified-value-equivalent to calc(1) +Pass calc(tan(50grad)) should be computed-value-equivalent to 1 +Pass calc(tan(50grad)) should be used-value-equivalent to 1 +Pass tan(0.78539816) should be specified-value-equivalent to calc(1) +Pass tan(0.78539816) should be computed-value-equivalent to 1 +Pass tan(0.78539816) should be used-value-equivalent to 1 +Pass calc(tan(0.78539816)) should be specified-value-equivalent to calc(1) +Pass calc(tan(0.78539816)) should be computed-value-equivalent to 1 +Pass calc(tan(0.78539816)) should be used-value-equivalent to 1 +Pass tan(0.78539816rad) should be specified-value-equivalent to calc(1) +Pass tan(0.78539816rad) should be computed-value-equivalent to 1 +Pass tan(0.78539816rad) should be used-value-equivalent to 1 +Pass calc(tan(0.78539816rad)) should be specified-value-equivalent to calc(1) +Pass calc(tan(0.78539816rad)) should be computed-value-equivalent to 1 +Pass calc(tan(0.78539816rad)) should be used-value-equivalent to 1 +Pass tan(0.125turn) should be specified-value-equivalent to calc(1) +Pass tan(0.125turn) should be computed-value-equivalent to 1 +Pass tan(0.125turn) should be used-value-equivalent to 1 +Pass calc(tan(0.125turn)) should be specified-value-equivalent to calc(1) +Pass calc(tan(0.125turn)) should be computed-value-equivalent to 1 +Pass calc(tan(0.125turn)) should be used-value-equivalent to 1 Pass sin(180deg) should be specified-value-equivalent to calc(0) Pass sin(180deg) should be computed-value-equivalent to 0 Pass sin(180deg) should be used-value-equivalent to 0