diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2014-10-10 05:14:12 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2014-10-10 05:14:12 +0000 |
commit | ca067148b2fe604036fb4f0f9b59c539ab5802cc (patch) | |
tree | 81269dc6fdc4d8ebcd6d3abd64791f36ffcb3581 /llvm/unittests/ADT/APFloatTest.cpp | |
parent | d9edd1e2abcb46d379bd12aca7724bfed3638dcb (diff) | |
download | llvm-ca067148b2fe604036fb4f0f9b59c539ab5802cc.zip llvm-ca067148b2fe604036fb4f0f9b59c539ab5802cc.tar.gz llvm-ca067148b2fe604036fb4f0f9b59c539ab5802cc.tar.bz2 |
[ADT] Replace the logb implementation with the simpler and much closer
to what we actually want ilogb implementation. This makes everything
*much* easier to deal with and is actually what we want when using it
anyways.
llvm-svn: 219474
Diffstat (limited to 'llvm/unittests/ADT/APFloatTest.cpp')
-rw-r--r-- | llvm/unittests/ADT/APFloatTest.cpp | 76 |
1 files changed, 27 insertions, 49 deletions
diff --git a/llvm/unittests/ADT/APFloatTest.cpp b/llvm/unittests/ADT/APFloatTest.cpp index bc11dab..8a29b86 100644 --- a/llvm/unittests/ADT/APFloatTest.cpp +++ b/llvm/unittests/ADT/APFloatTest.cpp @@ -2692,55 +2692,33 @@ TEST(APFloatTest, operatorOverloads) { EXPECT_TRUE(One.bitwiseIsEqual(Two / Two)); } -TEST(APFloatTest, logb) { - EXPECT_TRUE( - APFloat(APFloat::IEEEsingle, "0x0p+0") - .bitwiseIsEqual(logb(APFloat(APFloat::IEEEsingle, "0x1p+0")))); - EXPECT_TRUE( - APFloat(APFloat::IEEEsingle, "0x0p+0") - .bitwiseIsEqual(logb(APFloat(APFloat::IEEEsingle, "-0x1p+0")))); - EXPECT_TRUE( - APFloat(APFloat::IEEEsingle, "0x2Ap+0") - .bitwiseIsEqual(logb(APFloat(APFloat::IEEEsingle, "0x1p+42")))); - EXPECT_TRUE( - APFloat(APFloat::IEEEsingle, "-0x2Ap+0") - .bitwiseIsEqual(logb(APFloat(APFloat::IEEEsingle, "0x1p-42")))); - - APFloat PInf = APFloat::getInf(APFloat::IEEEsingle, false); - APFloat MInf = APFloat::getInf(APFloat::IEEEsingle, true); - APFloat PZero = APFloat::getZero(APFloat::IEEEsingle, false); - APFloat MZero = APFloat::getZero(APFloat::IEEEsingle, true); - APFloat QNaN = APFloat::getNaN(APFloat::IEEEsingle, false); - APFloat SNaN = APFloat::getSNaN(APFloat::IEEEsingle, false); - - EXPECT_TRUE(PInf.bitwiseIsEqual(logb(PInf))); - EXPECT_TRUE(PInf.bitwiseIsEqual(logb(MInf))); - EXPECT_TRUE(PZero.bitwiseIsEqual(logb(PZero))); - EXPECT_TRUE(MZero.bitwiseIsEqual(logb(MZero))); - EXPECT_TRUE(QNaN.bitwiseIsEqual(logb(QNaN))); - EXPECT_TRUE(SNaN.bitwiseIsEqual(logb(SNaN))); - - APFloat PLargestValue = APFloat::getLargest(APFloat::IEEEsingle, false); - APFloat MLargestValue = APFloat::getLargest(APFloat::IEEEsingle, true); - APFloat PSmallestValue = APFloat::getSmallest(APFloat::IEEEsingle, false); - APFloat MSmallestValue = APFloat::getSmallest(APFloat::IEEEsingle, true); - APFloat PSmallestNormalized = - APFloat::getSmallestNormalized(APFloat::IEEEsingle, false); - APFloat MSmallestNormalized = - APFloat::getSmallestNormalized(APFloat::IEEEsingle, true); - - EXPECT_TRUE( - APFloat(APFloat::IEEEsingle, "0x7Fp+0").bitwiseIsEqual(logb(PLargestValue))); - EXPECT_TRUE( - APFloat(APFloat::IEEEsingle, "0x7Fp+0").bitwiseIsEqual(logb(MLargestValue))); - EXPECT_TRUE( - APFloat(APFloat::IEEEsingle, "-0x7Ep+0").bitwiseIsEqual(logb(PSmallestValue))); - EXPECT_TRUE( - APFloat(APFloat::IEEEsingle, "-0x7Ep+0").bitwiseIsEqual(logb(MSmallestValue))); - EXPECT_TRUE(APFloat(APFloat::IEEEsingle, "-0x7Ep+0") - .bitwiseIsEqual(logb(PSmallestNormalized))); - EXPECT_TRUE(APFloat(APFloat::IEEEsingle, "-0x7Ep+0") - .bitwiseIsEqual(logb(MSmallestNormalized))); +TEST(APFloatTest, ilogb) { + EXPECT_EQ(0, ilogb(APFloat(APFloat::IEEEsingle, "0x1p+0"))); + EXPECT_EQ(0, ilogb(APFloat(APFloat::IEEEsingle, "-0x1p+0"))); + EXPECT_EQ(42, ilogb(APFloat(APFloat::IEEEsingle, "0x1p+42"))); + EXPECT_EQ(-42, ilogb(APFloat(APFloat::IEEEsingle, "0x1p-42"))); + + EXPECT_EQ(APFloat::IEK_Inf, + ilogb(APFloat::getInf(APFloat::IEEEsingle, false))); + EXPECT_EQ(APFloat::IEK_Inf, + ilogb(APFloat::getInf(APFloat::IEEEsingle, true))); + EXPECT_EQ(APFloat::IEK_Zero, + ilogb(APFloat::getZero(APFloat::IEEEsingle, false))); + EXPECT_EQ(APFloat::IEK_Zero, + ilogb(APFloat::getZero(APFloat::IEEEsingle, true))); + EXPECT_EQ(APFloat::IEK_NaN, + ilogb(APFloat::getNaN(APFloat::IEEEsingle, false))); + EXPECT_EQ(APFloat::IEK_NaN, + ilogb(APFloat::getSNaN(APFloat::IEEEsingle, false))); + + EXPECT_EQ(127, ilogb(APFloat::getLargest(APFloat::IEEEsingle, false))); + EXPECT_EQ(127, ilogb(APFloat::getLargest(APFloat::IEEEsingle, true))); + EXPECT_EQ(-126, ilogb(APFloat::getSmallest(APFloat::IEEEsingle, false))); + EXPECT_EQ(-126, ilogb(APFloat::getSmallest(APFloat::IEEEsingle, true))); + EXPECT_EQ(-126, + ilogb(APFloat::getSmallestNormalized(APFloat::IEEEsingle, false))); + EXPECT_EQ(-126, + ilogb(APFloat::getSmallestNormalized(APFloat::IEEEsingle, true))); } TEST(APFloatTest, scalbn) { |