diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2013-07-17 22:17:29 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2013-07-17 22:17:29 +0000 |
commit | 763c066dca324ac4b86e7f014fe580ae5ba29fa0 (patch) | |
tree | 53d2b5421b3b00b505ab2d2f4942823bbed72fa4 /unittests | |
parent | a71443a002568e5b2ba8c494f291816b56a0ac08 (diff) | |
download | llvm-763c066dca324ac4b86e7f014fe580ae5ba29fa0.tar.gz llvm-763c066dca324ac4b86e7f014fe580ae5ba29fa0.tar.bz2 llvm-763c066dca324ac4b86e7f014fe580ae5ba29fa0.tar.xz |
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186539 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'unittests')
-rw-r--r-- | unittests/ADT/APFloatTest.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/unittests/ADT/APFloatTest.cpp b/unittests/ADT/APFloatTest.cpp index 46dfbd1d13..1d6d8caa32 100644 --- a/unittests/ADT/APFloatTest.cpp +++ b/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) { |