-
Notifications
You must be signed in to change notification settings - Fork 12.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[libcxx][test][z/OS] Fix hermite.pass.cpp for HEX float #101019
Conversation
@llvm/pr-subscribers-libcxx Author: Zibi Sarbinowski (zibi2) ChangesThe HEX float on z/OS does not have infinity nor NaN. In addition, the limits are smaller before the overflow occurs in mathematical calculations. This PR accounts for this. FYI, this LIT test was recently added in PR 89982 Full diff: https://github.com/llvm/llvm-project/pull/101019.diff 1 Files Affected:
diff --git a/libcxx/test/std/numerics/c.math/hermite.pass.cpp b/libcxx/test/std/numerics/c.math/hermite.pass.cpp
index 08fbd5c3283c1..fb702369ad036 100644
--- a/libcxx/test/std/numerics/c.math/hermite.pass.cpp
+++ b/libcxx/test/std/numerics/c.math/hermite.pass.cpp
@@ -26,7 +26,12 @@
#include "type_algorithms.h"
-inline constexpr unsigned g_max_n = 128;
+inline constexpr unsigned g_max_n =
+#if !(defined(__MVS__) && !defined(__BFP__))
+ 128;
+#else
+ 39;
+#endif
template <class T>
std::array<T, 11> sample_points() {
@@ -203,6 +208,7 @@ std::vector<T> get_roots(unsigned n) {
template <class Real>
void test() {
+#if !(defined(__MVS__) && !defined(__BFP__))
{ // checks if NaNs are reported correctly (i.e. output == input for input == NaN)
using nl = std::numeric_limits<Real>;
for (Real NaN : {nl::quiet_NaN(), nl::signaling_NaN()})
@@ -215,6 +221,7 @@ void test() {
for (unsigned n = 0; n < g_max_n; ++n)
assert(!std::isnan(std::hermite(n, x)));
}
+#endif
{ // checks std::hermite(n, x) for n=0..5 against analytic polynoms
const auto h0 = [](Real) -> Real { return 1; };
@@ -289,6 +296,7 @@ void test() {
}
}
+#if !(defined(__MVS__) && !defined(__BFP__))
{ // check input infinity is handled correctly
Real inf = std::numeric_limits<Real>::infinity();
for (unsigned n = 1; n < g_max_n; ++n) {
@@ -316,6 +324,7 @@ void test() {
}
}
}
+#endif
}
struct TestFloat {
|
✅ With the latest revision this PR passed the C/C++ code formatter. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
3cbd490
to
b4ece91
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
@zibi2 Thanks for finding and solving this issue! 👍 |
The HEX float on z/OS does not have infinity nor NaN. In addition, the limits are smaller before the overflow occurs in mathematical calculations. This PR accounts for this.
FYI, this LIT test was recently added in PR 89982