@@ -1070,33 +1070,49 @@ TEST(APFloatTest, toInteger) {
1070
1070
EXPECT_EQ (APSInt::getMaxValue (5 , false ), result);
1071
1071
}
1072
1072
1073
- static APInt nanbits (const fltSemantics &Sem,
1074
- bool SNaN, bool Negative, uint64_t fill ) {
1075
- APInt apfill (64 , fill );
1073
+ static APInt nanbitsFromAPInt (const fltSemantics &Sem, bool SNaN, bool Negative ,
1074
+ uint64_t payload ) {
1075
+ APInt appayload (64 , payload );
1076
1076
if (SNaN)
1077
- return APFloat::getSNaN (Sem, Negative, &apfill ).bitcastToAPInt ();
1077
+ return APFloat::getSNaN (Sem, Negative, &appayload ).bitcastToAPInt ();
1078
1078
else
1079
- return APFloat::getQNaN (Sem, Negative, &apfill ).bitcastToAPInt ();
1079
+ return APFloat::getQNaN (Sem, Negative, &appayload ).bitcastToAPInt ();
1080
1080
}
1081
1081
1082
1082
TEST (APFloatTest, makeNaN) {
1083
- ASSERT_EQ (0x7fc00000 , nanbits (APFloat::IEEEsingle (), false , false , 0 ));
1084
- ASSERT_EQ (0xffc00000 , nanbits (APFloat::IEEEsingle (), false , true , 0 ));
1085
- ASSERT_EQ (0x7fc0ae72 , nanbits (APFloat::IEEEsingle (), false , false , 0xae72 ));
1086
- ASSERT_EQ (0x7fffae72 , nanbits (APFloat::IEEEsingle (), false , false , 0xffffae72 ));
1087
- ASSERT_EQ (0x7fa00000 , nanbits (APFloat::IEEEsingle (), true , false , 0 ));
1088
- ASSERT_EQ (0xffa00000 , nanbits (APFloat::IEEEsingle (), true , true , 0 ));
1089
- ASSERT_EQ (0x7f80ae72 , nanbits (APFloat::IEEEsingle (), true , false , 0xae72 ));
1090
- ASSERT_EQ (0x7fbfae72 , nanbits (APFloat::IEEEsingle (), true , false , 0xffffae72 ));
1091
-
1092
- ASSERT_EQ (0x7ff8000000000000ULL , nanbits (APFloat::IEEEdouble (), false , false , 0 ));
1093
- ASSERT_EQ (0xfff8000000000000ULL , nanbits (APFloat::IEEEdouble (), false , true , 0 ));
1094
- ASSERT_EQ (0x7ff800000000ae72ULL , nanbits (APFloat::IEEEdouble (), false , false , 0xae72 ));
1095
- ASSERT_EQ (0x7fffffffffffae72ULL , nanbits (APFloat::IEEEdouble (), false , false , 0xffffffffffffae72ULL ));
1096
- ASSERT_EQ (0x7ff4000000000000ULL , nanbits (APFloat::IEEEdouble (), true , false , 0 ));
1097
- ASSERT_EQ (0xfff4000000000000ULL , nanbits (APFloat::IEEEdouble (), true , true , 0 ));
1098
- ASSERT_EQ (0x7ff000000000ae72ULL , nanbits (APFloat::IEEEdouble (), true , false , 0xae72 ));
1099
- ASSERT_EQ (0x7ff7ffffffffae72ULL , nanbits (APFloat::IEEEdouble (), true , false , 0xffffffffffffae72ULL ));
1083
+ const struct {
1084
+ uint64_t expected;
1085
+ const fltSemantics &semantics;
1086
+ bool SNaN;
1087
+ bool Negative;
1088
+ uint64_t payload;
1089
+ } tests[] = {
1090
+ /* expected semantics SNaN Neg payload */
1091
+ { 0x7fc00000ULL , APFloat::IEEEsingle (), false , false , 0x00000000ULL },
1092
+ { 0xffc00000ULL , APFloat::IEEEsingle (), false , true , 0x00000000ULL },
1093
+ { 0x7fc0ae72ULL , APFloat::IEEEsingle (), false , false , 0x0000ae72ULL },
1094
+ { 0x7fffae72ULL , APFloat::IEEEsingle (), false , false , 0xffffae72ULL },
1095
+ { 0x7fdaae72ULL , APFloat::IEEEsingle (), false , false , 0x00daae72ULL },
1096
+ { 0x7fa00000ULL , APFloat::IEEEsingle (), true , false , 0x00000000ULL },
1097
+ { 0xffa00000ULL , APFloat::IEEEsingle (), true , true , 0x00000000ULL },
1098
+ { 0x7f80ae72ULL , APFloat::IEEEsingle (), true , false , 0x0000ae72ULL },
1099
+ { 0x7fbfae72ULL , APFloat::IEEEsingle (), true , false , 0xffffae72ULL },
1100
+ { 0x7f9aae72ULL , APFloat::IEEEsingle (), true , false , 0x001aae72ULL },
1101
+ { 0x7ff8000000000000ULL , APFloat::IEEEdouble (), false , false , 0x0000000000000000ULL },
1102
+ { 0xfff8000000000000ULL , APFloat::IEEEdouble (), false , true , 0x0000000000000000ULL },
1103
+ { 0x7ff800000000ae72ULL , APFloat::IEEEdouble (), false , false , 0x000000000000ae72ULL },
1104
+ { 0x7fffffffffffae72ULL , APFloat::IEEEdouble (), false , false , 0xffffffffffffae72ULL },
1105
+ { 0x7ffdaaaaaaaaae72ULL , APFloat::IEEEdouble (), false , false , 0x000daaaaaaaaae72ULL },
1106
+ { 0x7ff4000000000000ULL , APFloat::IEEEdouble (), true , false , 0x0000000000000000ULL },
1107
+ { 0xfff4000000000000ULL , APFloat::IEEEdouble (), true , true , 0x0000000000000000ULL },
1108
+ { 0x7ff000000000ae72ULL , APFloat::IEEEdouble (), true , false , 0x000000000000ae72ULL },
1109
+ { 0x7ff7ffffffffae72ULL , APFloat::IEEEdouble (), true , false , 0xffffffffffffae72ULL },
1110
+ { 0x7ff1aaaaaaaaae72ULL , APFloat::IEEEdouble (), true , false , 0x0001aaaaaaaaae72ULL },
1111
+ };
1112
+
1113
+ for (const auto &t : tests) {
1114
+ ASSERT_EQ (t.expected , nanbitsFromAPInt (t.semantics , t.SNaN , t.Negative , t.payload ));
1115
+ }
1100
1116
}
1101
1117
1102
1118
#ifdef GTEST_HAS_DEATH_TEST
0 commit comments