aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/ADT/APFloatTest.cpp
diff options
context:
space:
mode:
authorSanjay Patel <spatel@rotateright.com>2020-09-24 07:29:18 -0400
committerSanjay Patel <spatel@rotateright.com>2020-09-24 07:43:07 -0400
commitb2c46633d1296a9080098abc4e6c6214d19005c0 (patch)
treed9e75b01925147d0f479edff8ff14d53dffc42d9 /llvm/unittests/ADT/APFloatTest.cpp
parent3ed04f93e30121867a813a220452b97aebeb1730 (diff)
downloadllvm-b2c46633d1296a9080098abc4e6c6214d19005c0.zip
llvm-b2c46633d1296a9080098abc4e6c6214d19005c0.tar.gz
llvm-b2c46633d1296a9080098abc4e6c6214d19005c0.tar.bz2
[APFloat] add tests for convert of NAN; NFC
More coverage for the bug fix proposed in D87835.
Diffstat (limited to 'llvm/unittests/ADT/APFloatTest.cpp')
-rw-r--r--llvm/unittests/ADT/APFloatTest.cpp18
1 files changed, 16 insertions, 2 deletions
diff --git a/llvm/unittests/ADT/APFloatTest.cpp b/llvm/unittests/ADT/APFloatTest.cpp
index b24b43d..e3b4e5c 100644
--- a/llvm/unittests/ADT/APFloatTest.cpp
+++ b/llvm/unittests/ADT/APFloatTest.cpp
@@ -1817,10 +1817,10 @@ TEST(APFloatTest, convert) {
test = APFloat::getSNaN(APFloat::IEEEsingle());
APFloat X87SNaN = APFloat::getSNaN(APFloat::x87DoubleExtended());
- test.convert(APFloat::x87DoubleExtended(), APFloat::rmNearestTiesToEven,
- &losesInfo);
+ APFloat::opStatus status = test.convert(APFloat::x87DoubleExtended(), APFloat::rmNearestTiesToEven, &losesInfo);
EXPECT_TRUE(test.bitwiseIsEqual(X87SNaN));
EXPECT_FALSE(losesInfo);
+ EXPECT_EQ(status, APFloat::opOK);
test = APFloat::getQNaN(APFloat::IEEEsingle());
APFloat X87QNaN = APFloat::getQNaN(APFloat::x87DoubleExtended());
@@ -1840,6 +1840,20 @@ TEST(APFloatTest, convert) {
&losesInfo);
EXPECT_TRUE(test.bitwiseIsEqual(X87QNaN));
EXPECT_FALSE(losesInfo);
+
+ // FIXME: This is wrong - NaN becomes Inf.
+ APInt payload(52, 1);
+ test = APFloat::getSNaN(APFloat::IEEEdouble(), false, &payload);
+ status = test.convert(APFloat::IEEEsingle(), APFloat::rmNearestTiesToEven, &losesInfo);
+ EXPECT_EQ(0x7f800000, test.bitcastToAPInt());
+ EXPECT_TRUE(losesInfo);
+ EXPECT_EQ(status, APFloat::opOK);
+
+ test = APFloat::getQNaN(APFloat::IEEEdouble(), false, &payload);
+ status = test.convert(APFloat::IEEEsingle(), APFloat::rmNearestTiesToEven, &losesInfo);
+ EXPECT_EQ(0x7fc00000, test.bitcastToAPInt());
+ EXPECT_TRUE(losesInfo);
+ EXPECT_EQ(status, APFloat::opOK);
}
TEST(APFloatTest, PPCDoubleDouble) {