aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/ADT/APFloatTest.cpp
diff options
context:
space:
mode:
authorEli Friedman <eli.friedman@gmail.com>2013-07-17 22:17:29 +0000
committerEli Friedman <eli.friedman@gmail.com>2013-07-17 22:17:29 +0000
commitd2eb07acaeda397dbd645cb0c4fa168d889d34f6 (patch)
tree37f236b78dfd6aad211fbfc2b3bdc17206709bb6 /llvm/unittests/ADT/APFloatTest.cpp
parent00cf53520bfe51c6b9bdb81c3a0e613cc3180586 (diff)
downloadllvm-d2eb07acaeda397dbd645cb0c4fa168d889d34f6.zip
llvm-d2eb07acaeda397dbd645cb0c4fa168d889d34f6.tar.gz
llvm-d2eb07acaeda397dbd645cb0c4fa168d889d34f6.tar.bz2
Handle '.' correctly in hex float literal parsing.
There were a couple of different loops that were not handling '.' correctly in APFloat::convertFromHexadecimalString; these mistakes could lead to assertion failures and incorrect rounding for overlong hex float literals. Fixes PR16643. llvm-svn: 186539
Diffstat (limited to 'llvm/unittests/ADT/APFloatTest.cpp')
-rw-r--r--llvm/unittests/ADT/APFloatTest.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/llvm/unittests/ADT/APFloatTest.cpp b/llvm/unittests/ADT/APFloatTest.cpp
index 46dfbd1..1d6d8ca 100644
--- a/llvm/unittests/ADT/APFloatTest.cpp
+++ b/llvm/unittests/ADT/APFloatTest.cpp
@@ -766,6 +766,8 @@ TEST(APFloatTest, fromDecimalString) {
EXPECT_TRUE(APFloat(APFloat::IEEEdouble, "-99e99999").isInfinity());
EXPECT_TRUE(APFloat(APFloat::IEEEdouble, "1e-99999").isPosZero());
EXPECT_TRUE(APFloat(APFloat::IEEEdouble, "-1e-99999").isNegZero());
+
+ EXPECT_EQ(2.71828, convertToDoubleFromString("2.71828"));
}
TEST(APFloatTest, fromHexadecimalString) {
@@ -849,7 +851,10 @@ TEST(APFloatTest, fromHexadecimalString) {
EXPECT_EQ(1.0625, APFloat(APFloat::IEEEdouble, "0x1.1p0").convertToDouble());
EXPECT_EQ(1.0, APFloat(APFloat::IEEEdouble, "0x1p0").convertToDouble());
- EXPECT_EQ(2.71828, convertToDoubleFromString("2.71828"));
+ EXPECT_EQ(convertToDoubleFromString("0x1p-150"),
+ convertToDoubleFromString("+0x800000000000000001.p-221"));
+ EXPECT_EQ(2251799813685248.5,
+ convertToDoubleFromString("0x80000000000004000000.010p-28"));
}
TEST(APFloatTest, toString) {