xref: /llvm-project/libc/test/src/math/FModTest.h (revision 1d87465a0a95cee9accc5dce7abdabbbc3f3c122)
1b8e8012aSKirill Okhotnikov //===-- Utility class to test fmod special numbers ------------------------===//
2b8e8012aSKirill Okhotnikov //
3b8e8012aSKirill Okhotnikov // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4b8e8012aSKirill Okhotnikov // See https://llvm.org/LICENSE.txt for license information.
5b8e8012aSKirill Okhotnikov // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6b8e8012aSKirill Okhotnikov //
7b8e8012aSKirill Okhotnikov //===----------------------------------------------------------------------===//
8b8e8012aSKirill Okhotnikov 
9b8e8012aSKirill Okhotnikov #ifndef LLVM_LIBC_TEST_SRC_MATH_FMODTEST_H
10b8e8012aSKirill Okhotnikov #define LLVM_LIBC_TEST_SRC_MATH_FMODTEST_H
11b8e8012aSKirill Okhotnikov 
12b8e8012aSKirill Okhotnikov #include "src/__support/FPUtil/BasicOperations.h"
13b8e8012aSKirill Okhotnikov #include "src/__support/FPUtil/NearestIntegerOperations.h"
14837dab96SRoland McGrath #include "test/UnitTest/FEnvSafeTest.h"
15af1315c2SSiva Chandra Reddy #include "test/UnitTest/FPMatcher.h"
16af1315c2SSiva Chandra Reddy #include "test/UnitTest/Test.h"
17b8e8012aSKirill Okhotnikov 
185748ad84Slntue #include "hdr/math_macros.h"
19b8e8012aSKirill Okhotnikov 
20b8e8012aSKirill Okhotnikov #define TEST_SPECIAL(x, y, expected, dom_err, expected_exception)              \
21*1d87465aSBenjamin Kramer   LIBC_NAMESPACE::fputil::clear_except(FE_ALL_EXCEPT);                         \
22b8e8012aSKirill Okhotnikov   EXPECT_FP_EQ(expected, f(x, y));                                             \
23b8e8012aSKirill Okhotnikov   EXPECT_MATH_ERRNO((dom_err) ? EDOM : 0);                                     \
24*1d87465aSBenjamin Kramer   EXPECT_FP_EXCEPTION(expected_exception)
25b8e8012aSKirill Okhotnikov 
26b8e8012aSKirill Okhotnikov #define TEST_REGULAR(x, y, expected) TEST_SPECIAL(x, y, expected, false, 0)
27b8e8012aSKirill Okhotnikov 
28837dab96SRoland McGrath template <typename T>
29837dab96SRoland McGrath class FmodTest : public LIBC_NAMESPACE::testing::FEnvSafeTest {
30b8e8012aSKirill Okhotnikov 
31b8e8012aSKirill Okhotnikov   DECLARE_SPECIAL_CONSTANTS(T)
32b8e8012aSKirill Okhotnikov 
33b8e8012aSKirill Okhotnikov public:
34b8e8012aSKirill Okhotnikov   typedef T (*FModFunc)(T, T);
35b8e8012aSKirill Okhotnikov 
testSpecialNumbers(FModFunc f)36b8e8012aSKirill Okhotnikov   void testSpecialNumbers(FModFunc f) {
37b8e8012aSKirill Okhotnikov     // fmod (+0, y) == +0 for y != 0.
38b8e8012aSKirill Okhotnikov     TEST_SPECIAL(0.0, 3.0, 0.0, false, 0);
39d2361b20Slntue     TEST_SPECIAL(0.0, min_denormal, 0.0, false, 0);
40d2361b20Slntue     TEST_SPECIAL(0.0, -min_denormal, 0.0, false, 0);
41d2361b20Slntue     TEST_SPECIAL(0.0, min_normal, 0.0, false, 0);
42d2361b20Slntue     TEST_SPECIAL(0.0, -min_normal, 0.0, false, 0);
43d2361b20Slntue     TEST_SPECIAL(0.0, max_normal, 0.0, false, 0);
44d2361b20Slntue     TEST_SPECIAL(0.0, -max_normal, 0.0, false, 0);
45b8e8012aSKirill Okhotnikov 
46b8e8012aSKirill Okhotnikov     // fmod (-0, y) == -0 for y != 0.
47b8e8012aSKirill Okhotnikov     TEST_SPECIAL(neg_zero, 3.0, neg_zero, false, 0);
48d2361b20Slntue     TEST_SPECIAL(neg_zero, min_denormal, neg_zero, false, 0);
49d2361b20Slntue     TEST_SPECIAL(neg_zero, -min_denormal, neg_zero, false, 0);
50d2361b20Slntue     TEST_SPECIAL(neg_zero, min_normal, neg_zero, false, 0);
51d2361b20Slntue     TEST_SPECIAL(neg_zero, -min_normal, neg_zero, false, 0);
52d2361b20Slntue     TEST_SPECIAL(neg_zero, max_normal, neg_zero, false, 0);
53d2361b20Slntue     TEST_SPECIAL(neg_zero, -max_normal, neg_zero, false, 0);
54b8e8012aSKirill Okhotnikov 
55d2361b20Slntue     // fmod (+inf, y) == aNaN plus invalid exception.
56d2361b20Slntue     TEST_SPECIAL(inf, 3.0, aNaN, true, FE_INVALID);
57d2361b20Slntue     TEST_SPECIAL(inf, -1.1L, aNaN, true, FE_INVALID);
58d2361b20Slntue     TEST_SPECIAL(inf, 0.0, aNaN, true, FE_INVALID);
59d2361b20Slntue     TEST_SPECIAL(inf, neg_zero, aNaN, true, FE_INVALID);
60d2361b20Slntue     TEST_SPECIAL(inf, min_denormal, aNaN, true, FE_INVALID);
61d2361b20Slntue     TEST_SPECIAL(inf, min_normal, aNaN, true, FE_INVALID);
62d2361b20Slntue     TEST_SPECIAL(inf, max_normal, aNaN, true, FE_INVALID);
63d2361b20Slntue     TEST_SPECIAL(inf, inf, aNaN, true, FE_INVALID);
64d2361b20Slntue     TEST_SPECIAL(inf, neg_inf, aNaN, true, FE_INVALID);
65b8e8012aSKirill Okhotnikov 
66d2361b20Slntue     // fmod (-inf, y) == aNaN plus invalid exception.
67d2361b20Slntue     TEST_SPECIAL(neg_inf, 3.0, aNaN, true, FE_INVALID);
68d2361b20Slntue     TEST_SPECIAL(neg_inf, -1.1L, aNaN, true, FE_INVALID);
69d2361b20Slntue     TEST_SPECIAL(neg_inf, 0.0, aNaN, true, FE_INVALID);
70d2361b20Slntue     TEST_SPECIAL(neg_inf, neg_zero, aNaN, true, FE_INVALID);
71d2361b20Slntue     TEST_SPECIAL(neg_inf, min_denormal, aNaN, true, FE_INVALID);
72d2361b20Slntue     TEST_SPECIAL(neg_inf, min_normal, aNaN, true, FE_INVALID);
73d2361b20Slntue     TEST_SPECIAL(neg_inf, max_normal, aNaN, true, FE_INVALID);
74d2361b20Slntue     TEST_SPECIAL(neg_inf, inf, aNaN, true, FE_INVALID);
75d2361b20Slntue     TEST_SPECIAL(neg_inf, neg_inf, aNaN, true, FE_INVALID);
76b8e8012aSKirill Okhotnikov 
77d2361b20Slntue     // fmod (x, +0) == aNaN plus invalid exception.
78d2361b20Slntue     TEST_SPECIAL(3.0, 0.0, aNaN, true, FE_INVALID);
79d2361b20Slntue     TEST_SPECIAL(-1.1L, 0.0, aNaN, true, FE_INVALID);
80d2361b20Slntue     TEST_SPECIAL(0.0, 0.0, aNaN, true, FE_INVALID);
81d2361b20Slntue     TEST_SPECIAL(neg_zero, 0.0, aNaN, true, FE_INVALID);
82d2361b20Slntue     TEST_SPECIAL(min_denormal, 0.0, aNaN, true, FE_INVALID);
83d2361b20Slntue     TEST_SPECIAL(min_normal, 0.0, aNaN, true, FE_INVALID);
84d2361b20Slntue     TEST_SPECIAL(max_normal, 0.0, aNaN, true, FE_INVALID);
85b8e8012aSKirill Okhotnikov 
86d2361b20Slntue     // fmod (x, -0) == aNaN plus invalid exception.
87d2361b20Slntue     TEST_SPECIAL(3.0, neg_zero, aNaN, true, FE_INVALID);
88d2361b20Slntue     TEST_SPECIAL(-1.1L, neg_zero, aNaN, true, FE_INVALID);
89d2361b20Slntue     TEST_SPECIAL(0.0, neg_zero, aNaN, true, FE_INVALID);
90d2361b20Slntue     TEST_SPECIAL(neg_zero, neg_zero, aNaN, true, FE_INVALID);
91d2361b20Slntue     TEST_SPECIAL(min_denormal, neg_zero, aNaN, true, FE_INVALID);
92d2361b20Slntue     TEST_SPECIAL(min_normal, neg_zero, aNaN, true, FE_INVALID);
93d2361b20Slntue     TEST_SPECIAL(max_normal, neg_zero, aNaN, true, FE_INVALID);
94b8e8012aSKirill Okhotnikov 
95b8e8012aSKirill Okhotnikov     // fmod (x, +inf) == x for x not infinite.
96b8e8012aSKirill Okhotnikov     TEST_SPECIAL(0.0, inf, 0.0, false, 0);
97b8e8012aSKirill Okhotnikov     TEST_SPECIAL(neg_zero, inf, neg_zero, false, 0);
98d2361b20Slntue     TEST_SPECIAL(min_denormal, inf, min_denormal, false, 0);
99d2361b20Slntue     TEST_SPECIAL(min_normal, inf, min_normal, false, 0);
100d2361b20Slntue     TEST_SPECIAL(max_normal, inf, max_normal, false, 0);
101b8e8012aSKirill Okhotnikov     TEST_SPECIAL(3.0, inf, 3.0, false, 0);
102b8e8012aSKirill Okhotnikov     // fmod (x, -inf) == x for x not infinite.
103b8e8012aSKirill Okhotnikov     TEST_SPECIAL(0.0, neg_inf, 0.0, false, 0);
104b8e8012aSKirill Okhotnikov     TEST_SPECIAL(neg_zero, neg_inf, neg_zero, false, 0);
105d2361b20Slntue     TEST_SPECIAL(min_denormal, neg_inf, min_denormal, false, 0);
106d2361b20Slntue     TEST_SPECIAL(min_normal, neg_inf, min_normal, false, 0);
107d2361b20Slntue     TEST_SPECIAL(max_normal, neg_inf, max_normal, false, 0);
108b8e8012aSKirill Okhotnikov     TEST_SPECIAL(3.0, neg_inf, 3.0, false, 0);
109b8e8012aSKirill Okhotnikov 
110d2361b20Slntue     TEST_SPECIAL(0.0, aNaN, aNaN, false, 0);
111d2361b20Slntue     TEST_SPECIAL(0.0, -aNaN, aNaN, false, 0);
112d2361b20Slntue     TEST_SPECIAL(neg_zero, aNaN, aNaN, false, 0);
113d2361b20Slntue     TEST_SPECIAL(neg_zero, -aNaN, aNaN, false, 0);
114d2361b20Slntue     TEST_SPECIAL(1.0, aNaN, aNaN, false, 0);
115d2361b20Slntue     TEST_SPECIAL(1.0, -aNaN, aNaN, false, 0);
116d2361b20Slntue     TEST_SPECIAL(inf, aNaN, aNaN, false, 0);
117d2361b20Slntue     TEST_SPECIAL(inf, -aNaN, aNaN, false, 0);
118d2361b20Slntue     TEST_SPECIAL(neg_inf, aNaN, aNaN, false, 0);
119d2361b20Slntue     TEST_SPECIAL(neg_inf, -aNaN, aNaN, false, 0);
120d2361b20Slntue     TEST_SPECIAL(0.0, sNaN, aNaN, false, FE_INVALID);
121d2361b20Slntue     TEST_SPECIAL(0.0, -sNaN, aNaN, false, FE_INVALID);
122d2361b20Slntue     TEST_SPECIAL(neg_zero, sNaN, aNaN, false, FE_INVALID);
123d2361b20Slntue     TEST_SPECIAL(neg_zero, -sNaN, aNaN, false, FE_INVALID);
124d2361b20Slntue     TEST_SPECIAL(1.0, sNaN, aNaN, false, FE_INVALID);
125d2361b20Slntue     TEST_SPECIAL(1.0, -sNaN, aNaN, false, FE_INVALID);
126d2361b20Slntue     TEST_SPECIAL(inf, sNaN, aNaN, false, FE_INVALID);
127d2361b20Slntue     TEST_SPECIAL(inf, -sNaN, aNaN, false, FE_INVALID);
128d2361b20Slntue     TEST_SPECIAL(neg_inf, sNaN, aNaN, false, FE_INVALID);
129d2361b20Slntue     TEST_SPECIAL(neg_inf, -sNaN, aNaN, false, FE_INVALID);
130d2361b20Slntue     TEST_SPECIAL(aNaN, 0.0, aNaN, false, 0);
131d2361b20Slntue     TEST_SPECIAL(-aNaN, 0.0, aNaN, false, 0);
132d2361b20Slntue     TEST_SPECIAL(aNaN, neg_zero, aNaN, false, 0);
133d2361b20Slntue     TEST_SPECIAL(-aNaN, neg_zero, aNaN, false, 0);
134d2361b20Slntue     TEST_SPECIAL(aNaN, 1.0, aNaN, false, 0);
135d2361b20Slntue     TEST_SPECIAL(-aNaN, 1.0, aNaN, false, 0);
136d2361b20Slntue     TEST_SPECIAL(aNaN, inf, aNaN, false, 0);
137d2361b20Slntue     TEST_SPECIAL(-aNaN, inf, aNaN, false, 0);
138d2361b20Slntue     TEST_SPECIAL(aNaN, neg_inf, aNaN, false, 0);
139d2361b20Slntue     TEST_SPECIAL(-aNaN, neg_inf, aNaN, false, 0);
140d2361b20Slntue     TEST_SPECIAL(sNaN, 0.0, aNaN, false, FE_INVALID);
141d2361b20Slntue     TEST_SPECIAL(-sNaN, 0.0, aNaN, false, FE_INVALID);
142d2361b20Slntue     TEST_SPECIAL(sNaN, neg_zero, aNaN, false, FE_INVALID);
143d2361b20Slntue     TEST_SPECIAL(-sNaN, neg_zero, aNaN, false, FE_INVALID);
144d2361b20Slntue     TEST_SPECIAL(sNaN, 1.0, aNaN, false, FE_INVALID);
145d2361b20Slntue     TEST_SPECIAL(-sNaN, 1.0, aNaN, false, FE_INVALID);
146d2361b20Slntue     TEST_SPECIAL(sNaN, inf, aNaN, false, FE_INVALID);
147d2361b20Slntue     TEST_SPECIAL(-sNaN, inf, aNaN, false, FE_INVALID);
148d2361b20Slntue     TEST_SPECIAL(sNaN, neg_inf, aNaN, false, FE_INVALID);
149d2361b20Slntue     TEST_SPECIAL(-sNaN, neg_inf, aNaN, false, FE_INVALID);
150d2361b20Slntue     TEST_SPECIAL(aNaN, aNaN, aNaN, false, 0);
151d2361b20Slntue     TEST_SPECIAL(aNaN, -aNaN, aNaN, false, 0);
152d2361b20Slntue     TEST_SPECIAL(-aNaN, aNaN, aNaN, false, 0);
153d2361b20Slntue     TEST_SPECIAL(-aNaN, -aNaN, aNaN, false, 0);
154d2361b20Slntue     TEST_SPECIAL(aNaN, sNaN, aNaN, false, FE_INVALID);
155d2361b20Slntue     TEST_SPECIAL(aNaN, -sNaN, aNaN, false, FE_INVALID);
156d2361b20Slntue     TEST_SPECIAL(-aNaN, sNaN, aNaN, false, FE_INVALID);
157d2361b20Slntue     TEST_SPECIAL(-aNaN, -sNaN, aNaN, false, FE_INVALID);
158d2361b20Slntue     TEST_SPECIAL(sNaN, aNaN, aNaN, false, FE_INVALID);
159d2361b20Slntue     TEST_SPECIAL(sNaN, -aNaN, aNaN, false, FE_INVALID);
160d2361b20Slntue     TEST_SPECIAL(-sNaN, aNaN, aNaN, false, FE_INVALID);
161d2361b20Slntue     TEST_SPECIAL(-sNaN, -aNaN, aNaN, false, FE_INVALID);
162d2361b20Slntue     TEST_SPECIAL(sNaN, sNaN, aNaN, false, FE_INVALID);
163d2361b20Slntue     TEST_SPECIAL(sNaN, -sNaN, aNaN, false, FE_INVALID);
164d2361b20Slntue     TEST_SPECIAL(-sNaN, sNaN, aNaN, false, FE_INVALID);
165d2361b20Slntue     TEST_SPECIAL(-sNaN, -sNaN, aNaN, false, FE_INVALID);
166b8e8012aSKirill Okhotnikov 
167b8e8012aSKirill Okhotnikov     TEST_SPECIAL(6.5, 2.25L, 2.0L, false, 0);
168b8e8012aSKirill Okhotnikov     TEST_SPECIAL(-6.5, 2.25L, -2.0L, false, 0);
169b8e8012aSKirill Okhotnikov     TEST_SPECIAL(6.5, -2.25L, 2.0L, false, 0);
170b8e8012aSKirill Okhotnikov     TEST_SPECIAL(-6.5, -2.25L, -2.0L, false, 0);
171b8e8012aSKirill Okhotnikov 
172d2361b20Slntue     TEST_SPECIAL(max_normal, max_normal, 0.0, false, 0);
173d2361b20Slntue     TEST_SPECIAL(max_normal, -max_normal, 0.0, false, 0);
174d2361b20Slntue     TEST_SPECIAL(max_normal, min_normal, 0.0, false, 0);
175d2361b20Slntue     TEST_SPECIAL(max_normal, -min_normal, 0.0, false, 0);
176d2361b20Slntue     TEST_SPECIAL(max_normal, min_denormal, 0.0, false, 0);
177d2361b20Slntue     TEST_SPECIAL(max_normal, -min_denormal, 0.0, false, 0);
178d2361b20Slntue     TEST_SPECIAL(-max_normal, max_normal, neg_zero, false, 0);
179d2361b20Slntue     TEST_SPECIAL(-max_normal, -max_normal, neg_zero, false, 0);
180d2361b20Slntue     TEST_SPECIAL(-max_normal, min_normal, neg_zero, false, 0);
181d2361b20Slntue     TEST_SPECIAL(-max_normal, -min_normal, neg_zero, false, 0);
182d2361b20Slntue     TEST_SPECIAL(-max_normal, min_denormal, neg_zero, false, 0);
183d2361b20Slntue     TEST_SPECIAL(-max_normal, -min_denormal, neg_zero, false, 0);
184b8e8012aSKirill Okhotnikov 
185d2361b20Slntue     TEST_SPECIAL(min_normal, max_normal, min_normal, false, 0);
186d2361b20Slntue     TEST_SPECIAL(min_normal, -max_normal, min_normal, false, 0);
187d2361b20Slntue     TEST_SPECIAL(min_normal, min_normal, 0.0, false, 0);
188d2361b20Slntue     TEST_SPECIAL(min_normal, -min_normal, 0.0, false, 0);
189d2361b20Slntue     TEST_SPECIAL(min_normal, min_denormal, 0.0, false, 0);
190d2361b20Slntue     TEST_SPECIAL(min_normal, -min_denormal, 0.0, false, 0);
191d2361b20Slntue     TEST_SPECIAL(-min_normal, max_normal, -min_normal, false, 0);
192d2361b20Slntue     TEST_SPECIAL(-min_normal, -max_normal, -min_normal, false, 0);
193d2361b20Slntue     TEST_SPECIAL(-min_normal, min_normal, neg_zero, false, 0);
194d2361b20Slntue     TEST_SPECIAL(-min_normal, -min_normal, neg_zero, false, 0);
195d2361b20Slntue     TEST_SPECIAL(-min_normal, min_denormal, neg_zero, false, 0);
196d2361b20Slntue     TEST_SPECIAL(-min_normal, -min_denormal, neg_zero, false, 0);
197b8e8012aSKirill Okhotnikov 
198d2361b20Slntue     TEST_SPECIAL(min_denormal, max_normal, min_denormal, false, 0);
199d2361b20Slntue     TEST_SPECIAL(min_denormal, -max_normal, min_denormal, false, 0);
200d2361b20Slntue     TEST_SPECIAL(min_denormal, min_normal, min_denormal, false, 0);
201d2361b20Slntue     TEST_SPECIAL(min_denormal, -min_normal, min_denormal, false, 0);
202d2361b20Slntue     TEST_SPECIAL(min_denormal, min_denormal, 0.0, false, 0);
203d2361b20Slntue     TEST_SPECIAL(min_denormal, -min_denormal, 0.0, false, 0);
204d2361b20Slntue     TEST_SPECIAL(-min_denormal, max_normal, -min_denormal, false, 0);
205d2361b20Slntue     TEST_SPECIAL(-min_denormal, -max_normal, -min_denormal, false, 0);
206d2361b20Slntue     TEST_SPECIAL(-min_denormal, min_normal, -min_denormal, false, 0);
207d2361b20Slntue     TEST_SPECIAL(-min_denormal, -min_normal, -min_denormal, false, 0);
208d2361b20Slntue     TEST_SPECIAL(-min_denormal, min_denormal, neg_zero, false, 0);
209d2361b20Slntue     TEST_SPECIAL(-min_denormal, -min_denormal, neg_zero, false, 0);
210b8e8012aSKirill Okhotnikov   }
211b8e8012aSKirill Okhotnikov 
testRegularExtreme(FModFunc f)212b8e8012aSKirill Okhotnikov   void testRegularExtreme(FModFunc f) {
213b8e8012aSKirill Okhotnikov 
214b8e8012aSKirill Okhotnikov     TEST_REGULAR(0x1p127L, 0x3p-149L, 0x1p-149L);
215b8e8012aSKirill Okhotnikov     TEST_REGULAR(0x1p127L, -0x3p-149L, 0x1p-149L);
216b8e8012aSKirill Okhotnikov     TEST_REGULAR(0x1p127L, 0x3p-148L, 0x1p-147L);
217b8e8012aSKirill Okhotnikov     TEST_REGULAR(0x1p127L, -0x3p-148L, 0x1p-147L);
218b8e8012aSKirill Okhotnikov     TEST_REGULAR(0x1p127L, 0x3p-126L, 0x1p-125L);
219b8e8012aSKirill Okhotnikov     TEST_REGULAR(0x1p127L, -0x3p-126L, 0x1p-125L);
220b8e8012aSKirill Okhotnikov     TEST_REGULAR(-0x1p127L, 0x3p-149L, -0x1p-149L);
221b8e8012aSKirill Okhotnikov     TEST_REGULAR(-0x1p127L, -0x3p-149L, -0x1p-149L);
222b8e8012aSKirill Okhotnikov     TEST_REGULAR(-0x1p127L, 0x3p-148L, -0x1p-147L);
223b8e8012aSKirill Okhotnikov     TEST_REGULAR(-0x1p127L, -0x3p-148L, -0x1p-147L);
224b8e8012aSKirill Okhotnikov     TEST_REGULAR(-0x1p127L, 0x3p-126L, -0x1p-125L);
225b8e8012aSKirill Okhotnikov     TEST_REGULAR(-0x1p127L, -0x3p-126L, -0x1p-125L);
226b8e8012aSKirill Okhotnikov 
227b8e8012aSKirill Okhotnikov     if constexpr (sizeof(T) >= sizeof(double)) {
228b8e8012aSKirill Okhotnikov       TEST_REGULAR(0x1p1023L, 0x3p-1074L, 0x1p-1073L);
229b8e8012aSKirill Okhotnikov       TEST_REGULAR(0x1p1023L, -0x3p-1074L, 0x1p-1073L);
230b8e8012aSKirill Okhotnikov       TEST_REGULAR(0x1p1023L, 0x3p-1073L, 0x1p-1073L);
231b8e8012aSKirill Okhotnikov       TEST_REGULAR(0x1p1023L, -0x3p-1073L, 0x1p-1073L);
232b8e8012aSKirill Okhotnikov       TEST_REGULAR(0x1p1023L, 0x3p-1022L, 0x1p-1021L);
233b8e8012aSKirill Okhotnikov       TEST_REGULAR(0x1p1023L, -0x3p-1022L, 0x1p-1021L);
234b8e8012aSKirill Okhotnikov       TEST_REGULAR(-0x1p1023L, 0x3p-1074L, -0x1p-1073L);
235b8e8012aSKirill Okhotnikov       TEST_REGULAR(-0x1p1023L, -0x3p-1074L, -0x1p-1073L);
236b8e8012aSKirill Okhotnikov       TEST_REGULAR(-0x1p1023L, 0x3p-1073L, -0x1p-1073L);
237b8e8012aSKirill Okhotnikov       TEST_REGULAR(-0x1p1023L, -0x3p-1073L, -0x1p-1073L);
238b8e8012aSKirill Okhotnikov       TEST_REGULAR(-0x1p1023L, 0x3p-1022L, -0x1p-1021L);
239b8e8012aSKirill Okhotnikov       TEST_REGULAR(-0x1p1023L, -0x3p-1022L, -0x1p-1021L);
240b8e8012aSKirill Okhotnikov     }
241b8e8012aSKirill Okhotnikov   }
242b8e8012aSKirill Okhotnikov };
243b8e8012aSKirill Okhotnikov 
244b8e8012aSKirill Okhotnikov #define LIST_FMOD_TESTS(T, func)                                               \
245b8e8012aSKirill Okhotnikov   using LlvmLibcFmodTest = FmodTest<T>;                                        \
246b8e8012aSKirill Okhotnikov   TEST_F(LlvmLibcFmodTest, SpecialNumbers) { testSpecialNumbers(&func); }      \
247b8e8012aSKirill Okhotnikov   TEST_F(LlvmLibcFmodTest, RegularExtreme) { testRegularExtreme(&func); }
248b8e8012aSKirill Okhotnikov 
249b8e8012aSKirill Okhotnikov #endif // LLVM_LIBC_TEST_SRC_MATH_FMODTEST_H
250