tint: enable smoothstep error tests for f32 and f16

...now that we correctly fail on inf/nan. Also fold separate error test
functions into SmoothstepCases.

Also fixed atanh, acos, acosh, and asin tests to properly test error
cases for all float types, not just abstract float.

Bug: tint:1581
Bug: tint:1747
Change-Id: I63bd57d36beab4cc7dde501183052aa688e2efdb
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/110727
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
This commit is contained in:
Antonio Maiorano 2022-11-21 15:29:54 +00:00
parent 1eaeb310a7
commit f5eec817de
1 changed files with 19 additions and 70 deletions

View File

@ -349,9 +349,9 @@ std::vector<Case> AtanhCases() {
// Vector tests
C({Vec(T(0.0), T(0.9), -T(0.9))}, Vec(T(0.0), T(1.4722193), -T(1.4722193))).FloatComp(),
E({1.1_a},
E({T(1.1)},
"12:34 error: atanh must be called with a value in the range (-1 .. 1) (exclusive)"),
E({-1.1_a},
E({-T(1.1)},
"12:34 error: atanh must be called with a value in the range (-1 .. 1) (exclusive)"),
};
}
@ -375,9 +375,9 @@ std::vector<Case> AcosCases() {
// Vector tests
C({Vec(T(1.0), -T(1.0))}, Vec(T(0), kPi<T>)).FloatComp(),
E({1.1_a},
E({T(1.1)},
"12:34 error: acos must be called with a value in the range [-1 .. 1] (inclusive)"),
E({-1.1_a},
E({-T(1.1)},
"12:34 error: acos must be called with a value in the range [-1 .. 1] (inclusive)"),
};
}
@ -399,8 +399,8 @@ std::vector<Case> AcoshCases() {
C({Vec(T(1.0), T(11.5919532755))}, Vec(T(0), kPi<T>)).FloatComp(),
E({T::Smallest()}, "12:34 error: acosh must be called with a value >= 1.0"),
E({-1.1_a}, "12:34 error: acosh must be called with a value >= 1.0"),
E({0_a}, "12:34 error: acosh must be called with a value >= 1.0"),
E({-T(1.1)}, "12:34 error: acosh must be called with a value >= 1.0"),
E({T(0)}, "12:34 error: acosh must be called with a value >= 1.0"),
};
}
INSTANTIATE_TEST_SUITE_P( //
@ -424,9 +424,9 @@ std::vector<Case> AsinCases() {
// Vector tests
C({Vec(T(0.0), T(1.0), -T(1.0))}, Vec(T(0.0), kPiOver2<T>, -kPiOver2<T>)).FloatComp(),
E({1.1_a},
E({T(1.1)},
"12:34 error: asin must be called with a value in the range [-1 .. 1] (inclusive)"),
E({-1.1_a},
E({-T(1.1)},
"12:34 error: asin must be called with a value in the range [-1 .. 1] (inclusive)"),
};
}
@ -1452,6 +1452,10 @@ INSTANTIATE_TEST_SUITE_P( //
template <typename T>
std::vector<Case> SmoothstepCases() {
auto error_msg = [](auto a, const char* op, auto b) {
return "12:34 error: " + OverflowErrorMessage(a, op, b) + R"(
12:34 note: when calculating smoothstep)";
};
return {
// t == 0
C({T(4), T(6), T(2)}, T(0)),
@ -1462,6 +1466,13 @@ std::vector<Case> SmoothstepCases() {
// Vector tests
C({Vec(T(4), T(4)), Vec(T(6), T(6)), Vec(T(2), T(8))}, Vec(T(0), T(1))),
// `x - low` underflows
E({T::Highest(), T(1), T::Lowest()}, error_msg(T::Lowest(), "-", T::Highest())),
// `high - low` underflows
E({T::Highest(), T::Lowest(), T(0)}, error_msg(T::Lowest(), "-", T::Highest())),
// Divide by zero on `(x - low) / (high - low)`
E({T(0), T(0), T(0)}, error_msg(T(0), "/", T(0))),
};
}
INSTANTIATE_TEST_SUITE_P( //
@ -1472,68 +1483,6 @@ INSTANTIATE_TEST_SUITE_P( //
SmoothstepCases<f32>(),
SmoothstepCases<f16>()))));
template <typename T>
std::vector<Case> SmoothstepAFloatErrorCases() {
auto error_msg = [](auto a, const char* op, auto b) {
return "12:34 error: " + OverflowErrorMessage(a, op, b) + R"(
12:34 note: when calculating smoothstep)";
};
return {// `x - low` underflows
E({T::Highest(), T(1), T::Lowest()}, error_msg(T::Lowest(), "-", T::Highest())),
// `high - low` underflows
E({T::Highest(), T::Lowest(), T(0)}, error_msg(T::Lowest(), "-", T::Highest())),
// Divid by zero on `(x - low) / (high - low)`
E({T(0), T(0), T(0)}, error_msg(T(0), "/", T(0)))};
}
INSTANTIATE_TEST_SUITE_P( //
SmoothstepAFloatError,
ResolverConstEvalBuiltinTest,
testing::Combine(testing::Values(sem::BuiltinType::kSmoothstep),
testing::ValuesIn(SmoothstepAFloatErrorCases<AFloat>())));
template <typename T>
std::vector<Case> SmoothstepF16ErrorCases() {
auto error_msg = [](auto a, const char* op, auto b) {
return "12:34 error: " + OverflowErrorMessage(a, op, b) + R"(
12:34 note: when calculating smoothstep)";
};
return {// `x - low` underflows
E({T::Highest(), T(1), T::Lowest()}, error_msg(T::Lowest(), "-", T::Highest())),
// `high - low` underflows
E({T::Highest(), T::Lowest(), T(0)}, error_msg(T::Lowest(), "-", T::Highest())),
// Divid by zero on `(x - low) / (high - low)`
E({T(0), T(0), T(0)}, error_msg(T(0), "/", T(0)))};
}
// TODO(crbug.com/tint/1581): Enable when non-abstract math is checked.
INSTANTIATE_TEST_SUITE_P( //
DISABLED_SmoothstepF16Error,
ResolverConstEvalBuiltinTest,
testing::Combine(testing::Values(sem::BuiltinType::kSmoothstep),
testing::ValuesIn(SmoothstepF16ErrorCases<f16>())));
template <typename T>
std::vector<Case> SmoothstepF32ErrorCases() {
auto error_msg = [](auto a, const char* op, auto b) {
return "12:34 error: " + OverflowErrorMessage(a, op, b) + R"(
12:34 note: when calculating smoothstep)";
};
return {// `x - low` underflows
E({T::Highest(), T(1), T::Lowest()}, error_msg(T::Lowest(), "-", T::Highest())),
// `high - low` underflows
E({T::Highest(), T::Lowest(), T(0)}, error_msg(T::Lowest(), "-", T::Highest())),
// Divid by zero on `(x - low) / (high - low)`
E({T(0), T(0), T(0)}, error_msg(T(0), "/", T(0)))};
}
// TODO(crbug.com/tint/1581): Enable when non-abstract math is checked.
INSTANTIATE_TEST_SUITE_P( //
DISABLED_SmoothstepF32Error,
ResolverConstEvalBuiltinTest,
testing::Combine(testing::Values(sem::BuiltinType::kSmoothstep),
testing::ValuesIn(SmoothstepF32ErrorCases<f32>())));
template <typename T>
std::vector<Case> StepCases() {
return {