@@ -51,23 +51,50 @@ class GetPayloadTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest {
5151 EXPECT_FP_EQ (default_snan_payload, funcWrapper (func, sNaN ));
5252 EXPECT_FP_EQ (default_snan_payload, funcWrapper (func, neg_sNaN));
5353
54- T qnan_42 = FPBits::quiet_nan (Sign::POS, 0x42 ).get_val ();
55- T neg_qnan_42 = FPBits::quiet_nan (Sign::NEG, 0x42 ).get_val ();
56- T snan_42 = FPBits::signaling_nan (Sign::POS, 0x42 ).get_val ();
57- T neg_snan_42 = FPBits::signaling_nan (Sign::NEG, 0x42 ).get_val ();
58- EXPECT_FP_EQ (T (0x42 .0p+0 ), funcWrapper (func, qnan_42));
59- EXPECT_FP_EQ (T (0x42 .0p+0 ), funcWrapper (func, neg_qnan_42));
60- EXPECT_FP_EQ (T (0x42 .0p+0 ), funcWrapper (func, snan_42));
61- EXPECT_FP_EQ (T (0x42 .0p+0 ), funcWrapper (func, neg_snan_42));
62-
63- T qnan_123 = FPBits::quiet_nan (Sign::POS, 0x123 ).get_val ();
64- T neg_qnan_123 = FPBits::quiet_nan (Sign::NEG, 0x123 ).get_val ();
65- T snan_123 = FPBits::signaling_nan (Sign::POS, 0x123 ).get_val ();
66- T neg_snan_123 = FPBits::signaling_nan (Sign::NEG, 0x123 ).get_val ();
67- EXPECT_FP_EQ (T (0x123 .0p+0 ), funcWrapper (func, qnan_123));
68- EXPECT_FP_EQ (T (0x123 .0p+0 ), funcWrapper (func, neg_qnan_123));
69- EXPECT_FP_EQ (T (0x123 .0p+0 ), funcWrapper (func, snan_123));
70- EXPECT_FP_EQ (T (0x123 .0p+0 ), funcWrapper (func, neg_snan_123));
54+ if constexpr (FPBits::FRACTION_LEN - 1 >= 6 ) {
55+ // [S] [E..E] [QM..M] -> number of M bits should be at least 6
56+ // 0x31 = 0b110001 = 6 bits
57+ T qnan_31 = FPBits::quiet_nan (Sign::POS, 0x31 ).get_val ();
58+ T neg_qnan_31 = FPBits::quiet_nan (Sign::NEG, 0x31 ).get_val ();
59+ T snan_31 = FPBits::signaling_nan (Sign::POS, 0x31 ).get_val ();
60+ T neg_snan_31 = FPBits::signaling_nan (Sign::NEG, 0x31 ).get_val ();
61+ EXPECT_FP_EQ (T (0x31 .0p+0 ), funcWrapper (func, qnan_31));
62+ EXPECT_FP_EQ (T (0x31 .0p+0 ), funcWrapper (func, neg_qnan_31));
63+ EXPECT_FP_EQ (T (0x31 .0p+0 ), funcWrapper (func, snan_31));
64+ EXPECT_FP_EQ (T (0x31 .0p+0 ), funcWrapper (func, neg_snan_31));
65+
66+ // 0x15 = 0b10101 = 5 bits
67+ T qnan_15 = FPBits::quiet_nan (Sign::POS, 0x15 ).get_val ();
68+ T neg_qnan_15 = FPBits::quiet_nan (Sign::NEG, 0x15 ).get_val ();
69+ T snan_15 = FPBits::signaling_nan (Sign::POS, 0x15 ).get_val ();
70+ T neg_snan_15 = FPBits::signaling_nan (Sign::NEG, 0x15 ).get_val ();
71+ EXPECT_FP_EQ (T (0x15 .0p+0 ), funcWrapper (func, qnan_15));
72+ EXPECT_FP_EQ (T (0x15 .0p+0 ), funcWrapper (func, neg_qnan_15));
73+ EXPECT_FP_EQ (T (0x15 .0p+0 ), funcWrapper (func, snan_15));
74+ EXPECT_FP_EQ (T (0x15 .0p+0 ), funcWrapper (func, neg_snan_15));
75+ }
76+
77+ if constexpr (FPBits::FRACTION_LEN - 1 >= 7 ) {
78+ T qnan_42 = FPBits::quiet_nan (Sign::POS, 0x42 ).get_val ();
79+ T neg_qnan_42 = FPBits::quiet_nan (Sign::NEG, 0x42 ).get_val ();
80+ T snan_42 = FPBits::signaling_nan (Sign::POS, 0x42 ).get_val ();
81+ T neg_snan_42 = FPBits::signaling_nan (Sign::NEG, 0x42 ).get_val ();
82+ EXPECT_FP_EQ (T (0x42 .0p+0 ), funcWrapper (func, qnan_42));
83+ EXPECT_FP_EQ (T (0x42 .0p+0 ), funcWrapper (func, neg_qnan_42));
84+ EXPECT_FP_EQ (T (0x42 .0p+0 ), funcWrapper (func, snan_42));
85+ EXPECT_FP_EQ (T (0x42 .0p+0 ), funcWrapper (func, neg_snan_42));
86+ }
87+
88+ if constexpr (FPBits::FRACTION_LEN - 1 >= 9 ) {
89+ T qnan_123 = FPBits::quiet_nan (Sign::POS, 0x123 ).get_val ();
90+ T neg_qnan_123 = FPBits::quiet_nan (Sign::NEG, 0x123 ).get_val ();
91+ T snan_123 = FPBits::signaling_nan (Sign::POS, 0x123 ).get_val ();
92+ T neg_snan_123 = FPBits::signaling_nan (Sign::NEG, 0x123 ).get_val ();
93+ EXPECT_FP_EQ (T (0x123 .0p+0 ), funcWrapper (func, qnan_123));
94+ EXPECT_FP_EQ (T (0x123 .0p+0 ), funcWrapper (func, neg_qnan_123));
95+ EXPECT_FP_EQ (T (0x123 .0p+0 ), funcWrapper (func, snan_123));
96+ EXPECT_FP_EQ (T (0x123 .0p+0 ), funcWrapper (func, neg_snan_123));
97+ }
7198 }
7299};
73100
0 commit comments