diff options
Diffstat (limited to 'unittests/ADT/APFloatTest.cpp')
-rw-r--r-- | unittests/ADT/APFloatTest.cpp | 38 |
1 files changed, 35 insertions, 3 deletions
diff --git a/unittests/ADT/APFloatTest.cpp b/unittests/ADT/APFloatTest.cpp index 69da089f172b..84fb6fad1566 100644 --- a/unittests/ADT/APFloatTest.cpp +++ b/unittests/ADT/APFloatTest.cpp @@ -1349,6 +1349,24 @@ TEST(APFloatTest, isInteger) { EXPECT_TRUE(T.isInteger()); } +TEST(DoubleAPFloatTest, isInteger) { + APFloat F1(-0.0); + APFloat F2(-0.0); + llvm::detail::DoubleAPFloat T(APFloat::PPCDoubleDouble(), std::move(F1), + std::move(F2)); + EXPECT_TRUE(T.isInteger()); + APFloat F3(3.14159); + APFloat F4(-0.0); + llvm::detail::DoubleAPFloat T2(APFloat::PPCDoubleDouble(), std::move(F3), + std::move(F4)); + EXPECT_FALSE(T2.isInteger()); + APFloat F5(-0.0); + APFloat F6(3.14159); + llvm::detail::DoubleAPFloat T3(APFloat::PPCDoubleDouble(), std::move(F5), + std::move(F6)); + EXPECT_FALSE(T3.isInteger()); +} + TEST(APFloatTest, getLargest) { EXPECT_EQ(3.402823466e+38f, APFloat::getLargest(APFloat::IEEEsingle()).convertToFloat()); EXPECT_EQ(1.7976931348623158e+308, APFloat::getLargest(APFloat::IEEEdouble()).convertToDouble()); @@ -1437,16 +1455,16 @@ TEST(APFloatTest, getZero) { const unsigned NumGetZeroTests = 12; for (unsigned i = 0; i < NumGetZeroTests; ++i) { APFloat test = APFloat::getZero(*GetZeroTest[i].semantics, - GetZeroTest[i].sign); + GetZeroTest[i].sign); const char *pattern = GetZeroTest[i].sign? "-0x0p+0" : "0x0p+0"; APFloat expected = APFloat(*GetZeroTest[i].semantics, - pattern); + pattern); EXPECT_TRUE(test.isZero()); EXPECT_TRUE(GetZeroTest[i].sign? test.isNegative() : !test.isNegative()); EXPECT_TRUE(test.bitwiseIsEqual(expected)); for (unsigned j = 0, je = GetZeroTest[i].bitPatternLength; j < je; ++j) { EXPECT_EQ(GetZeroTest[i].bitPattern[j], - test.bitcastToAPInt().getRawData()[j]); + test.bitcastToAPInt().getRawData()[j]); } } } @@ -3271,6 +3289,20 @@ TEST(APFloatTest, mod) { EXPECT_EQ(f1.mod(f2), APFloat::opInvalidOp); EXPECT_TRUE(f1.isNaN()); } + { + APFloat f1(APFloat::IEEEdouble(), "-4.0"); + APFloat f2(APFloat::IEEEdouble(), "-2.0"); + APFloat expected(APFloat::IEEEdouble(), "-0.0"); + EXPECT_EQ(f1.mod(f2), APFloat::opOK); + EXPECT_TRUE(f1.bitwiseIsEqual(expected)); + } + { + APFloat f1(APFloat::IEEEdouble(), "-4.0"); + APFloat f2(APFloat::IEEEdouble(), "2.0"); + APFloat expected(APFloat::IEEEdouble(), "-0.0"); + EXPECT_EQ(f1.mod(f2), APFloat::opOK); + EXPECT_TRUE(f1.bitwiseIsEqual(expected)); + } } TEST(APFloatTest, PPCDoubleDoubleAddSpecial) { |