xref: /aosp_15_r20/external/llvm-libc/test/src/math/smoke/CanonicalizeTest.h (revision 71db0c75aadcf003ffe3238005f61d7618a3fead)
1*71db0c75SAndroid Build Coastguard Worker //===-- Utility class to test canonicalize[f|l] -----------------*- C++ -*-===//
2*71db0c75SAndroid Build Coastguard Worker //
3*71db0c75SAndroid Build Coastguard Worker // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*71db0c75SAndroid Build Coastguard Worker // See https://llvm.org/LICENSE.txt for license information.
5*71db0c75SAndroid Build Coastguard Worker // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*71db0c75SAndroid Build Coastguard Worker //
7*71db0c75SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
8*71db0c75SAndroid Build Coastguard Worker 
9*71db0c75SAndroid Build Coastguard Worker #ifndef LLVM_LIBC_TEST_SRC_MATH_SMOKE_CANONICALIZETEST_H
10*71db0c75SAndroid Build Coastguard Worker #define LLVM_LIBC_TEST_SRC_MATH_SMOKE_CANONICALIZETEST_H
11*71db0c75SAndroid Build Coastguard Worker 
12*71db0c75SAndroid Build Coastguard Worker #include "src/__support/FPUtil/FEnvImpl.h"
13*71db0c75SAndroid Build Coastguard Worker #include "src/__support/FPUtil/FPBits.h"
14*71db0c75SAndroid Build Coastguard Worker #include "src/__support/integer_literals.h"
15*71db0c75SAndroid Build Coastguard Worker #include "test/UnitTest/FEnvSafeTest.h"
16*71db0c75SAndroid Build Coastguard Worker #include "test/UnitTest/FPMatcher.h"
17*71db0c75SAndroid Build Coastguard Worker #include "test/UnitTest/Test.h"
18*71db0c75SAndroid Build Coastguard Worker 
19*71db0c75SAndroid Build Coastguard Worker #include "hdr/math_macros.h"
20*71db0c75SAndroid Build Coastguard Worker 
21*71db0c75SAndroid Build Coastguard Worker #define TEST_SPECIAL(x, y, expected, expected_exception)                       \
22*71db0c75SAndroid Build Coastguard Worker   EXPECT_EQ(expected, f(&x, &y));                                              \
23*71db0c75SAndroid Build Coastguard Worker   EXPECT_FP_EXCEPTION(expected_exception);                                     \
24*71db0c75SAndroid Build Coastguard Worker   LIBC_NAMESPACE::fputil::clear_except(FE_ALL_EXCEPT)
25*71db0c75SAndroid Build Coastguard Worker 
26*71db0c75SAndroid Build Coastguard Worker #define TEST_REGULAR(x, y, expected) TEST_SPECIAL(x, y, expected, 0)
27*71db0c75SAndroid Build Coastguard Worker 
28*71db0c75SAndroid Build Coastguard Worker using LIBC_NAMESPACE::operator""_u96;
29*71db0c75SAndroid Build Coastguard Worker using LIBC_NAMESPACE::operator""_u128;
30*71db0c75SAndroid Build Coastguard Worker 
31*71db0c75SAndroid Build Coastguard Worker template <typename T>
32*71db0c75SAndroid Build Coastguard Worker class CanonicalizeTest : public LIBC_NAMESPACE::testing::FEnvSafeTest {
33*71db0c75SAndroid Build Coastguard Worker 
34*71db0c75SAndroid Build Coastguard Worker   DECLARE_SPECIAL_CONSTANTS(T)
35*71db0c75SAndroid Build Coastguard Worker 
36*71db0c75SAndroid Build Coastguard Worker public:
37*71db0c75SAndroid Build Coastguard Worker   typedef int (*CanonicalizeFunc)(T *, const T *);
38*71db0c75SAndroid Build Coastguard Worker 
testSpecialNumbers(CanonicalizeFunc f)39*71db0c75SAndroid Build Coastguard Worker   void testSpecialNumbers(CanonicalizeFunc f) {
40*71db0c75SAndroid Build Coastguard Worker     T cx;
41*71db0c75SAndroid Build Coastguard Worker 
42*71db0c75SAndroid Build Coastguard Worker     TEST_SPECIAL(cx, zero, 0, 0);
43*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(cx, zero);
44*71db0c75SAndroid Build Coastguard Worker 
45*71db0c75SAndroid Build Coastguard Worker     TEST_SPECIAL(cx, neg_zero, 0, 0);
46*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(cx, neg_zero);
47*71db0c75SAndroid Build Coastguard Worker 
48*71db0c75SAndroid Build Coastguard Worker     TEST_SPECIAL(cx, inf, 0, 0);
49*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(cx, inf);
50*71db0c75SAndroid Build Coastguard Worker 
51*71db0c75SAndroid Build Coastguard Worker     TEST_SPECIAL(cx, neg_inf, 0, 0);
52*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(cx, neg_inf);
53*71db0c75SAndroid Build Coastguard Worker 
54*71db0c75SAndroid Build Coastguard Worker     TEST_SPECIAL(cx, sNaN, 1, FE_INVALID);
55*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(cx, aNaN);
56*71db0c75SAndroid Build Coastguard Worker   }
57*71db0c75SAndroid Build Coastguard Worker 
testX64_80SpecialNumbers(CanonicalizeFunc f)58*71db0c75SAndroid Build Coastguard Worker   void testX64_80SpecialNumbers(CanonicalizeFunc f) {
59*71db0c75SAndroid Build Coastguard Worker     if constexpr (LIBC_NAMESPACE::fputil::get_fp_type<T>() ==
60*71db0c75SAndroid Build Coastguard Worker                   LIBC_NAMESPACE::fputil::FPType::X86_Binary80) {
61*71db0c75SAndroid Build Coastguard Worker       T cx;
62*71db0c75SAndroid Build Coastguard Worker       // Exponent   |       Significand      | Meaning
63*71db0c75SAndroid Build Coastguard Worker       //            | Bits 63-62 | Bits 61-0 |
64*71db0c75SAndroid Build Coastguard Worker       // All Ones   |     00     |    Zero   | Pseudo Infinity, Value = SNaN
65*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12
66*71db0c75SAndroid Build Coastguard Worker       FPBits test1(0x00007FFF'00000000'00000000_u96);
67*71db0c75SAndroid Build Coastguard Worker #else
68*71db0c75SAndroid Build Coastguard Worker       FPBits test1(0x00000000'00007FFF'00000000'00000000_u128);
69*71db0c75SAndroid Build Coastguard Worker #endif
70*71db0c75SAndroid Build Coastguard Worker       const T test1_val = test1.get_val();
71*71db0c75SAndroid Build Coastguard Worker       TEST_SPECIAL(cx, test1_val, 1, FE_INVALID);
72*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ(cx, aNaN);
73*71db0c75SAndroid Build Coastguard Worker 
74*71db0c75SAndroid Build Coastguard Worker       // Exponent   |       Significand      | Meaning
75*71db0c75SAndroid Build Coastguard Worker       //            | Bits 63-62 | Bits 61-0 |
76*71db0c75SAndroid Build Coastguard Worker       // All Ones   |     00     |  Non-Zero | Pseudo NaN, Value = SNaN
77*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12
78*71db0c75SAndroid Build Coastguard Worker       FPBits test2_1(0x00007FFF'00000000'00000001_u96);
79*71db0c75SAndroid Build Coastguard Worker #else
80*71db0c75SAndroid Build Coastguard Worker       FPBits test2_1(0x00000000'00007FFF'00000000'00000001_u128);
81*71db0c75SAndroid Build Coastguard Worker #endif
82*71db0c75SAndroid Build Coastguard Worker       const T test2_1_val = test2_1.get_val();
83*71db0c75SAndroid Build Coastguard Worker       TEST_SPECIAL(cx, test2_1_val, 1, FE_INVALID);
84*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ(cx, aNaN);
85*71db0c75SAndroid Build Coastguard Worker 
86*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12
87*71db0c75SAndroid Build Coastguard Worker       FPBits test2_2(0x00007FFF'00000042'70000001_u96);
88*71db0c75SAndroid Build Coastguard Worker #else
89*71db0c75SAndroid Build Coastguard Worker       FPBits test2_2(0x00000000'00007FFF'00000042'70000001_u128);
90*71db0c75SAndroid Build Coastguard Worker #endif
91*71db0c75SAndroid Build Coastguard Worker       const T test2_2_val = test2_2.get_val();
92*71db0c75SAndroid Build Coastguard Worker       TEST_SPECIAL(cx, test2_2_val, 1, FE_INVALID);
93*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ(cx, aNaN);
94*71db0c75SAndroid Build Coastguard Worker 
95*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12
96*71db0c75SAndroid Build Coastguard Worker       FPBits test2_3(0x00007FFF'00000000'08261001_u96);
97*71db0c75SAndroid Build Coastguard Worker #else
98*71db0c75SAndroid Build Coastguard Worker       FPBits test2_3(0x00000000'00007FFF'00000000'08261001_u128);
99*71db0c75SAndroid Build Coastguard Worker #endif
100*71db0c75SAndroid Build Coastguard Worker       const T test2_3_val = test2_3.get_val();
101*71db0c75SAndroid Build Coastguard Worker       TEST_SPECIAL(cx, test2_3_val, 1, FE_INVALID);
102*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ(cx, aNaN);
103*71db0c75SAndroid Build Coastguard Worker 
104*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12
105*71db0c75SAndroid Build Coastguard Worker       FPBits test2_4(0x00007FFF'00007800'08261001_u96);
106*71db0c75SAndroid Build Coastguard Worker #else
107*71db0c75SAndroid Build Coastguard Worker       FPBits test2_4(0x00000000'00007FFF'00007800'08261001_u128);
108*71db0c75SAndroid Build Coastguard Worker #endif
109*71db0c75SAndroid Build Coastguard Worker       const T test2_4_val = test2_4.get_val();
110*71db0c75SAndroid Build Coastguard Worker       TEST_SPECIAL(cx, test2_4_val, 1, FE_INVALID);
111*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ(cx, aNaN);
112*71db0c75SAndroid Build Coastguard Worker 
113*71db0c75SAndroid Build Coastguard Worker       // Exponent   |       Significand      | Meaning
114*71db0c75SAndroid Build Coastguard Worker       //            | Bits 63-62 | Bits 61-0 |
115*71db0c75SAndroid Build Coastguard Worker       // All Ones   |     01     | Anything  | Pseudo NaN, Value = SNaN
116*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12
117*71db0c75SAndroid Build Coastguard Worker       FPBits test3_1(0x00007FFF'40000000'00000000_u96);
118*71db0c75SAndroid Build Coastguard Worker #else
119*71db0c75SAndroid Build Coastguard Worker       FPBits test3_1(0x00000000'00007FFF'40000000'00000000_u128);
120*71db0c75SAndroid Build Coastguard Worker #endif
121*71db0c75SAndroid Build Coastguard Worker       const T test3_1_val = test3_1.get_val();
122*71db0c75SAndroid Build Coastguard Worker       TEST_SPECIAL(cx, test3_1_val, 1, FE_INVALID);
123*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ(cx, aNaN);
124*71db0c75SAndroid Build Coastguard Worker 
125*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12
126*71db0c75SAndroid Build Coastguard Worker       FPBits test3_2(0x00007FFF'40000042'70000001_u96);
127*71db0c75SAndroid Build Coastguard Worker #else
128*71db0c75SAndroid Build Coastguard Worker       FPBits test3_2(0x00000000'00007FFF'40000042'70000001_u128);
129*71db0c75SAndroid Build Coastguard Worker #endif
130*71db0c75SAndroid Build Coastguard Worker       const T test3_2_val = test3_2.get_val();
131*71db0c75SAndroid Build Coastguard Worker       TEST_SPECIAL(cx, test3_2_val, 1, FE_INVALID);
132*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ(cx, aNaN);
133*71db0c75SAndroid Build Coastguard Worker 
134*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12
135*71db0c75SAndroid Build Coastguard Worker       FPBits test3_3(0x00007FFF'40000000'08261001_u96);
136*71db0c75SAndroid Build Coastguard Worker #else
137*71db0c75SAndroid Build Coastguard Worker       FPBits test3_3(0x00000000'00007FFF'40000000'08261001_u128);
138*71db0c75SAndroid Build Coastguard Worker #endif
139*71db0c75SAndroid Build Coastguard Worker       const T test3_3_val = test3_3.get_val();
140*71db0c75SAndroid Build Coastguard Worker       TEST_SPECIAL(cx, test3_3_val, 1, FE_INVALID);
141*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ(cx, aNaN);
142*71db0c75SAndroid Build Coastguard Worker 
143*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12
144*71db0c75SAndroid Build Coastguard Worker       FPBits test3_4(0x00007FFF'40007800'08261001_u96);
145*71db0c75SAndroid Build Coastguard Worker #else
146*71db0c75SAndroid Build Coastguard Worker       FPBits test3_4(0x00000000'00007FFF'40007800'08261001_u128);
147*71db0c75SAndroid Build Coastguard Worker #endif
148*71db0c75SAndroid Build Coastguard Worker       const T test3_4_val = test3_4.get_val();
149*71db0c75SAndroid Build Coastguard Worker       TEST_SPECIAL(cx, test3_4_val, 1, FE_INVALID);
150*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ(cx, aNaN);
151*71db0c75SAndroid Build Coastguard Worker 
152*71db0c75SAndroid Build Coastguard Worker       // Exponent   |       Significand      | Meaning
153*71db0c75SAndroid Build Coastguard Worker       //            |   Bit 63   | Bits 62-0 |
154*71db0c75SAndroid Build Coastguard Worker       // All zeroes |   One      | Anything  | Pseudo Denormal, Value =
155*71db0c75SAndroid Build Coastguard Worker       //            |            |           | (−1)**s × m × 2**−16382
156*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12
157*71db0c75SAndroid Build Coastguard Worker       FPBits test4_1(0x00000000'80000000'00000000_u96);
158*71db0c75SAndroid Build Coastguard Worker #else
159*71db0c75SAndroid Build Coastguard Worker       FPBits test4_1(0x00000000'00000000'80000000'00000000_u128);
160*71db0c75SAndroid Build Coastguard Worker #endif
161*71db0c75SAndroid Build Coastguard Worker       const T test4_1_val = test4_1.get_val();
162*71db0c75SAndroid Build Coastguard Worker       TEST_SPECIAL(cx, test4_1_val, 0, 0);
163*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ(
164*71db0c75SAndroid Build Coastguard Worker           cx, FPBits::make_value(test4_1.get_explicit_mantissa(), 0).get_val());
165*71db0c75SAndroid Build Coastguard Worker 
166*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12
167*71db0c75SAndroid Build Coastguard Worker       FPBits test4_2(0x00000000'80000042'70000001_u96);
168*71db0c75SAndroid Build Coastguard Worker #else
169*71db0c75SAndroid Build Coastguard Worker       FPBits test4_2(0x00000000'00000000'80000042'70000001_u128);
170*71db0c75SAndroid Build Coastguard Worker #endif
171*71db0c75SAndroid Build Coastguard Worker       const T test4_2_val = test4_2.get_val();
172*71db0c75SAndroid Build Coastguard Worker       TEST_SPECIAL(cx, test4_2_val, 0, 0);
173*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ(
174*71db0c75SAndroid Build Coastguard Worker           cx, FPBits::make_value(test4_2.get_explicit_mantissa(), 0).get_val());
175*71db0c75SAndroid Build Coastguard Worker 
176*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12
177*71db0c75SAndroid Build Coastguard Worker       FPBits test4_3(0x00000000'80000000'08261001_u96);
178*71db0c75SAndroid Build Coastguard Worker #else
179*71db0c75SAndroid Build Coastguard Worker       FPBits test4_3(0x00000000'00000000'80000000'08261001_u128);
180*71db0c75SAndroid Build Coastguard Worker #endif
181*71db0c75SAndroid Build Coastguard Worker       const T test4_3_val = test4_3.get_val();
182*71db0c75SAndroid Build Coastguard Worker       TEST_SPECIAL(cx, test4_3_val, 0, 0);
183*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ(
184*71db0c75SAndroid Build Coastguard Worker           cx, FPBits::make_value(test4_3.get_explicit_mantissa(), 0).get_val());
185*71db0c75SAndroid Build Coastguard Worker 
186*71db0c75SAndroid Build Coastguard Worker       // Exponent   |       Significand      | Meaning
187*71db0c75SAndroid Build Coastguard Worker       //            |   Bit 63   | Bits 62-0 |
188*71db0c75SAndroid Build Coastguard Worker       // All Other  |   Zero     | Anything  | Unnormal, Value = SNaN
189*71db0c75SAndroid Build Coastguard Worker       //  Values    |            |           |
190*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12
191*71db0c75SAndroid Build Coastguard Worker       FPBits test5_1(0x00000040'00000000'00000001_u96);
192*71db0c75SAndroid Build Coastguard Worker #else
193*71db0c75SAndroid Build Coastguard Worker       FPBits test5_1(0x00000000'00000040'00000000'00000001_u128);
194*71db0c75SAndroid Build Coastguard Worker #endif
195*71db0c75SAndroid Build Coastguard Worker       const T test5_1_val = test5_1.get_val();
196*71db0c75SAndroid Build Coastguard Worker       TEST_SPECIAL(cx, test5_1_val, 1, FE_INVALID);
197*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ(cx, aNaN);
198*71db0c75SAndroid Build Coastguard Worker 
199*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12
200*71db0c75SAndroid Build Coastguard Worker       FPBits test5_2(0x00000230'00000042'70000001_u96);
201*71db0c75SAndroid Build Coastguard Worker #else
202*71db0c75SAndroid Build Coastguard Worker       FPBits test5_2(0x00000000'00000230'00000042'70000001_u128);
203*71db0c75SAndroid Build Coastguard Worker #endif
204*71db0c75SAndroid Build Coastguard Worker       const T test5_2_val = test5_2.get_val();
205*71db0c75SAndroid Build Coastguard Worker       TEST_SPECIAL(cx, test5_2_val, 1, FE_INVALID);
206*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ(cx, aNaN);
207*71db0c75SAndroid Build Coastguard Worker 
208*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12
209*71db0c75SAndroid Build Coastguard Worker       FPBits test5_3(0x00000560'00000000'08261001_u96);
210*71db0c75SAndroid Build Coastguard Worker #else
211*71db0c75SAndroid Build Coastguard Worker       FPBits test5_3(0x00000000'00000560'00000000'08261001_u128);
212*71db0c75SAndroid Build Coastguard Worker #endif
213*71db0c75SAndroid Build Coastguard Worker       const T test5_3_val = test5_3.get_val();
214*71db0c75SAndroid Build Coastguard Worker       TEST_SPECIAL(cx, test5_3_val, 1, FE_INVALID);
215*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ(cx, aNaN);
216*71db0c75SAndroid Build Coastguard Worker 
217*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12
218*71db0c75SAndroid Build Coastguard Worker       FPBits test5_4(0x00000780'00000028'16000000_u96);
219*71db0c75SAndroid Build Coastguard Worker #else
220*71db0c75SAndroid Build Coastguard Worker       FPBits test5_4(0x00000000'00000780'00000028'16000000_u128);
221*71db0c75SAndroid Build Coastguard Worker #endif
222*71db0c75SAndroid Build Coastguard Worker       const T test5_4_val = test5_4.get_val();
223*71db0c75SAndroid Build Coastguard Worker       TEST_SPECIAL(cx, test5_4_val, 1, FE_INVALID);
224*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ(cx, aNaN);
225*71db0c75SAndroid Build Coastguard Worker 
226*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12
227*71db0c75SAndroid Build Coastguard Worker       FPBits test5_5(0x00000900'00000042'70000001_u96);
228*71db0c75SAndroid Build Coastguard Worker #else
229*71db0c75SAndroid Build Coastguard Worker       FPBits test5_5(0x00000000'00000900'00000042'70000001_u128);
230*71db0c75SAndroid Build Coastguard Worker #endif
231*71db0c75SAndroid Build Coastguard Worker       const T test5_5_val = test5_5.get_val();
232*71db0c75SAndroid Build Coastguard Worker       TEST_SPECIAL(cx, test5_5_val, 1, FE_INVALID);
233*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ(cx, aNaN);
234*71db0c75SAndroid Build Coastguard Worker 
235*71db0c75SAndroid Build Coastguard Worker #if __SIZEOF_LONG_DOUBLE__ == 12
236*71db0c75SAndroid Build Coastguard Worker       FPBits test5_6(0x00000AB0'00000000'08261001_u96);
237*71db0c75SAndroid Build Coastguard Worker #else
238*71db0c75SAndroid Build Coastguard Worker       FPBits test5_6(0x00000000'00000AB0'00000000'08261001_u128);
239*71db0c75SAndroid Build Coastguard Worker #endif
240*71db0c75SAndroid Build Coastguard Worker       const T test5_6_val = test5_6.get_val();
241*71db0c75SAndroid Build Coastguard Worker       TEST_SPECIAL(cx, test5_6_val, 1, FE_INVALID);
242*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ(cx, aNaN);
243*71db0c75SAndroid Build Coastguard Worker     }
244*71db0c75SAndroid Build Coastguard Worker   }
245*71db0c75SAndroid Build Coastguard Worker 
testRegularNumbers(CanonicalizeFunc f)246*71db0c75SAndroid Build Coastguard Worker   void testRegularNumbers(CanonicalizeFunc f) {
247*71db0c75SAndroid Build Coastguard Worker     T cx;
248*71db0c75SAndroid Build Coastguard Worker     const T test_var_1 = T(1.0);
249*71db0c75SAndroid Build Coastguard Worker     TEST_REGULAR(cx, test_var_1, 0);
250*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(cx, test_var_1);
251*71db0c75SAndroid Build Coastguard Worker     const T test_var_2 = T(-1.0);
252*71db0c75SAndroid Build Coastguard Worker     TEST_REGULAR(cx, test_var_2, 0);
253*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(cx, test_var_2);
254*71db0c75SAndroid Build Coastguard Worker     const T test_var_3 = T(10.0);
255*71db0c75SAndroid Build Coastguard Worker     TEST_REGULAR(cx, test_var_3, 0);
256*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(cx, test_var_3);
257*71db0c75SAndroid Build Coastguard Worker     const T test_var_4 = T(-10.0);
258*71db0c75SAndroid Build Coastguard Worker     TEST_REGULAR(cx, test_var_4, 0);
259*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(cx, test_var_4);
260*71db0c75SAndroid Build Coastguard Worker     const T test_var_5 = T(1234.0);
261*71db0c75SAndroid Build Coastguard Worker     TEST_REGULAR(cx, test_var_5, 0);
262*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(cx, test_var_5);
263*71db0c75SAndroid Build Coastguard Worker     const T test_var_6 = T(-1234.0);
264*71db0c75SAndroid Build Coastguard Worker     TEST_REGULAR(cx, test_var_6, 0);
265*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(cx, test_var_6);
266*71db0c75SAndroid Build Coastguard Worker   }
267*71db0c75SAndroid Build Coastguard Worker };
268*71db0c75SAndroid Build Coastguard Worker 
269*71db0c75SAndroid Build Coastguard Worker #define LIST_CANONICALIZE_TESTS(T, func)                                       \
270*71db0c75SAndroid Build Coastguard Worker   using LlvmLibcCanonicalizeTest = CanonicalizeTest<T>;                        \
271*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcCanonicalizeTest, SpecialNumbers) {                           \
272*71db0c75SAndroid Build Coastguard Worker     testSpecialNumbers(&func);                                                 \
273*71db0c75SAndroid Build Coastguard Worker   }                                                                            \
274*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcCanonicalizeTest, RegularNubmers) {                           \
275*71db0c75SAndroid Build Coastguard Worker     testRegularNumbers(&func);                                                 \
276*71db0c75SAndroid Build Coastguard Worker   }
277*71db0c75SAndroid Build Coastguard Worker 
278*71db0c75SAndroid Build Coastguard Worker #define X86_80_SPECIAL_CANONICALIZE_TEST(T, func)                              \
279*71db0c75SAndroid Build Coastguard Worker   using LlvmLibcCanonicalizeTest = CanonicalizeTest<T>;                        \
280*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcCanonicalizeTest, X64_80SpecialNumbers) {                     \
281*71db0c75SAndroid Build Coastguard Worker     testX64_80SpecialNumbers(&func);                                           \
282*71db0c75SAndroid Build Coastguard Worker   }
283*71db0c75SAndroid Build Coastguard Worker 
284*71db0c75SAndroid Build Coastguard Worker #endif // LLVM_LIBC_TEST_SRC_MATH_SMOKE_CANONICALIZETEST_H
285