Skip to content

Commit

Permalink
Add tan() function for CSSTrigonometrcFunctions
Browse files Browse the repository at this point in the history
According to the CSS Values and Units Module Level 4 [1],
the trigonometric function should be parsed and evaluated.

This CL adds tan() function and testcases for tan().

Feature status: [2]
Intent to prototype: [3]

[1] https://www.w3.org/TR/css-values-4/#trig-funcs
[2] https://chromestatus.com/feature/5165381072191488
[3] https://groups.google.com/a/chromium.org/g/blink-dev/c/-c9p-Sq_gWg

Bug: 1190444
Change-Id: I33cbd046e7c78191a373ce17f3209eab317c461b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3799087
Reviewed-by: Xiaocheng Hu <xiaochengh@chromium.org>
Commit-Queue: Seokho Song <seokho@chromium.org>
Reviewed-by: Mason Freed <masonf@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1031380}
  • Loading branch information
DevSDK authored and Chromium LUCI CQ committed Aug 4, 2022
1 parent 7ff35ad commit b17a392
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 66 deletions.
Expand Up @@ -476,6 +476,11 @@ CSSMathExpressionOperation::CreateTrigonometricFunctionSimplified(
value = cos(ValueAsRadian(operands[0], error));
break;
}
case CSSValueID::kTan: {
DCHECK_EQ(operands.size(), 1u);
value = tan(ValueAsRadian(operands[0], error));
break;
}
default:
return nullptr;
}
Expand Down Expand Up @@ -1189,6 +1194,7 @@ class CSSMathExpressionNodeParser {
// TODO(crbug.com/1190444): Add other trigonometric functions
case CSSValueID::kSin:
case CSSValueID::kCos:
case CSSValueID::kTan:
return RuntimeEnabledFeatures::CSSTrigonometricFunctionsEnabled();
case CSSValueID::kAnchor:
case CSSValueID::kAnchorSize:
Expand Down Expand Up @@ -1291,6 +1297,7 @@ class CSSMathExpressionNodeParser {
break;
case CSSValueID::kSin:
case CSSValueID::kCos:
case CSSValueID::kTan:
DCHECK(RuntimeEnabledFeatures::CSSTrigonometricFunctionsEnabled());
max_argument_count = 1;
min_argument_count = 1;
Expand Down Expand Up @@ -1334,6 +1341,7 @@ class CSSMathExpressionNodeParser {
std::move(nodes), CSSMathOperator::kClamp);
case CSSValueID::kSin:
case CSSValueID::kCos:
case CSSValueID::kTan:
DCHECK(RuntimeEnabledFeatures::CSSTrigonometricFunctionsEnabled());
return CSSMathExpressionOperation::
CreateTrigonometricFunctionSimplified(std::move(nodes),
Expand Down
Expand Up @@ -34,7 +34,10 @@
"cos(1.047197551rad)" :"calc(0.5)",
"cos(0.16666666666turn)" :"calc(0.5)",
"tan(45deg)" :"calc(1)",
"tan(45deg)" :"calc(1)",
"tan(50grad)" :"calc(1)",
"tan(0.78539816)" :"calc(1)",
"tan(0.78539816rad)" :"calc(1)",
"tan(0.125turn)" :"calc(1)",
"calc(sin(30deg) + cos(60deg) + tan(45deg)" :"calc(2)",
"calc(sin(infinity))" :"calc(NaN)",
"calc(cos(infinity))" :"calc(NaN)",
Expand Down
@@ -1,7 +1,7 @@
This is a testharness.js-based test.
PASS cos(0) should be used-value-equivalent to 1
PASS sin(0) should be used-value-equivalent to 0
FAIL tan(0) should be used-value-equivalent to 0 assert_not_equals: tan(0) isn't valid in 'transform'; got the default value instead. got disallowed value "none"
PASS tan(0) should be used-value-equivalent to 0
FAIL calc(sin(pi/2 - pi/2) ) should be used-value-equivalent to 0 assert_not_equals: calc(sin(pi/2 - pi/2) ) isn't valid in 'transform'; got the default value instead. got disallowed value "none"
FAIL calc(cos(pi - 3.14159265358979323846) ) should be used-value-equivalent to 1 assert_not_equals: calc(cos(pi - 3.14159265358979323846) ) isn't valid in 'transform'; got the default value instead. got disallowed value "none"
FAIL calc(cos(e - 2.7182818284590452354) ) should be used-value-equivalent to 1 assert_not_equals: calc(cos(e - 2.7182818284590452354) ) isn't valid in 'transform'; got the default value instead. got disallowed value "none"
Expand All @@ -10,9 +10,9 @@ FAIL calc(cos(30deg - 0.523599rad ) ) should be used-value-equivalent to 1 asser
PASS calc(sin(3.14159 / 2 + 1 - 1) ) should be used-value-equivalent to 1
PASS calc(sin(100grad) ) should be used-value-equivalent to 1
PASS calc(cos(0 / 2 + 1 - 1) ) should be used-value-equivalent to 1
FAIL calc(tan(30deg + 0.261799rad ) ) should be used-value-equivalent to 1 assert_not_equals: calc(tan(30deg + 0.261799rad ) ) isn't valid in 'transform'; got the default value instead. got disallowed value "none"
FAIL calc(tan(0.7853975rad ) ) should be used-value-equivalent to 1 assert_not_equals: calc(tan(0.7853975rad ) ) isn't valid in 'transform'; got the default value instead. got disallowed value "none"
FAIL calc(tan(3.14159 / 4 + 1 - 1) ) should be used-value-equivalent to 1 assert_not_equals: calc(tan(3.14159 / 4 + 1 - 1) ) isn't valid in 'transform'; got the default value instead. got disallowed value "none"
PASS calc(tan(30deg + 0.261799rad ) ) should be used-value-equivalent to 1
PASS calc(tan(0.7853975rad ) ) should be used-value-equivalent to 1
PASS calc(tan(3.14159 / 4 + 1 - 1) ) should be used-value-equivalent to 1
PASS calc(sin(0.25turn) ) should be used-value-equivalent to 1
FAIL calc(cos(sin(cos(pi) + 1))) should be used-value-equivalent to 1 assert_not_equals: calc(cos(sin(cos(pi) + 1))) isn't valid in 'transform'; got the default value instead. got disallowed value "none"
FAIL calc(sin(tan(pi/4)*pi/2) ) should be used-value-equivalent to 1 assert_not_equals: calc(sin(tan(pi/4)*pi/2) ) isn't valid in 'transform'; got the default value instead. got disallowed value "none"
Expand Down

This file was deleted.

@@ -1,5 +1,5 @@
This is a testharness.js-based test.
Found 56 tests; 0 PASS, 56 FAIL, 0 TIMEOUT, 0 NOTRUN.
Found 64 tests; 0 PASS, 64 FAIL, 0 TIMEOUT, 0 NOTRUN.
FAIL 'scale(calc(cos(0)))' as a specified value should serialize as 'scale(calc(1))'. assert_not_equals: 'scale(calc(cos(0)))' should be valid in transform. got disallowed value ""
FAIL 'scale(cos(0))' as a specified value should serialize as 'scale(calc(1))'. assert_not_equals: 'scale(cos(0))' should be valid in transform. got disallowed value ""
FAIL 'scale(calc(sin(0)))' as a specified value should serialize as 'scale(calc(0))'. assert_not_equals: 'scale(calc(sin(0)))' should be valid in transform. got disallowed value ""
Expand Down Expand Up @@ -42,6 +42,14 @@ FAIL 'scale(calc(cos(0.16666666666turn)))' as a specified value should serialize
FAIL 'scale(cos(0.16666666666turn))' as a specified value should serialize as 'scale(calc(0.5))'. assert_not_equals: 'scale(cos(0.16666666666turn))' should be valid in transform. got disallowed value ""
FAIL 'scale(calc(tan(45deg)))' as a specified value should serialize as 'scale(calc(1))'. assert_not_equals: 'scale(calc(tan(45deg)))' should be valid in transform. got disallowed value ""
FAIL 'scale(tan(45deg))' as a specified value should serialize as 'scale(calc(1))'. assert_not_equals: 'scale(tan(45deg))' should be valid in transform. got disallowed value ""
FAIL 'scale(calc(tan(50grad)))' as a specified value should serialize as 'scale(calc(1))'. assert_not_equals: 'scale(calc(tan(50grad)))' should be valid in transform. got disallowed value ""
FAIL 'scale(tan(50grad))' as a specified value should serialize as 'scale(calc(1))'. assert_not_equals: 'scale(tan(50grad))' should be valid in transform. got disallowed value ""
FAIL 'scale(calc(tan(0.78539816)))' as a specified value should serialize as 'scale(calc(1))'. assert_not_equals: 'scale(calc(tan(0.78539816)))' should be valid in transform. got disallowed value ""
FAIL 'scale(tan(0.78539816))' as a specified value should serialize as 'scale(calc(1))'. assert_not_equals: 'scale(tan(0.78539816))' should be valid in transform. got disallowed value ""
FAIL 'scale(calc(tan(0.78539816rad)))' as a specified value should serialize as 'scale(calc(1))'. assert_not_equals: 'scale(calc(tan(0.78539816rad)))' should be valid in transform. got disallowed value ""
FAIL 'scale(tan(0.78539816rad))' as a specified value should serialize as 'scale(calc(1))'. assert_not_equals: 'scale(tan(0.78539816rad))' should be valid in transform. got disallowed value ""
FAIL 'scale(calc(tan(0.125turn)))' as a specified value should serialize as 'scale(calc(1))'. assert_not_equals: 'scale(calc(tan(0.125turn)))' should be valid in transform. got disallowed value ""
FAIL 'scale(tan(0.125turn))' as a specified value should serialize as 'scale(calc(1))'. assert_not_equals: 'scale(tan(0.125turn))' should be valid in transform. got disallowed value ""
FAIL 'scale(calc(calc(sin(30deg) + cos(60deg) + tan(45deg)))' as a specified value should serialize as 'scale(calc(2))'. assert_not_equals: 'scale(calc(calc(sin(30deg) + cos(60deg) + tan(45deg)))' should be valid in transform. got disallowed value ""
FAIL 'scale(calc(sin(30deg) + cos(60deg) + tan(45deg))' as a specified value should serialize as 'scale(calc(2))'. assert_not_equals: 'scale(calc(sin(30deg) + cos(60deg) + tan(45deg))' should be valid in transform. got disallowed value ""
FAIL 'scale(calc(calc(sin(infinity))))' as a specified value should serialize as 'scale(calc(NaN))'. assert_not_equals: 'scale(calc(calc(sin(infinity))))' should be valid in transform. got disallowed value ""
Expand Down

0 comments on commit b17a392

Please sign in to comment.