xref: /aosp_15_r20/external/llvm-libc/test/src/math/smoke/FromfpTest.h (revision 71db0c75aadcf003ffe3238005f61d7618a3fead)
1*71db0c75SAndroid Build Coastguard Worker //===-- Utility class to test different flavors of fromfp -------*- 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 LIBC_TEST_SRC_MATH_SMOKE_FROMFPTEST_H
10*71db0c75SAndroid Build Coastguard Worker #define LIBC_TEST_SRC_MATH_SMOKE_FROMFPTEST_H
11*71db0c75SAndroid Build Coastguard Worker 
12*71db0c75SAndroid Build Coastguard Worker #include "test/UnitTest/FEnvSafeTest.h"
13*71db0c75SAndroid Build Coastguard Worker #include "test/UnitTest/FPMatcher.h"
14*71db0c75SAndroid Build Coastguard Worker #include "test/UnitTest/Test.h"
15*71db0c75SAndroid Build Coastguard Worker 
16*71db0c75SAndroid Build Coastguard Worker template <typename T>
17*71db0c75SAndroid Build Coastguard Worker class FromfpTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest {
18*71db0c75SAndroid Build Coastguard Worker 
19*71db0c75SAndroid Build Coastguard Worker   DECLARE_SPECIAL_CONSTANTS(T)
20*71db0c75SAndroid Build Coastguard Worker 
21*71db0c75SAndroid Build Coastguard Worker public:
22*71db0c75SAndroid Build Coastguard Worker   typedef T (*FromfpFunc)(T, int, unsigned int);
23*71db0c75SAndroid Build Coastguard Worker 
testSpecialNumbersNonzeroWidth(FromfpFunc func)24*71db0c75SAndroid Build Coastguard Worker   void testSpecialNumbersNonzeroWidth(FromfpFunc func) {
25*71db0c75SAndroid Build Coastguard Worker     for (int rnd : MATH_ROUNDING_DIRECTIONS_INCLUDING_UNKNOWN) {
26*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ(zero, func(zero, rnd, 32U));
27*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ(neg_zero, func(neg_zero, rnd, 32U));
28*71db0c75SAndroid Build Coastguard Worker 
29*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(inf, rnd, 32U), FE_INVALID);
30*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(neg_inf, rnd, 32U), FE_INVALID);
31*71db0c75SAndroid Build Coastguard Worker 
32*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(aNaN, rnd, 32U), FE_INVALID);
33*71db0c75SAndroid Build Coastguard Worker     }
34*71db0c75SAndroid Build Coastguard Worker   }
35*71db0c75SAndroid Build Coastguard Worker 
testSpecialNumbersZeroWidth(FromfpFunc func)36*71db0c75SAndroid Build Coastguard Worker   void testSpecialNumbersZeroWidth(FromfpFunc func) {
37*71db0c75SAndroid Build Coastguard Worker     for (int rnd : MATH_ROUNDING_DIRECTIONS_INCLUDING_UNKNOWN) {
38*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(zero, rnd, 0U), FE_INVALID);
39*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(neg_zero, rnd, 0U), FE_INVALID);
40*71db0c75SAndroid Build Coastguard Worker 
41*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(inf, rnd, 0U), FE_INVALID);
42*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(neg_inf, rnd, 0U), FE_INVALID);
43*71db0c75SAndroid Build Coastguard Worker 
44*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(aNaN, rnd, 0U), FE_INVALID);
45*71db0c75SAndroid Build Coastguard Worker     }
46*71db0c75SAndroid Build Coastguard Worker   }
47*71db0c75SAndroid Build Coastguard Worker 
testRoundedNumbersWithinRange(FromfpFunc func)48*71db0c75SAndroid Build Coastguard Worker   void testRoundedNumbersWithinRange(FromfpFunc func) {
49*71db0c75SAndroid Build Coastguard Worker     for (int rnd : MATH_ROUNDING_DIRECTIONS_INCLUDING_UNKNOWN) {
50*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ(T(1.0), func(T(1.0), rnd, 2U));
51*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ(T(-1.0), func(T(-1.0), rnd, 1U));
52*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ(T(10.0), func(T(10.0), rnd, 5U));
53*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ(T(-10.0), func(T(-10.0), rnd, 5U));
54*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ(T(1234.0), func(T(1234.0), rnd, 12U));
55*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ(T(-1234.0), func(T(-1234.0), rnd, 12U));
56*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ(T(1234.0), func(T(1234.0), rnd, 65U));
57*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ(T(-1234.0), func(T(-1234.0), rnd, 65U));
58*71db0c75SAndroid Build Coastguard Worker     }
59*71db0c75SAndroid Build Coastguard Worker   }
60*71db0c75SAndroid Build Coastguard Worker 
testRoundedNumbersOutsideRange(FromfpFunc func)61*71db0c75SAndroid Build Coastguard Worker   void testRoundedNumbersOutsideRange(FromfpFunc func) {
62*71db0c75SAndroid Build Coastguard Worker     for (int rnd : MATH_ROUNDING_DIRECTIONS_INCLUDING_UNKNOWN) {
63*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.0), rnd, 1U), FE_INVALID);
64*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.0), rnd, 4U), FE_INVALID);
65*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.0), rnd, 4U), FE_INVALID);
66*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.0), rnd, 11U), FE_INVALID);
67*71db0c75SAndroid Build Coastguard Worker       EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.0), rnd, 11U), FE_INVALID);
68*71db0c75SAndroid Build Coastguard Worker     }
69*71db0c75SAndroid Build Coastguard Worker   }
70*71db0c75SAndroid Build Coastguard Worker 
testFractionsUpwardWithinRange(FromfpFunc func)71*71db0c75SAndroid Build Coastguard Worker   void testFractionsUpwardWithinRange(FromfpFunc func) {
72*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(1.0), func(T(0.5), FP_INT_UPWARD, 2U));
73*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-0.0), func(T(-0.5), FP_INT_UPWARD, 1U));
74*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(1.0), func(T(0.115), FP_INT_UPWARD, 2U));
75*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-0.0), func(T(-0.115), FP_INT_UPWARD, 1U));
76*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(1.0), func(T(0.715), FP_INT_UPWARD, 2U));
77*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-0.0), func(T(-0.715), FP_INT_UPWARD, 1U));
78*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(2.0), func(T(1.3), FP_INT_UPWARD, 3U));
79*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-1.0), func(T(-1.3), FP_INT_UPWARD, 1U));
80*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(2.0), func(T(1.5), FP_INT_UPWARD, 3U));
81*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-1.0), func(T(-1.5), FP_INT_UPWARD, 1U));
82*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(2.0), func(T(1.75), FP_INT_UPWARD, 3U));
83*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-1.0), func(T(-1.75), FP_INT_UPWARD, 1U));
84*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(11.0), func(T(10.32), FP_INT_UPWARD, 5U));
85*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-10.0), func(T(-10.32), FP_INT_UPWARD, 5U));
86*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(11.0), func(T(10.65), FP_INT_UPWARD, 5U));
87*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-10.0), func(T(-10.65), FP_INT_UPWARD, 5U));
88*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(124.0), func(T(123.38), FP_INT_UPWARD, 8U));
89*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-123.0), func(T(-123.38), FP_INT_UPWARD, 8U));
90*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(124.0), func(T(123.96), FP_INT_UPWARD, 8U));
91*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-123.0), func(T(-123.96), FP_INT_UPWARD, 8U));
92*71db0c75SAndroid Build Coastguard Worker   }
93*71db0c75SAndroid Build Coastguard Worker 
testFractionsUpwardOutsideRange(FromfpFunc func)94*71db0c75SAndroid Build Coastguard Worker   void testFractionsUpwardOutsideRange(FromfpFunc func) {
95*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(0.5), FP_INT_UPWARD, 1U),
96*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
97*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(0.115), FP_INT_UPWARD, 1U),
98*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
99*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(0.715), FP_INT_UPWARD, 1U),
100*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
101*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.3), FP_INT_UPWARD, 2U),
102*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
103*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.5), FP_INT_UPWARD, 2U),
104*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
105*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.75), FP_INT_UPWARD, 2U),
106*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
107*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.32), FP_INT_UPWARD, 4U),
108*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
109*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.32), FP_INT_UPWARD, 4U),
110*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
111*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.65), FP_INT_UPWARD, 4U),
112*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
113*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_UPWARD, 4U),
114*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
115*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_UPWARD, 7U),
116*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
117*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_UPWARD, 7U),
118*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
119*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_UPWARD, 7U),
120*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
121*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_UPWARD, 7U),
122*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
123*71db0c75SAndroid Build Coastguard Worker   }
124*71db0c75SAndroid Build Coastguard Worker 
testFractionsDownwardWithinRange(FromfpFunc func)125*71db0c75SAndroid Build Coastguard Worker   void testFractionsDownwardWithinRange(FromfpFunc func) {
126*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(0.0), func(T(0.5), FP_INT_DOWNWARD, 1U));
127*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-1.0), func(T(-0.5), FP_INT_DOWNWARD, 1U));
128*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(0.0), func(T(0.115), FP_INT_DOWNWARD, 1U));
129*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-1.0), func(T(-0.115), FP_INT_DOWNWARD, 1U));
130*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(0.0), func(T(0.715), FP_INT_DOWNWARD, 1U));
131*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-1.0), func(T(-0.715), FP_INT_DOWNWARD, 1U));
132*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(1.0), func(T(1.3), FP_INT_DOWNWARD, 2U));
133*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-2.0), func(T(-1.3), FP_INT_DOWNWARD, 2U));
134*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(1.0), func(T(1.5), FP_INT_DOWNWARD, 2U));
135*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-2.0), func(T(-1.5), FP_INT_DOWNWARD, 2U));
136*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(1.0), func(T(1.75), FP_INT_DOWNWARD, 2U));
137*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-2.0), func(T(-1.75), FP_INT_DOWNWARD, 2U));
138*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(10.0), func(T(10.32), FP_INT_DOWNWARD, 5U));
139*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-11.0), func(T(-10.32), FP_INT_DOWNWARD, 5U));
140*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(10.0), func(T(10.65), FP_INT_DOWNWARD, 5U));
141*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-11.0), func(T(-10.65), FP_INT_DOWNWARD, 5U));
142*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(123.0), func(T(123.38), FP_INT_DOWNWARD, 8U));
143*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-124.0), func(T(-123.38), FP_INT_DOWNWARD, 8U));
144*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(123.0), func(T(123.96), FP_INT_DOWNWARD, 8U));
145*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-124.0), func(T(-123.96), FP_INT_DOWNWARD, 8U));
146*71db0c75SAndroid Build Coastguard Worker   }
147*71db0c75SAndroid Build Coastguard Worker 
testFractionsDownwardOutsideRange(FromfpFunc func)148*71db0c75SAndroid Build Coastguard Worker   void testFractionsDownwardOutsideRange(FromfpFunc func) {
149*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.3), FP_INT_DOWNWARD, 1U),
150*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
151*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.3), FP_INT_DOWNWARD, 1U),
152*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
153*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.5), FP_INT_DOWNWARD, 1U),
154*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
155*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.5), FP_INT_DOWNWARD, 1U),
156*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
157*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.75), FP_INT_DOWNWARD, 1U),
158*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
159*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.75), FP_INT_DOWNWARD, 1U),
160*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
161*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.32), FP_INT_DOWNWARD, 4U),
162*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
163*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.32), FP_INT_DOWNWARD, 4U),
164*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
165*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.65), FP_INT_DOWNWARD, 4U),
166*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
167*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_DOWNWARD, 4U),
168*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
169*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_DOWNWARD, 7U),
170*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
171*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_DOWNWARD, 7U),
172*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
173*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_DOWNWARD, 7U),
174*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
175*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_DOWNWARD, 7U),
176*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
177*71db0c75SAndroid Build Coastguard Worker   }
178*71db0c75SAndroid Build Coastguard Worker 
testFractionsTowardZeroWithinRange(FromfpFunc func)179*71db0c75SAndroid Build Coastguard Worker   void testFractionsTowardZeroWithinRange(FromfpFunc func) {
180*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(0.0), func(T(0.5), FP_INT_TOWARDZERO, 1U));
181*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-0.0), func(T(-0.5), FP_INT_TOWARDZERO, 1U));
182*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(0.0), func(T(0.115), FP_INT_TOWARDZERO, 1U));
183*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-0.0), func(T(-0.115), FP_INT_TOWARDZERO, 1U));
184*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(0.0), func(T(0.715), FP_INT_TOWARDZERO, 1U));
185*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-0.0), func(T(-0.715), FP_INT_TOWARDZERO, 1U));
186*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(1.0), func(T(1.3), FP_INT_TOWARDZERO, 2U));
187*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-1.0), func(T(-1.3), FP_INT_TOWARDZERO, 1U));
188*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(1.0), func(T(1.5), FP_INT_TOWARDZERO, 2U));
189*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-1.0), func(T(-1.5), FP_INT_TOWARDZERO, 1U));
190*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(1.0), func(T(1.75), FP_INT_TOWARDZERO, 2U));
191*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-1.0), func(T(-1.75), FP_INT_TOWARDZERO, 1U));
192*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(10.0), func(T(10.32), FP_INT_TOWARDZERO, 5U));
193*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-10.0), func(T(-10.32), FP_INT_TOWARDZERO, 5U));
194*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(10.0), func(T(10.65), FP_INT_TOWARDZERO, 5U));
195*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-10.0), func(T(-10.65), FP_INT_TOWARDZERO, 5U));
196*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(123.0), func(T(123.38), FP_INT_TOWARDZERO, 8U));
197*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-123.0), func(T(-123.38), FP_INT_TOWARDZERO, 8U));
198*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(123.0), func(T(123.96), FP_INT_TOWARDZERO, 8U));
199*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-123.0), func(T(-123.96), FP_INT_TOWARDZERO, 8U));
200*71db0c75SAndroid Build Coastguard Worker   }
201*71db0c75SAndroid Build Coastguard Worker 
testFractionsTowardZeroOutsideRange(FromfpFunc func)202*71db0c75SAndroid Build Coastguard Worker   void testFractionsTowardZeroOutsideRange(FromfpFunc func) {
203*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.3), FP_INT_TOWARDZERO, 1U),
204*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
205*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.5), FP_INT_TOWARDZERO, 1U),
206*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
207*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.75), FP_INT_TOWARDZERO, 1U),
208*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
209*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.32), FP_INT_TOWARDZERO, 4U),
210*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
211*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.32), FP_INT_TOWARDZERO, 4U),
212*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
213*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.65), FP_INT_TOWARDZERO, 4U),
214*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
215*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_TOWARDZERO, 4U),
216*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
217*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_TOWARDZERO, 7U),
218*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
219*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_TOWARDZERO, 7U),
220*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
221*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_TOWARDZERO, 7U),
222*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
223*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_TOWARDZERO, 7U),
224*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
225*71db0c75SAndroid Build Coastguard Worker   }
226*71db0c75SAndroid Build Coastguard Worker 
testFractionsToNearestFromZeroWithinRange(FromfpFunc func)227*71db0c75SAndroid Build Coastguard Worker   void testFractionsToNearestFromZeroWithinRange(FromfpFunc func) {
228*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(1.0), func(T(0.5), FP_INT_TONEARESTFROMZERO, 2U));
229*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-1.0), func(T(-0.5), FP_INT_TONEARESTFROMZERO, 1U));
230*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(0.0), func(T(0.115), FP_INT_TONEARESTFROMZERO, 1U));
231*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-0.0), func(T(-0.115), FP_INT_TONEARESTFROMZERO, 1U));
232*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(1.0), func(T(0.715), FP_INT_TONEARESTFROMZERO, 2U));
233*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-1.0), func(T(-0.715), FP_INT_TONEARESTFROMZERO, 1U));
234*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(1.0), func(T(1.3), FP_INT_TONEARESTFROMZERO, 2U));
235*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-1.0), func(T(-1.3), FP_INT_TONEARESTFROMZERO, 1U));
236*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(2.0), func(T(1.5), FP_INT_TONEARESTFROMZERO, 3U));
237*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-2.0), func(T(-1.5), FP_INT_TONEARESTFROMZERO, 2U));
238*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(2.0), func(T(1.75), FP_INT_TONEARESTFROMZERO, 3U));
239*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-2.0), func(T(-1.75), FP_INT_TONEARESTFROMZERO, 2U));
240*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(10.0), func(T(10.32), FP_INT_TONEARESTFROMZERO, 5U));
241*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-10.0), func(T(-10.32), FP_INT_TONEARESTFROMZERO, 5U));
242*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(11.0), func(T(10.65), FP_INT_TONEARESTFROMZERO, 5U));
243*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-11.0), func(T(-10.65), FP_INT_TONEARESTFROMZERO, 5U));
244*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(123.0), func(T(123.38), FP_INT_TONEARESTFROMZERO, 8U));
245*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-123.0), func(T(-123.38), FP_INT_TONEARESTFROMZERO, 8U));
246*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(124.0), func(T(123.96), FP_INT_TONEARESTFROMZERO, 8U));
247*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-124.0), func(T(-123.96), FP_INT_TONEARESTFROMZERO, 8U));
248*71db0c75SAndroid Build Coastguard Worker   }
249*71db0c75SAndroid Build Coastguard Worker 
testFractionsToNearestFromZeroOutsideRange(FromfpFunc func)250*71db0c75SAndroid Build Coastguard Worker   void testFractionsToNearestFromZeroOutsideRange(FromfpFunc func) {
251*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
252*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(0.5), FP_INT_TONEARESTFROMZERO, 1U), FE_INVALID);
253*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
254*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(0.715), FP_INT_TONEARESTFROMZERO, 1U), FE_INVALID);
255*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
256*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(1.3), FP_INT_TONEARESTFROMZERO, 1U), FE_INVALID);
257*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
258*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(1.5), FP_INT_TONEARESTFROMZERO, 2U), FE_INVALID);
259*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
260*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-1.5), FP_INT_TONEARESTFROMZERO, 1U), FE_INVALID);
261*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
262*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(1.75), FP_INT_TONEARESTFROMZERO, 2U), FE_INVALID);
263*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
264*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-1.75), FP_INT_TONEARESTFROMZERO, 1U), FE_INVALID);
265*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
266*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(10.32), FP_INT_TONEARESTFROMZERO, 4U), FE_INVALID);
267*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
268*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-10.32), FP_INT_TONEARESTFROMZERO, 4U), FE_INVALID);
269*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
270*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(10.65), FP_INT_TONEARESTFROMZERO, 4U), FE_INVALID);
271*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
272*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-10.65), FP_INT_TONEARESTFROMZERO, 4U), FE_INVALID);
273*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
274*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(123.38), FP_INT_TONEARESTFROMZERO, 7U), FE_INVALID);
275*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
276*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-123.38), FP_INT_TONEARESTFROMZERO, 7U), FE_INVALID);
277*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
278*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(123.96), FP_INT_TONEARESTFROMZERO, 7U), FE_INVALID);
279*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
280*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-123.96), FP_INT_TONEARESTFROMZERO, 7U), FE_INVALID);
281*71db0c75SAndroid Build Coastguard Worker   }
282*71db0c75SAndroid Build Coastguard Worker 
testFractionsToNearestWithinRange(FromfpFunc func)283*71db0c75SAndroid Build Coastguard Worker   void testFractionsToNearestWithinRange(FromfpFunc func) {
284*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(0.0), func(T(0.5), FP_INT_TONEAREST, 1U));
285*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-0.0), func(T(-0.5), FP_INT_TONEAREST, 1U));
286*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(0.0), func(T(0.115), FP_INT_TONEAREST, 1U));
287*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-0.0), func(T(-0.115), FP_INT_TONEAREST, 1U));
288*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(1.0), func(T(0.715), FP_INT_TONEAREST, 2U));
289*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-1.0), func(T(-0.715), FP_INT_TONEAREST, 1U));
290*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(1.0), func(T(1.3), FP_INT_TONEAREST, 2U));
291*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-1.0), func(T(-1.3), FP_INT_TONEAREST, 1U));
292*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(2.0), func(T(1.5), FP_INT_TONEAREST, 3U));
293*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-2.0), func(T(-1.5), FP_INT_TONEAREST, 2U));
294*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(2.0), func(T(1.75), FP_INT_TONEAREST, 3U));
295*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-2.0), func(T(-1.75), FP_INT_TONEAREST, 2U));
296*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(10.0), func(T(10.32), FP_INT_TONEAREST, 5U));
297*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-10.0), func(T(-10.32), FP_INT_TONEAREST, 5U));
298*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(11.0), func(T(10.65), FP_INT_TONEAREST, 5U));
299*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-11.0), func(T(-10.65), FP_INT_TONEAREST, 5U));
300*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(123.0), func(T(123.38), FP_INT_TONEAREST, 8U));
301*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-123.0), func(T(-123.38), FP_INT_TONEAREST, 8U));
302*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(124.0), func(T(123.96), FP_INT_TONEAREST, 8U));
303*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-124.0), func(T(-123.96), FP_INT_TONEAREST, 8U));
304*71db0c75SAndroid Build Coastguard Worker 
305*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(2.0), func(T(2.3), FP_INT_TONEAREST, 3U));
306*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-2.0), func(T(-2.3), FP_INT_TONEAREST, 2U));
307*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(2.0), func(T(2.5), FP_INT_TONEAREST, 3U));
308*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-2.0), func(T(-2.5), FP_INT_TONEAREST, 2U));
309*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(3.0), func(T(2.75), FP_INT_TONEAREST, 3U));
310*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-3.0), func(T(-2.75), FP_INT_TONEAREST, 3U));
311*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(5.0), func(T(5.3), FP_INT_TONEAREST, 4U));
312*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-5.0), func(T(-5.3), FP_INT_TONEAREST, 4U));
313*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(6.0), func(T(5.5), FP_INT_TONEAREST, 4U));
314*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-6.0), func(T(-5.5), FP_INT_TONEAREST, 4U));
315*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(6.0), func(T(5.75), FP_INT_TONEAREST, 4U));
316*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-6.0), func(T(-5.75), FP_INT_TONEAREST, 4U));
317*71db0c75SAndroid Build Coastguard Worker   }
318*71db0c75SAndroid Build Coastguard Worker 
testFractionsToNearestOutsideRange(FromfpFunc func)319*71db0c75SAndroid Build Coastguard Worker   void testFractionsToNearestOutsideRange(FromfpFunc func) {
320*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(0.715), FP_INT_TONEAREST, 1U),
321*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
322*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.3), FP_INT_TONEAREST, 1U),
323*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
324*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.5), FP_INT_TONEAREST, 2U),
325*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
326*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.5), FP_INT_TONEAREST, 1U),
327*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
328*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.75), FP_INT_TONEAREST, 2U),
329*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
330*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.75), FP_INT_TONEAREST, 1U),
331*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
332*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.32), FP_INT_TONEAREST, 4U),
333*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
334*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.32), FP_INT_TONEAREST, 4U),
335*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
336*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.65), FP_INT_TONEAREST, 4U),
337*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
338*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_TONEAREST, 4U),
339*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
340*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_TONEAREST, 7U),
341*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
342*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_TONEAREST, 7U),
343*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
344*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_TONEAREST, 7U),
345*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
346*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_TONEAREST, 7U),
347*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
348*71db0c75SAndroid Build Coastguard Worker 
349*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(2.3), FP_INT_TONEAREST, 2U),
350*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
351*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-2.3), FP_INT_TONEAREST, 1U),
352*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
353*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(2.5), FP_INT_TONEAREST, 2U),
354*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
355*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-2.5), FP_INT_TONEAREST, 1U),
356*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
357*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(2.75), FP_INT_TONEAREST, 2U),
358*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
359*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-2.75), FP_INT_TONEAREST, 2U),
360*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
361*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(5.3), FP_INT_TONEAREST, 3U),
362*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
363*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-5.3), FP_INT_TONEAREST, 3U),
364*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
365*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(5.5), FP_INT_TONEAREST, 3U),
366*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
367*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-5.5), FP_INT_TONEAREST, 3U),
368*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
369*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(5.75), FP_INT_TONEAREST, 3U),
370*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
371*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-5.75), FP_INT_TONEAREST, 3U),
372*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
373*71db0c75SAndroid Build Coastguard Worker   }
374*71db0c75SAndroid Build Coastguard Worker 
testFractionsToNearestFallbackWithinRange(FromfpFunc func)375*71db0c75SAndroid Build Coastguard Worker   void testFractionsToNearestFallbackWithinRange(FromfpFunc func) {
376*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(0.0), func(T(0.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U));
377*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-0.0), func(T(-0.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U));
378*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(0.0), func(T(0.115), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U));
379*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-0.0), func(T(-0.115), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U));
380*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(1.0), func(T(0.715), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U));
381*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-1.0), func(T(-0.715), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U));
382*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(1.0), func(T(1.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U));
383*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-1.0), func(T(-1.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U));
384*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(2.0), func(T(1.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U));
385*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-2.0), func(T(-1.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U));
386*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(2.0), func(T(1.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U));
387*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-2.0), func(T(-1.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U));
388*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(10.0), func(T(10.32), UNKNOWN_MATH_ROUNDING_DIRECTION, 5U));
389*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-10.0),
390*71db0c75SAndroid Build Coastguard Worker                  func(T(-10.32), UNKNOWN_MATH_ROUNDING_DIRECTION, 5U));
391*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(11.0), func(T(10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 5U));
392*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-11.0),
393*71db0c75SAndroid Build Coastguard Worker                  func(T(-10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 5U));
394*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(123.0),
395*71db0c75SAndroid Build Coastguard Worker                  func(T(123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U));
396*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-123.0),
397*71db0c75SAndroid Build Coastguard Worker                  func(T(-123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U));
398*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(124.0),
399*71db0c75SAndroid Build Coastguard Worker                  func(T(123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U));
400*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-124.0),
401*71db0c75SAndroid Build Coastguard Worker                  func(T(-123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U));
402*71db0c75SAndroid Build Coastguard Worker 
403*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(2.0), func(T(2.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U));
404*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-2.0), func(T(-2.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U));
405*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(2.0), func(T(2.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U));
406*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-2.0), func(T(-2.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U));
407*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(3.0), func(T(2.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U));
408*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-3.0), func(T(-2.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U));
409*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(5.0), func(T(5.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U));
410*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-5.0), func(T(-5.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U));
411*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(6.0), func(T(5.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U));
412*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-6.0), func(T(-5.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U));
413*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(6.0), func(T(5.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U));
414*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ(T(-6.0), func(T(-5.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U));
415*71db0c75SAndroid Build Coastguard Worker   }
416*71db0c75SAndroid Build Coastguard Worker 
testFractionsToNearestFallbackOutsideRange(FromfpFunc func)417*71db0c75SAndroid Build Coastguard Worker   void testFractionsToNearestFallbackOutsideRange(FromfpFunc func) {
418*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
419*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(0.715), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID);
420*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
421*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(1.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID);
422*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
423*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(1.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INVALID);
424*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
425*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-1.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID);
426*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
427*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(1.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INVALID);
428*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
429*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-1.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID);
430*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
431*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(10.32), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U), FE_INVALID);
432*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
433*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-10.32), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U), FE_INVALID);
434*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
435*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U), FE_INVALID);
436*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
437*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U), FE_INVALID);
438*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
439*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U), FE_INVALID);
440*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
441*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U),
442*71db0c75SAndroid Build Coastguard Worker         FE_INVALID);
443*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
444*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U), FE_INVALID);
445*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
446*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U),
447*71db0c75SAndroid Build Coastguard Worker         FE_INVALID);
448*71db0c75SAndroid Build Coastguard Worker 
449*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
450*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(2.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INVALID);
451*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
452*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-2.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID);
453*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
454*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(2.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INVALID);
455*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
456*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-2.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID);
457*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
458*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(2.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INVALID);
459*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
460*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-2.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INVALID);
461*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
462*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(5.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INVALID);
463*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
464*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-5.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INVALID);
465*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
466*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(5.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INVALID);
467*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
468*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-5.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INVALID);
469*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
470*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(5.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INVALID);
471*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
472*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-5.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INVALID);
473*71db0c75SAndroid Build Coastguard Worker   }
474*71db0c75SAndroid Build Coastguard Worker };
475*71db0c75SAndroid Build Coastguard Worker 
476*71db0c75SAndroid Build Coastguard Worker #define LIST_FROMFP_TESTS(T, func)                                             \
477*71db0c75SAndroid Build Coastguard Worker   using LlvmLibcFromfpTest = FromfpTestTemplate<T>;                            \
478*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcFromfpTest, SpecialNumbersNonzeroWidth) {                     \
479*71db0c75SAndroid Build Coastguard Worker     testSpecialNumbersNonzeroWidth(&func);                                     \
480*71db0c75SAndroid Build Coastguard Worker   }                                                                            \
481*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcFromfpTest, SpecialNumbersZeroWidth) {                        \
482*71db0c75SAndroid Build Coastguard Worker     testSpecialNumbersZeroWidth(&func);                                        \
483*71db0c75SAndroid Build Coastguard Worker   }                                                                            \
484*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcFromfpTest, RoundedNumbersWithinRange) {                      \
485*71db0c75SAndroid Build Coastguard Worker     testRoundedNumbersWithinRange(&func);                                      \
486*71db0c75SAndroid Build Coastguard Worker   }                                                                            \
487*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcFromfpTest, RoundedNumbersOutsideRange) {                     \
488*71db0c75SAndroid Build Coastguard Worker     testRoundedNumbersOutsideRange(&func);                                     \
489*71db0c75SAndroid Build Coastguard Worker   }                                                                            \
490*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcFromfpTest, FractionsUpwardWithinRange) {                     \
491*71db0c75SAndroid Build Coastguard Worker     testFractionsUpwardWithinRange(&func);                                     \
492*71db0c75SAndroid Build Coastguard Worker   }                                                                            \
493*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcFromfpTest, FractionsUpwardOutsideRange) {                    \
494*71db0c75SAndroid Build Coastguard Worker     testFractionsUpwardOutsideRange(&func);                                    \
495*71db0c75SAndroid Build Coastguard Worker   }                                                                            \
496*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcFromfpTest, FractionsDownwardWithinRange) {                   \
497*71db0c75SAndroid Build Coastguard Worker     testFractionsDownwardWithinRange(&func);                                   \
498*71db0c75SAndroid Build Coastguard Worker   }                                                                            \
499*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcFromfpTest, FractionsDownwardOutsideRange) {                  \
500*71db0c75SAndroid Build Coastguard Worker     testFractionsDownwardOutsideRange(&func);                                  \
501*71db0c75SAndroid Build Coastguard Worker   }                                                                            \
502*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcFromfpTest, FractionsTowardZeroWithinRange) {                 \
503*71db0c75SAndroid Build Coastguard Worker     testFractionsTowardZeroWithinRange(&func);                                 \
504*71db0c75SAndroid Build Coastguard Worker   }                                                                            \
505*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcFromfpTest, FractionsTowardZeroOutsideRange) {                \
506*71db0c75SAndroid Build Coastguard Worker     testFractionsTowardZeroOutsideRange(&func);                                \
507*71db0c75SAndroid Build Coastguard Worker   }                                                                            \
508*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcFromfpTest, FractionsToNearestFromZeroWithinRange) {          \
509*71db0c75SAndroid Build Coastguard Worker     testFractionsToNearestFromZeroWithinRange(&func);                          \
510*71db0c75SAndroid Build Coastguard Worker   }                                                                            \
511*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcFromfpTest, FractionsToNearestFromZeroOutsideRange) {         \
512*71db0c75SAndroid Build Coastguard Worker     testFractionsToNearestFromZeroOutsideRange(&func);                         \
513*71db0c75SAndroid Build Coastguard Worker   }                                                                            \
514*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcFromfpTest, FractionsToNearestWithinRange) {                  \
515*71db0c75SAndroid Build Coastguard Worker     testFractionsToNearestWithinRange(&func);                                  \
516*71db0c75SAndroid Build Coastguard Worker   }                                                                            \
517*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcFromfpTest, FractionsToNearestOutsideRange) {                 \
518*71db0c75SAndroid Build Coastguard Worker     testFractionsToNearestOutsideRange(&func);                                 \
519*71db0c75SAndroid Build Coastguard Worker   }                                                                            \
520*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcFromfpTest, FractionsToNearestFallbackWithinRange) {          \
521*71db0c75SAndroid Build Coastguard Worker     testFractionsToNearestFallbackWithinRange(&func);                          \
522*71db0c75SAndroid Build Coastguard Worker   }                                                                            \
523*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcFromfpTest, FractionsToNearestFallbackOutsideRange) {         \
524*71db0c75SAndroid Build Coastguard Worker     testFractionsToNearestFallbackOutsideRange(&func);                         \
525*71db0c75SAndroid Build Coastguard Worker   }
526*71db0c75SAndroid Build Coastguard Worker 
527*71db0c75SAndroid Build Coastguard Worker #endif // LIBC_TEST_SRC_MATH_SMOKE_FROMFPTEST_H
528