xref: /aosp_15_r20/external/llvm-libc/test/src/math/smoke/FromfpxTest.h (revision 71db0c75aadcf003ffe3238005f61d7618a3fead)
1*71db0c75SAndroid Build Coastguard Worker //===-- Utility class to test different flavors of fromfpx ------*- 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_FROMFPXTEST_H
10*71db0c75SAndroid Build Coastguard Worker #define LIBC_TEST_SRC_MATH_SMOKE_FROMFPXTEST_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 FromfpxTestTemplate : 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 (*FromfpxFunc)(T, int, unsigned int);
23*71db0c75SAndroid Build Coastguard Worker 
testSpecialNumbersNonzeroWidth(FromfpxFunc func)24*71db0c75SAndroid Build Coastguard Worker   void testSpecialNumbersNonzeroWidth(FromfpxFunc 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(FromfpxFunc func)36*71db0c75SAndroid Build Coastguard Worker   void testSpecialNumbersZeroWidth(FromfpxFunc 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(FromfpxFunc func)48*71db0c75SAndroid Build Coastguard Worker   void testRoundedNumbersWithinRange(FromfpxFunc 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(FromfpxFunc func)61*71db0c75SAndroid Build Coastguard Worker   void testRoundedNumbersOutsideRange(FromfpxFunc 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(FromfpxFunc func)71*71db0c75SAndroid Build Coastguard Worker   void testFractionsUpwardWithinRange(FromfpxFunc func) {
72*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(0.5), FP_INT_UPWARD, 2U),
73*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
74*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.5), FP_INT_UPWARD, 1U),
75*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
76*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(0.115), FP_INT_UPWARD, 2U),
77*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
78*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.115), FP_INT_UPWARD, 1U),
79*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
80*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(0.715), FP_INT_UPWARD, 2U),
81*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
82*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.715), FP_INT_UPWARD, 1U),
83*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
84*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(1.3), FP_INT_UPWARD, 3U),
85*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
86*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-1.0), func(T(-1.3), FP_INT_UPWARD, 1U),
87*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
88*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(1.5), FP_INT_UPWARD, 3U),
89*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
90*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-1.0), func(T(-1.5), FP_INT_UPWARD, 1U),
91*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
92*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(1.75), FP_INT_UPWARD, 3U),
93*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
94*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-1.0), func(T(-1.75), FP_INT_UPWARD, 1U),
95*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
96*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(11.0), func(T(10.32), FP_INT_UPWARD, 5U),
97*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
98*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-10.0), func(T(-10.32), FP_INT_UPWARD, 5U),
99*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
100*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(11.0), func(T(10.65), FP_INT_UPWARD, 5U),
101*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
102*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-10.0), func(T(-10.65), FP_INT_UPWARD, 5U),
103*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
104*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(124.0), func(T(123.38), FP_INT_UPWARD, 8U),
105*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
106*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-123.0), func(T(-123.38), FP_INT_UPWARD, 8U),
107*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
108*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(124.0), func(T(123.96), FP_INT_UPWARD, 8U),
109*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
110*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-123.0), func(T(-123.96), FP_INT_UPWARD, 8U),
111*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
112*71db0c75SAndroid Build Coastguard Worker   }
113*71db0c75SAndroid Build Coastguard Worker 
testFractionsUpwardOutsideRange(FromfpxFunc func)114*71db0c75SAndroid Build Coastguard Worker   void testFractionsUpwardOutsideRange(FromfpxFunc func) {
115*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(0.5), FP_INT_UPWARD, 1U),
116*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
117*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(0.115), FP_INT_UPWARD, 1U),
118*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
119*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(0.715), FP_INT_UPWARD, 1U),
120*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
121*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.3), FP_INT_UPWARD, 2U),
122*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
123*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.5), FP_INT_UPWARD, 2U),
124*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
125*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.75), FP_INT_UPWARD, 2U),
126*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
127*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.32), FP_INT_UPWARD, 4U),
128*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
129*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.32), FP_INT_UPWARD, 4U),
130*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
131*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.65), FP_INT_UPWARD, 4U),
132*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
133*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_UPWARD, 4U),
134*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
135*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_UPWARD, 7U),
136*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
137*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_UPWARD, 7U),
138*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
139*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_UPWARD, 7U),
140*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
141*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_UPWARD, 7U),
142*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
143*71db0c75SAndroid Build Coastguard Worker   }
144*71db0c75SAndroid Build Coastguard Worker 
testFractionsDownwardWithinRange(FromfpxFunc func)145*71db0c75SAndroid Build Coastguard Worker   void testFractionsDownwardWithinRange(FromfpxFunc func) {
146*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.5), FP_INT_DOWNWARD, 1U),
147*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
148*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-1.0), func(T(-0.5), FP_INT_DOWNWARD, 1U),
149*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
150*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.115), FP_INT_DOWNWARD, 1U),
151*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
152*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-1.0), func(T(-0.115), FP_INT_DOWNWARD, 1U),
153*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
154*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.715), FP_INT_DOWNWARD, 1U),
155*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
156*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-1.0), func(T(-0.715), FP_INT_DOWNWARD, 1U),
157*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
158*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(1.3), FP_INT_DOWNWARD, 2U),
159*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
160*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-2.0), func(T(-1.3), FP_INT_DOWNWARD, 2U),
161*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
162*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(1.5), FP_INT_DOWNWARD, 2U),
163*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
164*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-2.0), func(T(-1.5), FP_INT_DOWNWARD, 2U),
165*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
166*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(1.75), FP_INT_DOWNWARD, 2U),
167*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
168*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-2.0), func(T(-1.75), FP_INT_DOWNWARD, 2U),
169*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
170*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(10.0), func(T(10.32), FP_INT_DOWNWARD, 5U),
171*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
172*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-11.0), func(T(-10.32), FP_INT_DOWNWARD, 5U),
173*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
174*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(10.0), func(T(10.65), FP_INT_DOWNWARD, 5U),
175*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
176*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-11.0), func(T(-10.65), FP_INT_DOWNWARD, 5U),
177*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
178*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(123.0), func(T(123.38), FP_INT_DOWNWARD, 8U),
179*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
180*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
181*71db0c75SAndroid Build Coastguard Worker         T(-124.0), func(T(-123.38), FP_INT_DOWNWARD, 8U), FE_INEXACT);
182*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(123.0), func(T(123.96), FP_INT_DOWNWARD, 8U),
183*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
184*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
185*71db0c75SAndroid Build Coastguard Worker         T(-124.0), func(T(-123.96), FP_INT_DOWNWARD, 8U), FE_INEXACT);
186*71db0c75SAndroid Build Coastguard Worker   }
187*71db0c75SAndroid Build Coastguard Worker 
testFractionsDownwardOutsideRange(FromfpxFunc func)188*71db0c75SAndroid Build Coastguard Worker   void testFractionsDownwardOutsideRange(FromfpxFunc func) {
189*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.3), FP_INT_DOWNWARD, 1U),
190*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
191*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.3), FP_INT_DOWNWARD, 1U),
192*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
193*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.5), FP_INT_DOWNWARD, 1U),
194*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
195*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.5), FP_INT_DOWNWARD, 1U),
196*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
197*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.75), FP_INT_DOWNWARD, 1U),
198*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
199*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.75), FP_INT_DOWNWARD, 1U),
200*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
201*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.32), FP_INT_DOWNWARD, 4U),
202*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
203*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.32), FP_INT_DOWNWARD, 4U),
204*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
205*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.65), FP_INT_DOWNWARD, 4U),
206*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
207*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_DOWNWARD, 4U),
208*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
209*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_DOWNWARD, 7U),
210*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
211*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_DOWNWARD, 7U),
212*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
213*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_DOWNWARD, 7U),
214*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
215*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_DOWNWARD, 7U),
216*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
217*71db0c75SAndroid Build Coastguard Worker   }
218*71db0c75SAndroid Build Coastguard Worker 
testFractionsTowardZeroWithinRange(FromfpxFunc func)219*71db0c75SAndroid Build Coastguard Worker   void testFractionsTowardZeroWithinRange(FromfpxFunc func) {
220*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.5), FP_INT_TOWARDZERO, 1U),
221*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
222*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.5), FP_INT_TOWARDZERO, 1U),
223*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
224*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.115), FP_INT_TOWARDZERO, 1U),
225*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
226*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.115), FP_INT_TOWARDZERO, 1U),
227*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
228*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.715), FP_INT_TOWARDZERO, 1U),
229*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
230*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.715), FP_INT_TOWARDZERO, 1U),
231*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
232*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(1.3), FP_INT_TOWARDZERO, 2U),
233*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
234*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-1.0), func(T(-1.3), FP_INT_TOWARDZERO, 1U),
235*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
236*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(1.5), FP_INT_TOWARDZERO, 2U),
237*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
238*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-1.0), func(T(-1.5), FP_INT_TOWARDZERO, 1U),
239*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
240*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(1.75), FP_INT_TOWARDZERO, 2U),
241*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
242*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-1.0), func(T(-1.75), FP_INT_TOWARDZERO, 1U),
243*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
244*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(10.0), func(T(10.32), FP_INT_TOWARDZERO, 5U),
245*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
246*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
247*71db0c75SAndroid Build Coastguard Worker         T(-10.0), func(T(-10.32), FP_INT_TOWARDZERO, 5U), FE_INEXACT);
248*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(10.0), func(T(10.65), FP_INT_TOWARDZERO, 5U),
249*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
250*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
251*71db0c75SAndroid Build Coastguard Worker         T(-10.0), func(T(-10.65), FP_INT_TOWARDZERO, 5U), FE_INEXACT);
252*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
253*71db0c75SAndroid Build Coastguard Worker         T(123.0), func(T(123.38), FP_INT_TOWARDZERO, 8U), FE_INEXACT);
254*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
255*71db0c75SAndroid Build Coastguard Worker         T(-123.0), func(T(-123.38), FP_INT_TOWARDZERO, 8U), FE_INEXACT);
256*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
257*71db0c75SAndroid Build Coastguard Worker         T(123.0), func(T(123.96), FP_INT_TOWARDZERO, 8U), FE_INEXACT);
258*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
259*71db0c75SAndroid Build Coastguard Worker         T(-123.0), func(T(-123.96), FP_INT_TOWARDZERO, 8U), FE_INEXACT);
260*71db0c75SAndroid Build Coastguard Worker   }
261*71db0c75SAndroid Build Coastguard Worker 
testFractionsTowardZeroOutsideRange(FromfpxFunc func)262*71db0c75SAndroid Build Coastguard Worker   void testFractionsTowardZeroOutsideRange(FromfpxFunc func) {
263*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.3), FP_INT_TOWARDZERO, 1U),
264*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
265*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.5), FP_INT_TOWARDZERO, 1U),
266*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
267*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.75), FP_INT_TOWARDZERO, 1U),
268*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
269*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.32), FP_INT_TOWARDZERO, 4U),
270*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
271*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.32), FP_INT_TOWARDZERO, 4U),
272*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
273*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.65), FP_INT_TOWARDZERO, 4U),
274*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
275*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_TOWARDZERO, 4U),
276*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
277*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_TOWARDZERO, 7U),
278*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
279*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_TOWARDZERO, 7U),
280*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
281*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_TOWARDZERO, 7U),
282*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
283*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_TOWARDZERO, 7U),
284*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
285*71db0c75SAndroid Build Coastguard Worker   }
286*71db0c75SAndroid Build Coastguard Worker 
testFractionsToNearestFromZeroWithinRange(FromfpxFunc func)287*71db0c75SAndroid Build Coastguard Worker   void testFractionsToNearestFromZeroWithinRange(FromfpxFunc func) {
288*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
289*71db0c75SAndroid Build Coastguard Worker         T(1.0), func(T(0.5), FP_INT_TONEARESTFROMZERO, 2U), FE_INEXACT);
290*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
291*71db0c75SAndroid Build Coastguard Worker         T(-1.0), func(T(-0.5), FP_INT_TONEARESTFROMZERO, 1U), FE_INEXACT);
292*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
293*71db0c75SAndroid Build Coastguard Worker         T(0.0), func(T(0.115), FP_INT_TONEARESTFROMZERO, 1U), FE_INEXACT);
294*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
295*71db0c75SAndroid Build Coastguard Worker         T(-0.0), func(T(-0.115), FP_INT_TONEARESTFROMZERO, 1U), FE_INEXACT);
296*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
297*71db0c75SAndroid Build Coastguard Worker         T(1.0), func(T(0.715), FP_INT_TONEARESTFROMZERO, 2U), FE_INEXACT);
298*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
299*71db0c75SAndroid Build Coastguard Worker         T(-1.0), func(T(-0.715), FP_INT_TONEARESTFROMZERO, 1U), FE_INEXACT);
300*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
301*71db0c75SAndroid Build Coastguard Worker         T(1.0), func(T(1.3), FP_INT_TONEARESTFROMZERO, 2U), FE_INEXACT);
302*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
303*71db0c75SAndroid Build Coastguard Worker         T(-1.0), func(T(-1.3), FP_INT_TONEARESTFROMZERO, 1U), FE_INEXACT);
304*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
305*71db0c75SAndroid Build Coastguard Worker         T(2.0), func(T(1.5), FP_INT_TONEARESTFROMZERO, 3U), FE_INEXACT);
306*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
307*71db0c75SAndroid Build Coastguard Worker         T(-2.0), func(T(-1.5), FP_INT_TONEARESTFROMZERO, 2U), FE_INEXACT);
308*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
309*71db0c75SAndroid Build Coastguard Worker         T(2.0), func(T(1.75), FP_INT_TONEARESTFROMZERO, 3U), FE_INEXACT);
310*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
311*71db0c75SAndroid Build Coastguard Worker         T(-2.0), func(T(-1.75), FP_INT_TONEARESTFROMZERO, 2U), FE_INEXACT);
312*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
313*71db0c75SAndroid Build Coastguard Worker         T(10.0), func(T(10.32), FP_INT_TONEARESTFROMZERO, 5U), FE_INEXACT);
314*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
315*71db0c75SAndroid Build Coastguard Worker         T(-10.0), func(T(-10.32), FP_INT_TONEARESTFROMZERO, 5U), FE_INEXACT);
316*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
317*71db0c75SAndroid Build Coastguard Worker         T(11.0), func(T(10.65), FP_INT_TONEARESTFROMZERO, 5U), FE_INEXACT);
318*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
319*71db0c75SAndroid Build Coastguard Worker         T(-11.0), func(T(-10.65), FP_INT_TONEARESTFROMZERO, 5U), FE_INEXACT);
320*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
321*71db0c75SAndroid Build Coastguard Worker         T(123.0), func(T(123.38), FP_INT_TONEARESTFROMZERO, 8U), FE_INEXACT);
322*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
323*71db0c75SAndroid Build Coastguard Worker         T(-123.0), func(T(-123.38), FP_INT_TONEARESTFROMZERO, 8U), FE_INEXACT);
324*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
325*71db0c75SAndroid Build Coastguard Worker         T(124.0), func(T(123.96), FP_INT_TONEARESTFROMZERO, 8U), FE_INEXACT);
326*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
327*71db0c75SAndroid Build Coastguard Worker         T(-124.0), func(T(-123.96), FP_INT_TONEARESTFROMZERO, 8U), FE_INEXACT);
328*71db0c75SAndroid Build Coastguard Worker   }
329*71db0c75SAndroid Build Coastguard Worker 
testFractionsToNearestFromZeroOutsideRange(FromfpxFunc func)330*71db0c75SAndroid Build Coastguard Worker   void testFractionsToNearestFromZeroOutsideRange(FromfpxFunc func) {
331*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
332*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(0.5), FP_INT_TONEARESTFROMZERO, 1U), FE_INVALID);
333*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
334*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(0.715), FP_INT_TONEARESTFROMZERO, 1U), FE_INVALID);
335*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
336*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(1.3), FP_INT_TONEARESTFROMZERO, 1U), FE_INVALID);
337*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
338*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(1.5), FP_INT_TONEARESTFROMZERO, 2U), FE_INVALID);
339*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
340*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-1.5), FP_INT_TONEARESTFROMZERO, 1U), FE_INVALID);
341*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
342*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(1.75), FP_INT_TONEARESTFROMZERO, 2U), FE_INVALID);
343*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
344*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-1.75), FP_INT_TONEARESTFROMZERO, 1U), FE_INVALID);
345*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
346*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(10.32), FP_INT_TONEARESTFROMZERO, 4U), FE_INVALID);
347*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
348*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-10.32), FP_INT_TONEARESTFROMZERO, 4U), FE_INVALID);
349*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
350*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(10.65), FP_INT_TONEARESTFROMZERO, 4U), FE_INVALID);
351*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
352*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-10.65), FP_INT_TONEARESTFROMZERO, 4U), FE_INVALID);
353*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
354*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(123.38), FP_INT_TONEARESTFROMZERO, 7U), FE_INVALID);
355*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
356*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-123.38), FP_INT_TONEARESTFROMZERO, 7U), FE_INVALID);
357*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
358*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(123.96), FP_INT_TONEARESTFROMZERO, 7U), FE_INVALID);
359*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
360*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-123.96), FP_INT_TONEARESTFROMZERO, 7U), FE_INVALID);
361*71db0c75SAndroid Build Coastguard Worker   }
362*71db0c75SAndroid Build Coastguard Worker 
testFractionsToNearestWithinRange(FromfpxFunc func)363*71db0c75SAndroid Build Coastguard Worker   void testFractionsToNearestWithinRange(FromfpxFunc func) {
364*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.5), FP_INT_TONEAREST, 1U),
365*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
366*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.5), FP_INT_TONEAREST, 1U),
367*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
368*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.115), FP_INT_TONEAREST, 1U),
369*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
370*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.115), FP_INT_TONEAREST, 1U),
371*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
372*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(0.715), FP_INT_TONEAREST, 2U),
373*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
374*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-1.0), func(T(-0.715), FP_INT_TONEAREST, 1U),
375*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
376*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(1.3), FP_INT_TONEAREST, 2U),
377*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
378*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-1.0), func(T(-1.3), FP_INT_TONEAREST, 1U),
379*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
380*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(1.5), FP_INT_TONEAREST, 3U),
381*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
382*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-2.0), func(T(-1.5), FP_INT_TONEAREST, 2U),
383*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
384*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(1.75), FP_INT_TONEAREST, 3U),
385*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
386*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-2.0), func(T(-1.75), FP_INT_TONEAREST, 2U),
387*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
388*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(10.0), func(T(10.32), FP_INT_TONEAREST, 5U),
389*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
390*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-10.0), func(T(-10.32), FP_INT_TONEAREST, 5U),
391*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
392*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(11.0), func(T(10.65), FP_INT_TONEAREST, 5U),
393*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
394*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-11.0), func(T(-10.65), FP_INT_TONEAREST, 5U),
395*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
396*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(123.0), func(T(123.38), FP_INT_TONEAREST, 8U),
397*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
398*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
399*71db0c75SAndroid Build Coastguard Worker         T(-123.0), func(T(-123.38), FP_INT_TONEAREST, 8U), FE_INEXACT);
400*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(124.0), func(T(123.96), FP_INT_TONEAREST, 8U),
401*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
402*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
403*71db0c75SAndroid Build Coastguard Worker         T(-124.0), func(T(-123.96), FP_INT_TONEAREST, 8U), FE_INEXACT);
404*71db0c75SAndroid Build Coastguard Worker 
405*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(2.3), FP_INT_TONEAREST, 3U),
406*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
407*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-2.0), func(T(-2.3), FP_INT_TONEAREST, 2U),
408*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
409*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(2.5), FP_INT_TONEAREST, 3U),
410*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
411*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-2.0), func(T(-2.5), FP_INT_TONEAREST, 2U),
412*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
413*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(3.0), func(T(2.75), FP_INT_TONEAREST, 3U),
414*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
415*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-3.0), func(T(-2.75), FP_INT_TONEAREST, 3U),
416*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
417*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(5.0), func(T(5.3), FP_INT_TONEAREST, 4U),
418*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
419*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-5.0), func(T(-5.3), FP_INT_TONEAREST, 4U),
420*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
421*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(6.0), func(T(5.5), FP_INT_TONEAREST, 4U),
422*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
423*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-6.0), func(T(-5.5), FP_INT_TONEAREST, 4U),
424*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
425*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(6.0), func(T(5.75), FP_INT_TONEAREST, 4U),
426*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
427*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(T(-6.0), func(T(-5.75), FP_INT_TONEAREST, 4U),
428*71db0c75SAndroid Build Coastguard Worker                                 FE_INEXACT);
429*71db0c75SAndroid Build Coastguard Worker   }
430*71db0c75SAndroid Build Coastguard Worker 
testFractionsToNearestOutsideRange(FromfpxFunc func)431*71db0c75SAndroid Build Coastguard Worker   void testFractionsToNearestOutsideRange(FromfpxFunc func) {
432*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(0.715), FP_INT_TONEAREST, 1U),
433*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
434*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.3), FP_INT_TONEAREST, 1U),
435*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
436*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.5), FP_INT_TONEAREST, 2U),
437*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
438*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.5), FP_INT_TONEAREST, 1U),
439*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
440*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.75), FP_INT_TONEAREST, 2U),
441*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
442*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.75), FP_INT_TONEAREST, 1U),
443*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
444*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.32), FP_INT_TONEAREST, 4U),
445*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
446*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.32), FP_INT_TONEAREST, 4U),
447*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
448*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.65), FP_INT_TONEAREST, 4U),
449*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
450*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_TONEAREST, 4U),
451*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
452*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_TONEAREST, 7U),
453*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
454*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_TONEAREST, 7U),
455*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
456*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_TONEAREST, 7U),
457*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
458*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_TONEAREST, 7U),
459*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
460*71db0c75SAndroid Build Coastguard Worker 
461*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(2.3), FP_INT_TONEAREST, 2U),
462*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
463*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-2.3), FP_INT_TONEAREST, 1U),
464*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
465*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(2.5), FP_INT_TONEAREST, 2U),
466*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
467*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-2.5), FP_INT_TONEAREST, 1U),
468*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
469*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(2.75), FP_INT_TONEAREST, 2U),
470*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
471*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-2.75), FP_INT_TONEAREST, 2U),
472*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
473*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(5.3), FP_INT_TONEAREST, 3U),
474*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
475*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-5.3), FP_INT_TONEAREST, 3U),
476*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
477*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(5.5), FP_INT_TONEAREST, 3U),
478*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
479*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-5.5), FP_INT_TONEAREST, 3U),
480*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
481*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(5.75), FP_INT_TONEAREST, 3U),
482*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
483*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-5.75), FP_INT_TONEAREST, 3U),
484*71db0c75SAndroid Build Coastguard Worker                                 FE_INVALID);
485*71db0c75SAndroid Build Coastguard Worker   }
486*71db0c75SAndroid Build Coastguard Worker 
testFractionsToNearestFallbackWithinRange(FromfpxFunc func)487*71db0c75SAndroid Build Coastguard Worker   void testFractionsToNearestFallbackWithinRange(FromfpxFunc func) {
488*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
489*71db0c75SAndroid Build Coastguard Worker         T(0.0), func(T(0.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INEXACT);
490*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
491*71db0c75SAndroid Build Coastguard Worker         T(-0.0), func(T(-0.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U),
492*71db0c75SAndroid Build Coastguard Worker         FE_INEXACT);
493*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
494*71db0c75SAndroid Build Coastguard Worker         T(0.0), func(T(0.115), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U),
495*71db0c75SAndroid Build Coastguard Worker         FE_INEXACT);
496*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
497*71db0c75SAndroid Build Coastguard Worker         T(-0.0), func(T(-0.115), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U),
498*71db0c75SAndroid Build Coastguard Worker         FE_INEXACT);
499*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
500*71db0c75SAndroid Build Coastguard Worker         T(1.0), func(T(0.715), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U),
501*71db0c75SAndroid Build Coastguard Worker         FE_INEXACT);
502*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
503*71db0c75SAndroid Build Coastguard Worker         T(-1.0), func(T(-0.715), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U),
504*71db0c75SAndroid Build Coastguard Worker         FE_INEXACT);
505*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
506*71db0c75SAndroid Build Coastguard Worker         T(1.0), func(T(1.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INEXACT);
507*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
508*71db0c75SAndroid Build Coastguard Worker         T(-1.0), func(T(-1.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U),
509*71db0c75SAndroid Build Coastguard Worker         FE_INEXACT);
510*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
511*71db0c75SAndroid Build Coastguard Worker         T(2.0), func(T(1.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INEXACT);
512*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
513*71db0c75SAndroid Build Coastguard Worker         T(-2.0), func(T(-1.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U),
514*71db0c75SAndroid Build Coastguard Worker         FE_INEXACT);
515*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
516*71db0c75SAndroid Build Coastguard Worker         T(2.0), func(T(1.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INEXACT);
517*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
518*71db0c75SAndroid Build Coastguard Worker         T(-2.0), func(T(-1.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U),
519*71db0c75SAndroid Build Coastguard Worker         FE_INEXACT);
520*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
521*71db0c75SAndroid Build Coastguard Worker         T(10.0), func(T(10.32), UNKNOWN_MATH_ROUNDING_DIRECTION, 5U),
522*71db0c75SAndroid Build Coastguard Worker         FE_INEXACT);
523*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
524*71db0c75SAndroid Build Coastguard Worker         T(-10.0), func(T(-10.32), UNKNOWN_MATH_ROUNDING_DIRECTION, 5U),
525*71db0c75SAndroid Build Coastguard Worker         FE_INEXACT);
526*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
527*71db0c75SAndroid Build Coastguard Worker         T(11.0), func(T(10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 5U),
528*71db0c75SAndroid Build Coastguard Worker         FE_INEXACT);
529*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
530*71db0c75SAndroid Build Coastguard Worker         T(-11.0), func(T(-10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 5U),
531*71db0c75SAndroid Build Coastguard Worker         FE_INEXACT);
532*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
533*71db0c75SAndroid Build Coastguard Worker         T(123.0), func(T(123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U),
534*71db0c75SAndroid Build Coastguard Worker         FE_INEXACT);
535*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
536*71db0c75SAndroid Build Coastguard Worker         T(-123.0), func(T(-123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U),
537*71db0c75SAndroid Build Coastguard Worker         FE_INEXACT);
538*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
539*71db0c75SAndroid Build Coastguard Worker         T(124.0), func(T(123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U),
540*71db0c75SAndroid Build Coastguard Worker         FE_INEXACT);
541*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
542*71db0c75SAndroid Build Coastguard Worker         T(-124.0), func(T(-123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 8U),
543*71db0c75SAndroid Build Coastguard Worker         FE_INEXACT);
544*71db0c75SAndroid Build Coastguard Worker 
545*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
546*71db0c75SAndroid Build Coastguard Worker         T(2.0), func(T(2.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INEXACT);
547*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
548*71db0c75SAndroid Build Coastguard Worker         T(-2.0), func(T(-2.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U),
549*71db0c75SAndroid Build Coastguard Worker         FE_INEXACT);
550*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
551*71db0c75SAndroid Build Coastguard Worker         T(2.0), func(T(2.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INEXACT);
552*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
553*71db0c75SAndroid Build Coastguard Worker         T(-2.0), func(T(-2.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U),
554*71db0c75SAndroid Build Coastguard Worker         FE_INEXACT);
555*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
556*71db0c75SAndroid Build Coastguard Worker         T(3.0), func(T(2.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INEXACT);
557*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
558*71db0c75SAndroid Build Coastguard Worker         T(-3.0), func(T(-2.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U),
559*71db0c75SAndroid Build Coastguard Worker         FE_INEXACT);
560*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
561*71db0c75SAndroid Build Coastguard Worker         T(5.0), func(T(5.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U), FE_INEXACT);
562*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
563*71db0c75SAndroid Build Coastguard Worker         T(-5.0), func(T(-5.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U),
564*71db0c75SAndroid Build Coastguard Worker         FE_INEXACT);
565*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
566*71db0c75SAndroid Build Coastguard Worker         T(6.0), func(T(5.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U), FE_INEXACT);
567*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
568*71db0c75SAndroid Build Coastguard Worker         T(-6.0), func(T(-5.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U),
569*71db0c75SAndroid Build Coastguard Worker         FE_INEXACT);
570*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
571*71db0c75SAndroid Build Coastguard Worker         T(6.0), func(T(5.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U), FE_INEXACT);
572*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
573*71db0c75SAndroid Build Coastguard Worker         T(-6.0), func(T(-5.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U),
574*71db0c75SAndroid Build Coastguard Worker         FE_INEXACT);
575*71db0c75SAndroid Build Coastguard Worker   }
576*71db0c75SAndroid Build Coastguard Worker 
testFractionsToNearestFallbackOutsideRange(FromfpxFunc func)577*71db0c75SAndroid Build Coastguard Worker   void testFractionsToNearestFallbackOutsideRange(FromfpxFunc func) {
578*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
579*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(0.715), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID);
580*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
581*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(1.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID);
582*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
583*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(1.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INVALID);
584*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
585*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-1.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID);
586*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
587*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(1.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INVALID);
588*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
589*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-1.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID);
590*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
591*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(10.32), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U), FE_INVALID);
592*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
593*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-10.32), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U), FE_INVALID);
594*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
595*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U), FE_INVALID);
596*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
597*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U), FE_INVALID);
598*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
599*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U), FE_INVALID);
600*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
601*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U),
602*71db0c75SAndroid Build Coastguard Worker         FE_INVALID);
603*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
604*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U), FE_INVALID);
605*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
606*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U),
607*71db0c75SAndroid Build Coastguard Worker         FE_INVALID);
608*71db0c75SAndroid Build Coastguard Worker 
609*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
610*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(2.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INVALID);
611*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
612*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-2.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID);
613*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
614*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(2.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INVALID);
615*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
616*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-2.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID);
617*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
618*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(2.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INVALID);
619*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
620*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-2.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INVALID);
621*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
622*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(5.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INVALID);
623*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
624*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-5.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INVALID);
625*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
626*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(5.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INVALID);
627*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
628*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-5.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INVALID);
629*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
630*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(5.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INVALID);
631*71db0c75SAndroid Build Coastguard Worker     EXPECT_FP_EQ_WITH_EXCEPTION(
632*71db0c75SAndroid Build Coastguard Worker         aNaN, func(T(-5.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INVALID);
633*71db0c75SAndroid Build Coastguard Worker   }
634*71db0c75SAndroid Build Coastguard Worker };
635*71db0c75SAndroid Build Coastguard Worker 
636*71db0c75SAndroid Build Coastguard Worker #define LIST_FROMFPX_TESTS(T, func)                                            \
637*71db0c75SAndroid Build Coastguard Worker   using LlvmLibcFromfpxTest = FromfpxTestTemplate<T>;                          \
638*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcFromfpxTest, SpecialNumbersNonzeroWidth) {                    \
639*71db0c75SAndroid Build Coastguard Worker     testSpecialNumbersNonzeroWidth(&func);                                     \
640*71db0c75SAndroid Build Coastguard Worker   }                                                                            \
641*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcFromfpxTest, SpecialNumbersZeroWidth) {                       \
642*71db0c75SAndroid Build Coastguard Worker     testSpecialNumbersZeroWidth(&func);                                        \
643*71db0c75SAndroid Build Coastguard Worker   }                                                                            \
644*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcFromfpxTest, RoundedNumbersWithinRange) {                     \
645*71db0c75SAndroid Build Coastguard Worker     testRoundedNumbersWithinRange(&func);                                      \
646*71db0c75SAndroid Build Coastguard Worker   }                                                                            \
647*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcFromfpxTest, RoundedNumbersOutsideRange) {                    \
648*71db0c75SAndroid Build Coastguard Worker     testRoundedNumbersOutsideRange(&func);                                     \
649*71db0c75SAndroid Build Coastguard Worker   }                                                                            \
650*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcFromfpxTest, FractionsUpwardWithinRange) {                    \
651*71db0c75SAndroid Build Coastguard Worker     testFractionsUpwardWithinRange(&func);                                     \
652*71db0c75SAndroid Build Coastguard Worker   }                                                                            \
653*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcFromfpxTest, FractionsUpwardOutsideRange) {                   \
654*71db0c75SAndroid Build Coastguard Worker     testFractionsUpwardOutsideRange(&func);                                    \
655*71db0c75SAndroid Build Coastguard Worker   }                                                                            \
656*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcFromfpxTest, FractionsDownwardWithinRange) {                  \
657*71db0c75SAndroid Build Coastguard Worker     testFractionsDownwardWithinRange(&func);                                   \
658*71db0c75SAndroid Build Coastguard Worker   }                                                                            \
659*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcFromfpxTest, FractionsDownwardOutsideRange) {                 \
660*71db0c75SAndroid Build Coastguard Worker     testFractionsDownwardOutsideRange(&func);                                  \
661*71db0c75SAndroid Build Coastguard Worker   }                                                                            \
662*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcFromfpxTest, FractionsTowardZeroWithinRange) {                \
663*71db0c75SAndroid Build Coastguard Worker     testFractionsTowardZeroWithinRange(&func);                                 \
664*71db0c75SAndroid Build Coastguard Worker   }                                                                            \
665*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcFromfpxTest, FractionsTowardZeroOutsideRange) {               \
666*71db0c75SAndroid Build Coastguard Worker     testFractionsTowardZeroOutsideRange(&func);                                \
667*71db0c75SAndroid Build Coastguard Worker   }                                                                            \
668*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcFromfpxTest, FractionsToNearestFromZeroWithinRange) {         \
669*71db0c75SAndroid Build Coastguard Worker     testFractionsToNearestFromZeroWithinRange(&func);                          \
670*71db0c75SAndroid Build Coastguard Worker   }                                                                            \
671*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcFromfpxTest, FractionsToNearestFromZeroOutsideRange) {        \
672*71db0c75SAndroid Build Coastguard Worker     testFractionsToNearestFromZeroOutsideRange(&func);                         \
673*71db0c75SAndroid Build Coastguard Worker   }                                                                            \
674*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcFromfpxTest, FractionsToNearestWithinRange) {                 \
675*71db0c75SAndroid Build Coastguard Worker     testFractionsToNearestWithinRange(&func);                                  \
676*71db0c75SAndroid Build Coastguard Worker   }                                                                            \
677*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcFromfpxTest, FractionsToNearestOutsideRange) {                \
678*71db0c75SAndroid Build Coastguard Worker     testFractionsToNearestOutsideRange(&func);                                 \
679*71db0c75SAndroid Build Coastguard Worker   }                                                                            \
680*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcFromfpxTest, FractionsToNearestFallbackWithinRange) {         \
681*71db0c75SAndroid Build Coastguard Worker     testFractionsToNearestFallbackWithinRange(&func);                          \
682*71db0c75SAndroid Build Coastguard Worker   }                                                                            \
683*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcFromfpxTest, FractionsToNearestFallbackOutsideRange) {        \
684*71db0c75SAndroid Build Coastguard Worker     testFractionsToNearestFallbackOutsideRange(&func);                         \
685*71db0c75SAndroid Build Coastguard Worker   }
686*71db0c75SAndroid Build Coastguard Worker 
687*71db0c75SAndroid Build Coastguard Worker #endif // LIBC_TEST_SRC_MATH_SMOKE_FROMFPXTEST_H
688