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