+
+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)));
+}