[llvm] 8088f5b - [support] Fix PrintNumber Test on AIX
Paul Kirth via llvm-commits
llvm-commits at lists.llvm.org
Thu Mar 23 10:49:11 PDT 2023
Author: Paul Kirth
Date: 2023-03-23T17:49:03Z
New Revision: 8088f5bf2dc051dc0828990b3df2a3299c9f0433
URL: https://github.com/llvm/llvm-project/commit/8088f5bf2dc051dc0828990b3df2a3299c9f0433
DIFF: https://github.com/llvm/llvm-project/commit/8088f5bf2dc051dc0828990b3df2a3299c9f0433.diff
LOG: [support] Fix PrintNumber Test on AIX
When fixing the test earlier, we missed the JSON case for NaN and INF,
so handle those the same as for non-JSON, by creating the string
dynamically.
Reviewed By: abhina.sreeskantharajan
Differential Revision: https://reviews.llvm.org/D146739
Added:
Modified:
llvm/unittests/Support/ScopedPrinterTest.cpp
Removed:
################################################################################
diff --git a/llvm/unittests/Support/ScopedPrinterTest.cpp b/llvm/unittests/Support/ScopedPrinterTest.cpp
index f62d310f25d95..9ebcb0b14bd43 100644
--- a/llvm/unittests/Support/ScopedPrinterTest.cpp
+++ b/llvm/unittests/Support/ScopedPrinterTest.cpp
@@ -510,7 +510,16 @@ FirstSecondThirdByteMask [ (0x333)
}
TEST_F(ScopedPrinterTest, PrintNumber) {
- auto PrintFunc = [](ScopedPrinter &W) {
+ constexpr float MaxFloat = std::numeric_limits<float>::max();
+ constexpr float MinFloat = std::numeric_limits<float>::min();
+ constexpr float InfFloat = std::numeric_limits<float>::infinity();
+ const float NaNFloat = std::nanf("1");
+ constexpr double MaxDouble = std::numeric_limits<double>::max();
+ constexpr double MinDouble = std::numeric_limits<double>::min();
+ constexpr double InfDouble = std::numeric_limits<double>::infinity();
+ const double NaNDouble = std::nan("1");
+
+ auto PrintFunc = [&](ScopedPrinter &W) {
uint64_t Unsigned64Max = std::numeric_limits<uint64_t>::max();
uint64_t Unsigned64Min = std::numeric_limits<uint64_t>::min();
W.printNumber("uint64_t-max", Unsigned64Max);
@@ -556,10 +565,6 @@ TEST_F(ScopedPrinterTest, PrintNumber) {
W.printNumber("label", "value", 0);
- float MaxFloat = std::numeric_limits<float>::max();
- float MinFloat = std::numeric_limits<float>::min();
- float InfFloat = std::numeric_limits<float>::infinity();
- float NaNFloat = std::nanf("1");
W.printNumber("float-max", MaxFloat);
W.printNumber("float-min", MinFloat);
W.printNumber("float-inf", InfFloat);
@@ -567,11 +572,7 @@ TEST_F(ScopedPrinterTest, PrintNumber) {
W.printNumber("float-42.0", 42.0f);
W.printNumber("float-42.5625", 42.5625f);
- double MaxDouble = std::numeric_limits<double>::max();
- double MinDouble = std::numeric_limits<double>::min();
- double InfDouble = std::numeric_limits<double>::infinity();
- double NaNDouble = std::nan("1");
- W.printNumber("double-max", MaxDouble);
+ W.printNumber("double-max", MaxDouble);
W.printNumber("double-min", MinDouble);
W.printNumber("double-inf", InfDouble);
W.printNumber("double-nan", NaNDouble);
@@ -583,29 +584,30 @@ TEST_F(ScopedPrinterTest, PrintNumber) {
// implementation defined behavior. So format the max float/double, instead of
// hard coding it in the tests. Note: we can't just use std::to_string(),
// since we format the float in PrintNumber(). This isn't required for JSON
- // formatting, since it uses exponents, which will be consistent.
+ // formatting, since it uses exponents, which will be consistent. However,
+ // NaN and INF may be printed
diff erently, (like AIX), so we still need to
+ // handle those cases for JSON checking.
// Allocate a buffer large enough to represent large floating point values
// and construct the string representation for them there.
char Buf[512];
- format("%5.1f", std::numeric_limits<float>::max()).snprint(Buf, sizeof(Buf));
+ format("%5.1f", MaxFloat).snprint(Buf, sizeof(Buf));
std::string MaxFloatStr(Buf);
- format("%5.1f", std::numeric_limits<double>::max()).snprint(Buf, sizeof(Buf));
+ format("%5.1f", MaxDouble).snprint(Buf, sizeof(Buf));
std::string MaxDoubleStr(Buf);
- format("%5.1f", std::numeric_limits<double>::infinity())
- .snprint(Buf, sizeof(Buf));
+ format("%5.1f", InfFloat).snprint(Buf, sizeof(Buf));
std::string InfFloatStr(Buf);
- std::to_string(std::numeric_limits<float>::infinity());
+ format("%5.1f", InfDouble).snprint(Buf, sizeof(Buf));
std::string InfDoubleStr(Buf);
- format("%5.1f", std::nanf("1")).snprint(Buf, sizeof(Buf));
+ format("%5.1f", NaNFloat).snprint(Buf, sizeof(Buf));
std::string NaNFloatStr(Buf);
- format("%5.1f", std::nan("1")).snprint(Buf, sizeof(Buf));
+ format("%5.1f", NaNDouble).snprint(Buf, sizeof(Buf));
std::string NaNDoubleStr(Buf);
std::string ExpectedOut = Twine(
@@ -643,7 +645,7 @@ double-42.5625: 42.6
)")
.str();
- const char *JSONExpectedOut = R"({
+ std::string JSONExpectedOut = Twine(R"({
"uint64_t-max": 18446744073709551615,
"uint64_t-min": 0,
"uint32_t-max": 4294967295,
@@ -667,17 +669,17 @@ double-42.5625: 42.6
},
"float-max": 3.4028234663852886e+38,
"float-min": 1.1754943508222875e-38,
- "float-inf": inf,
- "float-nan": nan,
+ "float-inf": )" + std::to_string(InfFloat) + R"(,
+ "float-nan": )" + std::to_string(NaNFloat) + R"(,
"float-42.0": 42,
"float-42.5625": 42.5625,
"double-max": 1.7976931348623157e+308,
"double-min": 2.2250738585072014e-308,
- "double-inf": inf,
- "double-nan": nan,
+ "double-inf": )" + std::to_string(InfDouble) + R"(,
+ "double-nan": )" + std::to_string(NaNDouble) + R"(,
"double-42.0": 42,
"double-42.5625": 42.5625
-})";
+})").str();
verifyAll(ExpectedOut, JSONExpectedOut, PrintFunc);
}
More information about the llvm-commits
mailing list