@@ -2141,6 +2141,8 @@ TEST(APFloatTest, getZero) {
21412141 {&APFloat::Float8E4M3FNUZ (), true , false , {0 , 0 }, 1 },
21422142 {&APFloat::Float8E4M3B11FNUZ (), false , false , {0 , 0 }, 1 },
21432143 {&APFloat::Float8E4M3B11FNUZ (), true , false , {0 , 0 }, 1 },
2144+ {&APFloat::Float8E3M4 (), false , true , {0 , 0 }, 1 },
2145+ {&APFloat::Float8E3M4 (), true , true , {0x80ULL , 0 }, 1 },
21442146 {&APFloat::FloatTF32 (), false , true , {0 , 0 }, 1 },
21452147 {&APFloat::FloatTF32 (), true , true , {0x40000ULL , 0 }, 1 },
21462148 {&APFloat::Float6E3M2FN (), false , true , {0 , 0 }, 1 },
@@ -6636,6 +6638,45 @@ TEST(APFloatTest, Float8E4M3FNUZToDouble) {
66366638 EXPECT_TRUE (std::isnan (QNaN.convertToDouble ()));
66376639}
66386640
6641+ TEST (APFloatTest, Float8E3M4ToDouble) {
6642+ APFloat PosZero = APFloat::getZero (APFloat::Float8E3M4 (), false );
6643+ APFloat PosZeroToDouble (PosZero.convertToDouble ());
6644+ EXPECT_TRUE (PosZeroToDouble.isPosZero ());
6645+ APFloat NegZero = APFloat::getZero (APFloat::Float8E3M4 (), true );
6646+ APFloat NegZeroToDouble (NegZero.convertToDouble ());
6647+ EXPECT_TRUE (NegZeroToDouble.isNegZero ());
6648+
6649+ APFloat One (APFloat::Float8E3M4 (), " 1.0" );
6650+ EXPECT_EQ (1.0 , One.convertToDouble ());
6651+ APFloat Two (APFloat::Float8E3M4 (), " 2.0" );
6652+ EXPECT_EQ (2.0 , Two.convertToDouble ());
6653+ APFloat PosLargest = APFloat::getLargest (APFloat::Float8E3M4 (), false );
6654+ EXPECT_EQ (15 .5F , PosLargest.convertToDouble ());
6655+ APFloat NegLargest = APFloat::getLargest (APFloat::Float8E3M4 (), true );
6656+ EXPECT_EQ (-15 .5F , NegLargest.convertToDouble ());
6657+ APFloat PosSmallest =
6658+ APFloat::getSmallestNormalized (APFloat::Float8E3M4 (), false );
6659+ EXPECT_EQ (0x1 .p -2 , PosSmallest.convertToDouble ());
6660+ APFloat NegSmallest =
6661+ APFloat::getSmallestNormalized (APFloat::Float8E3M4 (), true );
6662+ EXPECT_EQ (-0x1 .p -2 , NegSmallest.convertToDouble ());
6663+
6664+ APFloat PosSmallestDenorm =
6665+ APFloat::getSmallest (APFloat::Float8E3M4 (), false );
6666+ EXPECT_TRUE (PosSmallestDenorm.isDenormal ());
6667+ EXPECT_EQ (0x1 .p -6 , PosSmallestDenorm.convertToDouble ());
6668+ APFloat NegSmallestDenorm = APFloat::getSmallest (APFloat::Float8E3M4 (), true );
6669+ EXPECT_TRUE (NegSmallestDenorm.isDenormal ());
6670+ EXPECT_EQ (-0x1 .p -6 , NegSmallestDenorm.convertToDouble ());
6671+
6672+ APFloat PosInf = APFloat::getInf (APFloat::Float8E3M4 ());
6673+ EXPECT_EQ (std::numeric_limits<double >::infinity (), PosInf.convertToDouble ());
6674+ APFloat NegInf = APFloat::getInf (APFloat::Float8E3M4 (), true );
6675+ EXPECT_EQ (-std::numeric_limits<double >::infinity (), NegInf.convertToDouble ());
6676+ APFloat QNaN = APFloat::getQNaN (APFloat::Float8E3M4 ());
6677+ EXPECT_TRUE (std::isnan (QNaN.convertToDouble ()));
6678+ }
6679+
66396680TEST (APFloatTest, FloatTF32ToDouble) {
66406681 APFloat One (APFloat::FloatTF32 (), " 1.0" );
66416682 EXPECT_EQ (1.0 , One.convertToDouble ());
@@ -6944,6 +6985,46 @@ TEST(APFloatTest, Float8E4M3FNToFloat) {
69446985 EXPECT_TRUE (std::isnan (QNaN.convertToFloat ()));
69456986}
69466987
6988+ TEST (APFloatTest, Float8E3M4ToFloat) {
6989+ APFloat PosZero = APFloat::getZero (APFloat::Float8E3M4 (), false );
6990+ APFloat PosZeroToFloat (PosZero.convertToFloat ());
6991+ EXPECT_TRUE (PosZeroToFloat.isPosZero ());
6992+ APFloat NegZero = APFloat::getZero (APFloat::Float8E3M4 (), true );
6993+ APFloat NegZeroToFloat (NegZero.convertToFloat ());
6994+ EXPECT_TRUE (NegZeroToFloat.isNegZero ());
6995+
6996+ APFloat One (APFloat::Float8E3M4 (), " 1.0" );
6997+ EXPECT_EQ (1 .0F , One.convertToFloat ());
6998+ APFloat Two (APFloat::Float8E3M4 (), " 2.0" );
6999+ EXPECT_EQ (2 .0F , Two.convertToFloat ());
7000+
7001+ APFloat PosLargest = APFloat::getLargest (APFloat::Float8E3M4 (), false );
7002+ EXPECT_EQ (15 .5F , PosLargest.convertToFloat ());
7003+ APFloat NegLargest = APFloat::getLargest (APFloat::Float8E3M4 (), true );
7004+ EXPECT_EQ (-15 .5F , NegLargest.convertToFloat ());
7005+ APFloat PosSmallest =
7006+ APFloat::getSmallestNormalized (APFloat::Float8E3M4 (), false );
7007+ EXPECT_EQ (0x1 .p -2 , PosSmallest.convertToFloat ());
7008+ APFloat NegSmallest =
7009+ APFloat::getSmallestNormalized (APFloat::Float8E3M4 (), true );
7010+ EXPECT_EQ (-0x1 .p -2 , NegSmallest.convertToFloat ());
7011+
7012+ APFloat PosSmallestDenorm =
7013+ APFloat::getSmallest (APFloat::Float8E3M4 (), false );
7014+ EXPECT_TRUE (PosSmallestDenorm.isDenormal ());
7015+ EXPECT_EQ (0x1 .p -6 , PosSmallestDenorm.convertToFloat ());
7016+ APFloat NegSmallestDenorm = APFloat::getSmallest (APFloat::Float8E3M4 (), true );
7017+ EXPECT_TRUE (NegSmallestDenorm.isDenormal ());
7018+ EXPECT_EQ (-0x1 .p -6 , NegSmallestDenorm.convertToFloat ());
7019+
7020+ APFloat PosInf = APFloat::getInf (APFloat::Float8E3M4 ());
7021+ EXPECT_EQ (std::numeric_limits<float >::infinity (), PosInf.convertToFloat ());
7022+ APFloat NegInf = APFloat::getInf (APFloat::Float8E3M4 (), true );
7023+ EXPECT_EQ (-std::numeric_limits<float >::infinity (), NegInf.convertToFloat ());
7024+ APFloat QNaN = APFloat::getQNaN (APFloat::Float8E3M4 ());
7025+ EXPECT_TRUE (std::isnan (QNaN.convertToFloat ()));
7026+ }
7027+
69477028TEST (APFloatTest, FloatTF32ToFloat) {
69487029 APFloat PosZero = APFloat::getZero (APFloat::FloatTF32 ());
69497030 APFloat PosZeroToFloat (PosZero.convertToFloat ());
0 commit comments