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:
parent
1eaeb310a7
commit
f5eec817de
|
@ -349,9 +349,9 @@ std::vector<Case> AtanhCases() {
|
||||||
// Vector tests
|
// Vector tests
|
||||||
C({Vec(T(0.0), T(0.9), -T(0.9))}, Vec(T(0.0), T(1.4722193), -T(1.4722193))).FloatComp(),
|
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)"),
|
"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)"),
|
"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
|
// Vector tests
|
||||||
C({Vec(T(1.0), -T(1.0))}, Vec(T(0), kPi<T>)).FloatComp(),
|
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)"),
|
"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)"),
|
"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(),
|
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({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({-T(1.1)}, "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(0)}, "12:34 error: acosh must be called with a value >= 1.0"),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
INSTANTIATE_TEST_SUITE_P( //
|
INSTANTIATE_TEST_SUITE_P( //
|
||||||
|
@ -424,9 +424,9 @@ std::vector<Case> AsinCases() {
|
||||||
// Vector tests
|
// Vector tests
|
||||||
C({Vec(T(0.0), T(1.0), -T(1.0))}, Vec(T(0.0), kPiOver2<T>, -kPiOver2<T>)).FloatComp(),
|
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)"),
|
"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)"),
|
"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>
|
template <typename T>
|
||||||
std::vector<Case> SmoothstepCases() {
|
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 {
|
return {
|
||||||
// t == 0
|
// t == 0
|
||||||
C({T(4), T(6), T(2)}, T(0)),
|
C({T(4), T(6), T(2)}, T(0)),
|
||||||
|
@ -1462,6 +1466,13 @@ std::vector<Case> SmoothstepCases() {
|
||||||
|
|
||||||
// Vector tests
|
// Vector tests
|
||||||
C({Vec(T(4), T(4)), Vec(T(6), T(6)), Vec(T(2), T(8))}, Vec(T(0), T(1))),
|
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( //
|
INSTANTIATE_TEST_SUITE_P( //
|
||||||
|
@ -1472,68 +1483,6 @@ INSTANTIATE_TEST_SUITE_P( //
|
||||||
SmoothstepCases<f32>(),
|
SmoothstepCases<f32>(),
|
||||||
SmoothstepCases<f16>()))));
|
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>
|
template <typename T>
|
||||||
std::vector<Case> StepCases() {
|
std::vector<Case> StepCases() {
|
||||||
return {
|
return {
|
||||||
|
|
Loading…
Reference in New Issue