Skip to content

Commit 0e2a7d9

Browse files
committed
fix: FE_INEXACT exception
Signed-off-by: Krishna Pandey <[email protected]>
1 parent d451393 commit 0e2a7d9

File tree

1 file changed

+34
-25
lines changed

1 file changed

+34
-25
lines changed

libc/test/src/math/smoke/FModTest.h

Lines changed: 34 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,22 @@ class FmodTest : public LIBC_NAMESPACE::testing::FEnvSafeTest {
3131

3232
DECLARE_SPECIAL_CONSTANTS(T)
3333

34+
static constexpr T one = T(1.0);
35+
static constexpr T two = T(2.0);
36+
static constexpr T neg_two = T(-2.0);
37+
static constexpr T three = T(3.0);
38+
static constexpr T neg_one_point_one = T(-1.1);
39+
static constexpr T six_halves = T(6.5);
40+
static constexpr T neg_six_halves = T(-6.5);
41+
static constexpr T two_quaters = T(2.25);
42+
static constexpr T neg_two_quaters = T(-2.25);
43+
3444
public:
3545
typedef T (*FModFunc)(T, T);
3646

3747
void testSpecialNumbers(FModFunc f) {
3848
// fmod (+0, y) == +0 for y != 0.
39-
// FIXME: raises FE_INEXACT for bfloat16
40-
// TEST_SPECIAL(zero, T(3.0), zero, false, 0);
49+
TEST_SPECIAL(zero, three, zero, false, 0);
4150
TEST_SPECIAL(zero, min_denormal, zero, false, 0);
4251
TEST_SPECIAL(zero, -min_denormal, zero, false, 0);
4352
TEST_SPECIAL(zero, min_normal, zero, false, 0);
@@ -46,7 +55,7 @@ class FmodTest : public LIBC_NAMESPACE::testing::FEnvSafeTest {
4655
TEST_SPECIAL(zero, -max_normal, zero, false, 0);
4756

4857
// fmod (-0, y) == -0 for y != 0.
49-
// TEST_SPECIAL(neg_zero, T(3.0), neg_zero, false, 0);
58+
TEST_SPECIAL(neg_zero, three, neg_zero, false, 0);
5059
TEST_SPECIAL(neg_zero, min_denormal, neg_zero, false, 0);
5160
TEST_SPECIAL(neg_zero, -min_denormal, neg_zero, false, 0);
5261
TEST_SPECIAL(neg_zero, min_normal, neg_zero, false, 0);
@@ -55,8 +64,8 @@ class FmodTest : public LIBC_NAMESPACE::testing::FEnvSafeTest {
5564
TEST_SPECIAL(neg_zero, -max_normal, neg_zero, false, 0);
5665

5766
// fmod (+inf, y) == aNaN plus invalid exception.
58-
TEST_SPECIAL(inf, T(3.0), aNaN, true, FE_INVALID);
59-
TEST_SPECIAL(inf, T(-1.1), aNaN, true, FE_INVALID);
67+
TEST_SPECIAL(inf, three, aNaN, true, FE_INVALID);
68+
TEST_SPECIAL(inf, neg_one_point_one, aNaN, true, FE_INVALID);
6069
TEST_SPECIAL(inf, zero, aNaN, true, FE_INVALID);
6170
TEST_SPECIAL(inf, neg_zero, aNaN, true, FE_INVALID);
6271
TEST_SPECIAL(inf, min_denormal, aNaN, true, FE_INVALID);
@@ -66,8 +75,8 @@ class FmodTest : public LIBC_NAMESPACE::testing::FEnvSafeTest {
6675
TEST_SPECIAL(inf, neg_inf, aNaN, true, FE_INVALID);
6776

6877
// fmod (-inf, y) == aNaN plus invalid exception.
69-
TEST_SPECIAL(neg_inf, T(3.0), aNaN, true, FE_INVALID);
70-
TEST_SPECIAL(neg_inf, T(-1.1), aNaN, true, FE_INVALID);
78+
TEST_SPECIAL(neg_inf, three, aNaN, true, FE_INVALID);
79+
TEST_SPECIAL(neg_inf, neg_one_point_one, aNaN, true, FE_INVALID);
7180
TEST_SPECIAL(neg_inf, zero, aNaN, true, FE_INVALID);
7281
TEST_SPECIAL(neg_inf, neg_zero, aNaN, true, FE_INVALID);
7382
TEST_SPECIAL(neg_inf, min_denormal, aNaN, true, FE_INVALID);
@@ -77,17 +86,17 @@ class FmodTest : public LIBC_NAMESPACE::testing::FEnvSafeTest {
7786
TEST_SPECIAL(neg_inf, neg_inf, aNaN, true, FE_INVALID);
7887

7988
// fmod (x, +0) == aNaN plus invalid exception.
80-
TEST_SPECIAL(T(3.0), zero, aNaN, true, FE_INVALID);
81-
TEST_SPECIAL(T(-1.1), zero, aNaN, true, FE_INVALID);
89+
TEST_SPECIAL(three, zero, aNaN, true, FE_INVALID);
90+
TEST_SPECIAL(neg_one_point_one, zero, aNaN, true, FE_INVALID);
8291
TEST_SPECIAL(zero, zero, aNaN, true, FE_INVALID);
8392
TEST_SPECIAL(neg_zero, zero, aNaN, true, FE_INVALID);
8493
TEST_SPECIAL(min_denormal, zero, aNaN, true, FE_INVALID);
8594
TEST_SPECIAL(min_normal, zero, aNaN, true, FE_INVALID);
8695
TEST_SPECIAL(max_normal, zero, aNaN, true, FE_INVALID);
8796

8897
// fmod (x, -0) == aNaN plus invalid exception.
89-
TEST_SPECIAL(T(3.0), neg_zero, aNaN, true, FE_INVALID);
90-
TEST_SPECIAL(T(-1.1), neg_zero, aNaN, true, FE_INVALID);
98+
TEST_SPECIAL(three, neg_zero, aNaN, true, FE_INVALID);
99+
TEST_SPECIAL(neg_one_point_one, neg_zero, aNaN, true, FE_INVALID);
91100
TEST_SPECIAL(zero, neg_zero, aNaN, true, FE_INVALID);
92101
TEST_SPECIAL(neg_zero, neg_zero, aNaN, true, FE_INVALID);
93102
TEST_SPECIAL(min_denormal, neg_zero, aNaN, true, FE_INVALID);
@@ -100,21 +109,21 @@ class FmodTest : public LIBC_NAMESPACE::testing::FEnvSafeTest {
100109
TEST_SPECIAL(min_denormal, inf, min_denormal, false, 0);
101110
TEST_SPECIAL(min_normal, inf, min_normal, false, 0);
102111
TEST_SPECIAL(max_normal, inf, max_normal, false, 0);
103-
// TEST_SPECIAL(T(3.0), inf, T(3.0), false, 0);
112+
TEST_SPECIAL(three, inf, three, false, 0);
104113
// fmod (x, -inf) == x for x not infinite.
105114
TEST_SPECIAL(zero, neg_inf, zero, false, 0);
106115
TEST_SPECIAL(neg_zero, neg_inf, neg_zero, false, 0);
107116
TEST_SPECIAL(min_denormal, neg_inf, min_denormal, false, 0);
108117
TEST_SPECIAL(min_normal, neg_inf, min_normal, false, 0);
109118
TEST_SPECIAL(max_normal, neg_inf, max_normal, false, 0);
110-
// TEST_SPECIAL(T(3.0), neg_inf, T(3.0), false, 0);
119+
TEST_SPECIAL(three, neg_inf, three, false, 0);
111120

112121
TEST_SPECIAL(zero, aNaN, aNaN, false, 0);
113122
TEST_SPECIAL(zero, neg_aNaN, aNaN, false, 0);
114123
TEST_SPECIAL(neg_zero, aNaN, aNaN, false, 0);
115124
TEST_SPECIAL(neg_zero, neg_aNaN, aNaN, false, 0);
116-
// TEST_SPECIAL(T(1.0), aNaN, aNaN, false, 0);
117-
// TEST_SPECIAL(T(1.0), neg_aNaN, aNaN, false, 0);
125+
TEST_SPECIAL(one, aNaN, aNaN, false, 0);
126+
TEST_SPECIAL(one, neg_aNaN, aNaN, false, 0);
118127
TEST_SPECIAL(inf, aNaN, aNaN, false, 0);
119128
TEST_SPECIAL(inf, neg_aNaN, aNaN, false, 0);
120129
TEST_SPECIAL(neg_inf, aNaN, aNaN, false, 0);
@@ -123,8 +132,8 @@ class FmodTest : public LIBC_NAMESPACE::testing::FEnvSafeTest {
123132
TEST_SPECIAL(zero, neg_sNaN, aNaN, false, FE_INVALID);
124133
TEST_SPECIAL(neg_zero, sNaN, aNaN, false, FE_INVALID);
125134
TEST_SPECIAL(neg_zero, neg_sNaN, aNaN, false, FE_INVALID);
126-
TEST_SPECIAL(T(1.0), sNaN, aNaN, false, FE_INVALID);
127-
TEST_SPECIAL(T(1.0), neg_sNaN, aNaN, false, FE_INVALID);
135+
TEST_SPECIAL(one, sNaN, aNaN, false, FE_INVALID);
136+
TEST_SPECIAL(one, neg_sNaN, aNaN, false, FE_INVALID);
128137
TEST_SPECIAL(inf, sNaN, aNaN, false, FE_INVALID);
129138
TEST_SPECIAL(inf, neg_sNaN, aNaN, false, FE_INVALID);
130139
TEST_SPECIAL(neg_inf, sNaN, aNaN, false, FE_INVALID);
@@ -133,8 +142,8 @@ class FmodTest : public LIBC_NAMESPACE::testing::FEnvSafeTest {
133142
TEST_SPECIAL(neg_aNaN, zero, aNaN, false, 0);
134143
TEST_SPECIAL(aNaN, neg_zero, aNaN, false, 0);
135144
TEST_SPECIAL(neg_aNaN, neg_zero, aNaN, false, 0);
136-
// TEST_SPECIAL(aNaN, T(1.0), aNaN, false, 0);
137-
// TEST_SPECIAL(neg_aNaN, T(1.0), aNaN, false, 0);
145+
TEST_SPECIAL(aNaN, one, aNaN, false, 0);
146+
TEST_SPECIAL(neg_aNaN, one, aNaN, false, 0);
138147
TEST_SPECIAL(aNaN, inf, aNaN, false, 0);
139148
TEST_SPECIAL(neg_aNaN, inf, aNaN, false, 0);
140149
TEST_SPECIAL(aNaN, neg_inf, aNaN, false, 0);
@@ -143,8 +152,8 @@ class FmodTest : public LIBC_NAMESPACE::testing::FEnvSafeTest {
143152
TEST_SPECIAL(neg_sNaN, zero, aNaN, false, FE_INVALID);
144153
TEST_SPECIAL(sNaN, neg_zero, aNaN, false, FE_INVALID);
145154
TEST_SPECIAL(neg_sNaN, neg_zero, aNaN, false, FE_INVALID);
146-
TEST_SPECIAL(sNaN, T(1.0), aNaN, false, FE_INVALID);
147-
TEST_SPECIAL(neg_sNaN, T(1.0), aNaN, false, FE_INVALID);
155+
TEST_SPECIAL(sNaN, one, aNaN, false, FE_INVALID);
156+
TEST_SPECIAL(neg_sNaN, one, aNaN, false, FE_INVALID);
148157
TEST_SPECIAL(sNaN, inf, aNaN, false, FE_INVALID);
149158
TEST_SPECIAL(neg_sNaN, inf, aNaN, false, FE_INVALID);
150159
TEST_SPECIAL(sNaN, neg_inf, aNaN, false, FE_INVALID);
@@ -166,10 +175,10 @@ class FmodTest : public LIBC_NAMESPACE::testing::FEnvSafeTest {
166175
TEST_SPECIAL(neg_sNaN, sNaN, aNaN, false, FE_INVALID);
167176
TEST_SPECIAL(neg_sNaN, neg_sNaN, aNaN, false, FE_INVALID);
168177

169-
// TEST_SPECIAL(T(6.5), T(2.25), T(2.0), false, 0);
170-
// TEST_SPECIAL(T(-6.5), T(2.25), T(-2.0), false, 0);
171-
// TEST_SPECIAL(T(6.5), T(-2.25), T(2.0), false, 0);
172-
// TEST_SPECIAL(T(-6.5), T(-2.25), T(-2.0), false, 0);
178+
TEST_SPECIAL(six_halves, two_quaters, two, false, 0);
179+
TEST_SPECIAL(neg_six_halves, two_quaters, neg_two, false, 0);
180+
TEST_SPECIAL(six_halves, neg_two_quaters, two, false, 0);
181+
TEST_SPECIAL(neg_six_halves, neg_two_quaters, neg_two, false, 0);
173182

174183
TEST_SPECIAL(max_normal, max_normal, zero, false, 0);
175184
TEST_SPECIAL(max_normal, -max_normal, zero, false, 0);

0 commit comments

Comments
 (0)