@@ -2133,6 +2133,8 @@ TEST(APFloatTest, getZero) {
2133
2133
{&APFloat::Float8E5M2(), true, true, {0x80ULL, 0}, 1},
2134
2134
{&APFloat::Float8E5M2FNUZ(), false, false, {0, 0}, 1},
2135
2135
{&APFloat::Float8E5M2FNUZ(), true, false, {0, 0}, 1},
2136
+ {&APFloat::Float8E4M3(), false, true, {0, 0}, 1},
2137
+ {&APFloat::Float8E4M3(), true, true, {0x80ULL, 0}, 1},
2136
2138
{&APFloat::Float8E4M3FN(), false, true, {0, 0}, 1},
2137
2139
{&APFloat::Float8E4M3FN(), true, true, {0x80ULL, 0}, 1},
2138
2140
{&APFloat::Float8E4M3FNUZ(), false, false, {0, 0}, 1},
@@ -6532,6 +6534,34 @@ TEST(APFloatTest, Float8E5M2ToDouble) {
6532
6534
EXPECT_TRUE(std::isnan(QNaN.convertToDouble()));
6533
6535
}
6534
6536
6537
+ TEST(APFloatTest, Float8E4M3ToDouble) {
6538
+ APFloat One(APFloat::Float8E4M3(), "1.0");
6539
+ EXPECT_EQ(1.0, One.convertToDouble());
6540
+ APFloat Two(APFloat::Float8E4M3(), "2.0");
6541
+ EXPECT_EQ(2.0, Two.convertToDouble());
6542
+ APFloat PosLargest = APFloat::getLargest(APFloat::Float8E4M3(), false);
6543
+ EXPECT_EQ(240.0F, PosLargest.convertToDouble());
6544
+ APFloat NegLargest = APFloat::getLargest(APFloat::Float8E4M3(), true);
6545
+ EXPECT_EQ(-240.0F, NegLargest.convertToDouble());
6546
+ APFloat PosSmallest =
6547
+ APFloat::getSmallestNormalized(APFloat::Float8E4M3(), false);
6548
+ EXPECT_EQ(0x1.p-6, PosSmallest.convertToDouble());
6549
+ APFloat NegSmallest =
6550
+ APFloat::getSmallestNormalized(APFloat::Float8E4M3(), true);
6551
+ EXPECT_EQ(-0x1.p-6, NegSmallest.convertToDouble());
6552
+
6553
+ APFloat SmallestDenorm = APFloat::getSmallest(APFloat::Float8E4M3(), false);
6554
+ EXPECT_TRUE(SmallestDenorm.isDenormal());
6555
+ EXPECT_EQ(0x1.p-9, SmallestDenorm.convertToDouble());
6556
+
6557
+ APFloat PosInf = APFloat::getInf(APFloat::Float8E4M3());
6558
+ EXPECT_EQ(std::numeric_limits<double>::infinity(), PosInf.convertToDouble());
6559
+ APFloat NegInf = APFloat::getInf(APFloat::Float8E4M3(), true);
6560
+ EXPECT_EQ(-std::numeric_limits<double>::infinity(), NegInf.convertToDouble());
6561
+ APFloat QNaN = APFloat::getQNaN(APFloat::Float8E4M3());
6562
+ EXPECT_TRUE(std::isnan(QNaN.convertToDouble()));
6563
+ }
6564
+
6535
6565
TEST(APFloatTest, Float8E4M3FNToDouble) {
6536
6566
APFloat One(APFloat::Float8E4M3FN(), "1.0");
6537
6567
EXPECT_EQ(1.0, One.convertToDouble());
@@ -6846,6 +6876,42 @@ TEST(APFloatTest, Float8E5M2ToFloat) {
6846
6876
EXPECT_TRUE(std::isnan(QNaN.convertToFloat()));
6847
6877
}
6848
6878
6879
+ TEST(APFloatTest, Float8E4M3ToFloat) {
6880
+ APFloat PosZero = APFloat::getZero(APFloat::Float8E4M3());
6881
+ APFloat PosZeroToFloat(PosZero.convertToFloat());
6882
+ EXPECT_TRUE(PosZeroToFloat.isPosZero());
6883
+ APFloat NegZero = APFloat::getZero(APFloat::Float8E4M3(), true);
6884
+ APFloat NegZeroToFloat(NegZero.convertToFloat());
6885
+ EXPECT_TRUE(NegZeroToFloat.isNegZero());
6886
+
6887
+ APFloat One(APFloat::Float8E4M3(), "1.0");
6888
+ EXPECT_EQ(1.0F, One.convertToFloat());
6889
+ APFloat Two(APFloat::Float8E4M3(), "2.0");
6890
+ EXPECT_EQ(2.0F, Two.convertToFloat());
6891
+
6892
+ APFloat PosLargest = APFloat::getLargest(APFloat::Float8E4M3(), false);
6893
+ EXPECT_EQ(240.0F, PosLargest.convertToFloat());
6894
+ APFloat NegLargest = APFloat::getLargest(APFloat::Float8E4M3(), true);
6895
+ EXPECT_EQ(-240.0F, NegLargest.convertToFloat());
6896
+ APFloat PosSmallest =
6897
+ APFloat::getSmallestNormalized(APFloat::Float8E4M3(), false);
6898
+ EXPECT_EQ(0x1.p-6, PosSmallest.convertToFloat());
6899
+ APFloat NegSmallest =
6900
+ APFloat::getSmallestNormalized(APFloat::Float8E4M3(), true);
6901
+ EXPECT_EQ(-0x1.p-6, NegSmallest.convertToFloat());
6902
+
6903
+ APFloat SmallestDenorm = APFloat::getSmallest(APFloat::Float8E4M3(), false);
6904
+ EXPECT_TRUE(SmallestDenorm.isDenormal());
6905
+ EXPECT_EQ(0x1.p-9, SmallestDenorm.convertToFloat());
6906
+
6907
+ APFloat PosInf = APFloat::getInf(APFloat::Float8E4M3());
6908
+ EXPECT_EQ(std::numeric_limits<float>::infinity(), PosInf.convertToFloat());
6909
+ APFloat NegInf = APFloat::getInf(APFloat::Float8E4M3(), true);
6910
+ EXPECT_EQ(-std::numeric_limits<float>::infinity(), NegInf.convertToFloat());
6911
+ APFloat QNaN = APFloat::getQNaN(APFloat::Float8E4M3());
6912
+ EXPECT_TRUE(std::isnan(QNaN.convertToFloat()));
6913
+ }
6914
+
6849
6915
TEST(APFloatTest, Float8E4M3FNToFloat) {
6850
6916
APFloat PosZero = APFloat::getZero(APFloat::Float8E4M3FN());
6851
6917
APFloat PosZeroToFloat(PosZero.convertToFloat());
0 commit comments