xref: /llvm-project/libc/test/src/math/smoke/UfromfpxTest.h (revision 6b5ae148e51507c48dc20a2cd0daf1ee018141c2)
1b2822597SOverMighty //===-- Utility class to test different flavors of ufromfpx -----*- C++ -*-===//
2b2822597SOverMighty //
3b2822597SOverMighty // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4b2822597SOverMighty // See https://llvm.org/LICENSE.txt for license information.
5b2822597SOverMighty // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6b2822597SOverMighty //
7b2822597SOverMighty //===----------------------------------------------------------------------===//
8b2822597SOverMighty 
9b2822597SOverMighty #ifndef LIBC_TEST_SRC_MATH_SMOKE_UFROMFPXTEST_H
10b2822597SOverMighty #define LIBC_TEST_SRC_MATH_SMOKE_UFROMFPXTEST_H
11b2822597SOverMighty 
12837dab96SRoland McGrath #include "test/UnitTest/FEnvSafeTest.h"
13b2822597SOverMighty #include "test/UnitTest/FPMatcher.h"
14b2822597SOverMighty #include "test/UnitTest/Test.h"
15b2822597SOverMighty 
16b2822597SOverMighty template <typename T>
17837dab96SRoland McGrath class UfromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest {
18b2822597SOverMighty 
19b2822597SOverMighty   DECLARE_SPECIAL_CONSTANTS(T)
20b2822597SOverMighty 
21b2822597SOverMighty public:
22b2822597SOverMighty   typedef T (*UfromfpxFunc)(T, int, unsigned int);
23b2822597SOverMighty 
testSpecialNumbersNonzeroWidth(UfromfpxFunc func)24b2822597SOverMighty   void testSpecialNumbersNonzeroWidth(UfromfpxFunc func) {
25b2822597SOverMighty     for (int rnd : MATH_ROUNDING_DIRECTIONS_INCLUDING_UNKNOWN) {
26b2822597SOverMighty       EXPECT_FP_EQ(zero, func(zero, rnd, 32U));
27b2822597SOverMighty       EXPECT_FP_EQ(neg_zero, func(neg_zero, rnd, 32U));
28b2822597SOverMighty 
296aee1f9dSOverMighty       EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(inf, rnd, 32U), FE_INVALID);
306aee1f9dSOverMighty       EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(neg_inf, rnd, 32U), FE_INVALID);
31b2822597SOverMighty 
326aee1f9dSOverMighty       EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(aNaN, rnd, 32U), FE_INVALID);
33b2822597SOverMighty     }
34b2822597SOverMighty   }
35b2822597SOverMighty 
testSpecialNumbersZeroWidth(UfromfpxFunc func)36b2822597SOverMighty   void testSpecialNumbersZeroWidth(UfromfpxFunc func) {
37b2822597SOverMighty     for (int rnd : MATH_ROUNDING_DIRECTIONS_INCLUDING_UNKNOWN) {
386aee1f9dSOverMighty       EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(zero, rnd, 0U), FE_INVALID);
396aee1f9dSOverMighty       EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(neg_zero, rnd, 0U), FE_INVALID);
40b2822597SOverMighty 
416aee1f9dSOverMighty       EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(inf, rnd, 0U), FE_INVALID);
426aee1f9dSOverMighty       EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(neg_inf, rnd, 0U), FE_INVALID);
43b2822597SOverMighty 
446aee1f9dSOverMighty       EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(aNaN, rnd, 0U), FE_INVALID);
45b2822597SOverMighty     }
46b2822597SOverMighty   }
47b2822597SOverMighty 
testRoundedNumbersWithinRange(UfromfpxFunc func)48b2822597SOverMighty   void testRoundedNumbersWithinRange(UfromfpxFunc func) {
49b2822597SOverMighty     for (int rnd : MATH_ROUNDING_DIRECTIONS_INCLUDING_UNKNOWN) {
50b2822597SOverMighty       EXPECT_FP_EQ(T(1.0), func(T(1.0), rnd, 1U));
51b2822597SOverMighty       EXPECT_FP_EQ(T(10.0), func(T(10.0), rnd, 4U));
52b2822597SOverMighty       EXPECT_FP_EQ(T(1234.0), func(T(1234.0), rnd, 11U));
536aee1f9dSOverMighty       EXPECT_FP_EQ(T(1234.0), func(T(1234.0), rnd, 64U));
54b2822597SOverMighty     }
55b2822597SOverMighty   }
56b2822597SOverMighty 
testRoundedNumbersOutsideRange(UfromfpxFunc func)57b2822597SOverMighty   void testRoundedNumbersOutsideRange(UfromfpxFunc func) {
58b2822597SOverMighty     for (int rnd : MATH_ROUNDING_DIRECTIONS_INCLUDING_UNKNOWN) {
596aee1f9dSOverMighty       EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.0), rnd, 32U), FE_INVALID);
606aee1f9dSOverMighty       EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.0), rnd, 3U), FE_INVALID);
616aee1f9dSOverMighty       EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.0), rnd, 32U), FE_INVALID);
626aee1f9dSOverMighty       EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1234.0), rnd, 10U), FE_INVALID);
636aee1f9dSOverMighty       EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1234.0), rnd, 32U), FE_INVALID);
64b2822597SOverMighty     }
65b2822597SOverMighty   }
66b2822597SOverMighty 
testFractionsUpwardWithinRange(UfromfpxFunc func)67b2822597SOverMighty   void testFractionsUpwardWithinRange(UfromfpxFunc func) {
68b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(0.5), FP_INT_UPWARD, 1U),
69b2822597SOverMighty                                 FE_INEXACT);
70b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.5), FP_INT_UPWARD, 1U),
71b2822597SOverMighty                                 FE_INEXACT);
72b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(0.115), FP_INT_UPWARD, 1U),
73b2822597SOverMighty                                 FE_INEXACT);
74b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.115), FP_INT_UPWARD, 1U),
75b2822597SOverMighty                                 FE_INEXACT);
76b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(0.715), FP_INT_UPWARD, 1U),
77b2822597SOverMighty                                 FE_INEXACT);
78b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.715), FP_INT_UPWARD, 1U),
79b2822597SOverMighty                                 FE_INEXACT);
80b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(1.3), FP_INT_UPWARD, 2U),
81b2822597SOverMighty                                 FE_INEXACT);
82b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(1.5), FP_INT_UPWARD, 2U),
83b2822597SOverMighty                                 FE_INEXACT);
84b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(1.75), FP_INT_UPWARD, 2U),
85b2822597SOverMighty                                 FE_INEXACT);
86b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(11.0), func(T(10.32), FP_INT_UPWARD, 4U),
87b2822597SOverMighty                                 FE_INEXACT);
88b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(11.0), func(T(10.65), FP_INT_UPWARD, 4U),
89b2822597SOverMighty                                 FE_INEXACT);
90*6b5ae148SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(124.0), func(T(123.38), FP_INT_UPWARD, 7U),
91b2822597SOverMighty                                 FE_INEXACT);
92*6b5ae148SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(124.0), func(T(123.96), FP_INT_UPWARD, 7U),
93b2822597SOverMighty                                 FE_INEXACT);
94b2822597SOverMighty   }
95b2822597SOverMighty 
testFractionsUpwardOutsideRange(UfromfpxFunc func)96b2822597SOverMighty   void testFractionsUpwardOutsideRange(UfromfpxFunc func) {
976aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.3), FP_INT_UPWARD, 1U),
986aee1f9dSOverMighty                                 FE_INVALID);
996aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.3), FP_INT_UPWARD, 32U),
1006aee1f9dSOverMighty                                 FE_INVALID);
1016aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.5), FP_INT_UPWARD, 1U),
1026aee1f9dSOverMighty                                 FE_INVALID);
1036aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.5), FP_INT_UPWARD, 32U),
1046aee1f9dSOverMighty                                 FE_INVALID);
1056aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.75), FP_INT_UPWARD, 1U),
1066aee1f9dSOverMighty                                 FE_INVALID);
1076aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.75), FP_INT_UPWARD, 32U),
1086aee1f9dSOverMighty                                 FE_INVALID);
1096aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.32), FP_INT_UPWARD, 3U),
1106aee1f9dSOverMighty                                 FE_INVALID);
1116aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.32), FP_INT_UPWARD, 32U),
1126aee1f9dSOverMighty                                 FE_INVALID);
1136aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.65), FP_INT_UPWARD, 3U),
1146aee1f9dSOverMighty                                 FE_INVALID);
1156aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_UPWARD, 3U),
1166aee1f9dSOverMighty                                 FE_INVALID);
117*6b5ae148SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_UPWARD, 6U),
1186aee1f9dSOverMighty                                 FE_INVALID);
119*6b5ae148SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_UPWARD, 32U),
1206aee1f9dSOverMighty                                 FE_INVALID);
121*6b5ae148SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_UPWARD, 6U),
1226aee1f9dSOverMighty                                 FE_INVALID);
123*6b5ae148SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_UPWARD, 32U),
1246aee1f9dSOverMighty                                 FE_INVALID);
125b2822597SOverMighty   }
126b2822597SOverMighty 
testFractionsDownwardWithinRange(UfromfpxFunc func)127b2822597SOverMighty   void testFractionsDownwardWithinRange(UfromfpxFunc func) {
128b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.5), FP_INT_DOWNWARD, 1U),
129b2822597SOverMighty                                 FE_INEXACT);
130b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.115), FP_INT_DOWNWARD, 1U),
131b2822597SOverMighty                                 FE_INEXACT);
132b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.715), FP_INT_DOWNWARD, 1U),
133b2822597SOverMighty                                 FE_INEXACT);
134b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(1.3), FP_INT_DOWNWARD, 1U),
135b2822597SOverMighty                                 FE_INEXACT);
136b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(1.5), FP_INT_DOWNWARD, 1U),
137b2822597SOverMighty                                 FE_INEXACT);
138b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(1.75), FP_INT_DOWNWARD, 1U),
139b2822597SOverMighty                                 FE_INEXACT);
140b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(10.0), func(T(10.32), FP_INT_DOWNWARD, 4U),
141b2822597SOverMighty                                 FE_INEXACT);
142b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(10.0), func(T(10.65), FP_INT_DOWNWARD, 4U),
143b2822597SOverMighty                                 FE_INEXACT);
144*6b5ae148SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(123.0), func(T(123.38), FP_INT_DOWNWARD, 7U),
145*6b5ae148SOverMighty                                 FE_INEXACT);
146*6b5ae148SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(123.0), func(T(123.96), FP_INT_DOWNWARD, 7U),
147*6b5ae148SOverMighty                                 FE_INEXACT);
148b2822597SOverMighty   }
149b2822597SOverMighty 
testFractionsDownwardOutsideRange(UfromfpxFunc func)150b2822597SOverMighty   void testFractionsDownwardOutsideRange(UfromfpxFunc func) {
1516aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-0.5), FP_INT_DOWNWARD, 32U),
1526aee1f9dSOverMighty                                 FE_INVALID);
1536aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-0.115), FP_INT_DOWNWARD, 32U),
1546aee1f9dSOverMighty                                 FE_INVALID);
1556aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-0.715), FP_INT_DOWNWARD, 32U),
1566aee1f9dSOverMighty                                 FE_INVALID);
1576aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.3), FP_INT_DOWNWARD, 32U),
1586aee1f9dSOverMighty                                 FE_INVALID);
1596aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.5), FP_INT_DOWNWARD, 32U),
1606aee1f9dSOverMighty                                 FE_INVALID);
1616aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.75), FP_INT_DOWNWARD, 32U),
1626aee1f9dSOverMighty                                 FE_INVALID);
1636aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.32), FP_INT_DOWNWARD, 3U),
1646aee1f9dSOverMighty                                 FE_INVALID);
1656aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.32), FP_INT_DOWNWARD, 32U),
1666aee1f9dSOverMighty                                 FE_INVALID);
1676aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.65), FP_INT_DOWNWARD, 3U),
1686aee1f9dSOverMighty                                 FE_INVALID);
1696aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_DOWNWARD, 32U),
1706aee1f9dSOverMighty                                 FE_INVALID);
171*6b5ae148SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_DOWNWARD, 6U),
1726aee1f9dSOverMighty                                 FE_INVALID);
173*6b5ae148SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_DOWNWARD, 32U),
1746aee1f9dSOverMighty                                 FE_INVALID);
175*6b5ae148SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_DOWNWARD, 6U),
1766aee1f9dSOverMighty                                 FE_INVALID);
177*6b5ae148SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_DOWNWARD, 32U),
1786aee1f9dSOverMighty                                 FE_INVALID);
179b2822597SOverMighty   }
180b2822597SOverMighty 
testFractionsTowardZeroWithinRange(UfromfpxFunc func)181b2822597SOverMighty   void testFractionsTowardZeroWithinRange(UfromfpxFunc func) {
182b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.5), FP_INT_TOWARDZERO, 1U),
183b2822597SOverMighty                                 FE_INEXACT);
184b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.5), FP_INT_TOWARDZERO, 1U),
185b2822597SOverMighty                                 FE_INEXACT);
186b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.115), FP_INT_TOWARDZERO, 1U),
187b2822597SOverMighty                                 FE_INEXACT);
188b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.115), FP_INT_TOWARDZERO, 1U),
189b2822597SOverMighty                                 FE_INEXACT);
190b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.715), FP_INT_TOWARDZERO, 1U),
191b2822597SOverMighty                                 FE_INEXACT);
192b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.715), FP_INT_TOWARDZERO, 1U),
193b2822597SOverMighty                                 FE_INEXACT);
194b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(1.3), FP_INT_TOWARDZERO, 1U),
195b2822597SOverMighty                                 FE_INEXACT);
196b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(1.5), FP_INT_TOWARDZERO, 1U),
197b2822597SOverMighty                                 FE_INEXACT);
198b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(1.75), FP_INT_TOWARDZERO, 1U),
199b2822597SOverMighty                                 FE_INEXACT);
200b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(10.0), func(T(10.32), FP_INT_TOWARDZERO, 4U),
201b2822597SOverMighty                                 FE_INEXACT);
202b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(10.0), func(T(10.65), FP_INT_TOWARDZERO, 4U),
203b2822597SOverMighty                                 FE_INEXACT);
204b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
205*6b5ae148SOverMighty         T(123.0), func(T(123.38), FP_INT_TOWARDZERO, 7U), FE_INEXACT);
206b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
207*6b5ae148SOverMighty         T(123.0), func(T(123.96), FP_INT_TOWARDZERO, 7U), FE_INEXACT);
208b2822597SOverMighty   }
209b2822597SOverMighty 
testFractionsTowardZeroOutsideRange(UfromfpxFunc func)210b2822597SOverMighty   void testFractionsTowardZeroOutsideRange(UfromfpxFunc func) {
2116aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.3), FP_INT_TOWARDZERO, 32U),
2126aee1f9dSOverMighty                                 FE_INVALID);
2136aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.5), FP_INT_TOWARDZERO, 32U),
2146aee1f9dSOverMighty                                 FE_INVALID);
2156aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.75), FP_INT_TOWARDZERO, 32U),
2166aee1f9dSOverMighty                                 FE_INVALID);
2176aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.32), FP_INT_TOWARDZERO, 3U),
2186aee1f9dSOverMighty                                 FE_INVALID);
2196aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.32), FP_INT_TOWARDZERO, 32U),
2206aee1f9dSOverMighty                                 FE_INVALID);
2216aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.65), FP_INT_TOWARDZERO, 3U),
2226aee1f9dSOverMighty                                 FE_INVALID);
2236aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_TOWARDZERO, 32U),
2246aee1f9dSOverMighty                                 FE_INVALID);
225*6b5ae148SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_TOWARDZERO, 6U),
2266aee1f9dSOverMighty                                 FE_INVALID);
227*6b5ae148SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_TOWARDZERO, 32U),
2286aee1f9dSOverMighty                                 FE_INVALID);
229*6b5ae148SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_TOWARDZERO, 6U),
2306aee1f9dSOverMighty                                 FE_INVALID);
231*6b5ae148SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_TOWARDZERO, 32U),
2326aee1f9dSOverMighty                                 FE_INVALID);
233b2822597SOverMighty   }
234b2822597SOverMighty 
testFractionsToNearestFromZeroWithinRange(UfromfpxFunc func)235b2822597SOverMighty   void testFractionsToNearestFromZeroWithinRange(UfromfpxFunc func) {
236b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
237b2822597SOverMighty         T(1.0), func(T(0.5), FP_INT_TONEARESTFROMZERO, 1U), FE_INEXACT);
238b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
239b2822597SOverMighty         T(0.0), func(T(0.115), FP_INT_TONEARESTFROMZERO, 1U), FE_INEXACT);
240b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
241b2822597SOverMighty         T(-0.0), func(T(-0.115), FP_INT_TONEARESTFROMZERO, 1U), FE_INEXACT);
242b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
243b2822597SOverMighty         T(1.0), func(T(0.715), FP_INT_TONEARESTFROMZERO, 1U), FE_INEXACT);
244b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
245b2822597SOverMighty         T(1.0), func(T(1.3), FP_INT_TONEARESTFROMZERO, 1U), FE_INEXACT);
246b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
247b2822597SOverMighty         T(2.0), func(T(1.5), FP_INT_TONEARESTFROMZERO, 2U), FE_INEXACT);
248b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
249b2822597SOverMighty         T(2.0), func(T(1.75), FP_INT_TONEARESTFROMZERO, 2U), FE_INEXACT);
250b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
251b2822597SOverMighty         T(10.0), func(T(10.32), FP_INT_TONEARESTFROMZERO, 4U), FE_INEXACT);
252b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
253b2822597SOverMighty         T(11.0), func(T(10.65), FP_INT_TONEARESTFROMZERO, 4U), FE_INEXACT);
254b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
255*6b5ae148SOverMighty         T(123.0), func(T(123.38), FP_INT_TONEARESTFROMZERO, 7U), FE_INEXACT);
256b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
257*6b5ae148SOverMighty         T(124.0), func(T(123.96), FP_INT_TONEARESTFROMZERO, 7U), FE_INEXACT);
258b2822597SOverMighty   }
259b2822597SOverMighty 
testFractionsToNearestFromZeroOutsideRange(UfromfpxFunc func)260b2822597SOverMighty   void testFractionsToNearestFromZeroOutsideRange(UfromfpxFunc func) {
2616aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
2626aee1f9dSOverMighty         aNaN, func(T(-0.5), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID);
2636aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
2646aee1f9dSOverMighty         aNaN, func(T(-0.715), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID);
2656aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
2666aee1f9dSOverMighty         aNaN, func(T(-1.3), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID);
2676aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
2686aee1f9dSOverMighty         aNaN, func(T(1.5), FP_INT_TONEARESTFROMZERO, 1U), FE_INVALID);
2696aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
2706aee1f9dSOverMighty         aNaN, func(T(-1.5), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID);
2716aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
2726aee1f9dSOverMighty         aNaN, func(T(1.75), FP_INT_TONEARESTFROMZERO, 1U), FE_INVALID);
2736aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
2746aee1f9dSOverMighty         aNaN, func(T(-1.75), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID);
2756aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
2766aee1f9dSOverMighty         aNaN, func(T(10.32), FP_INT_TONEARESTFROMZERO, 3U), FE_INVALID);
2776aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
2786aee1f9dSOverMighty         aNaN, func(T(-10.32), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID);
2796aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
2806aee1f9dSOverMighty         aNaN, func(T(10.65), FP_INT_TONEARESTFROMZERO, 3U), FE_INVALID);
2816aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
2826aee1f9dSOverMighty         aNaN, func(T(-10.65), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID);
2836aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
284*6b5ae148SOverMighty         aNaN, func(T(123.38), FP_INT_TONEARESTFROMZERO, 6U), FE_INVALID);
2856aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
286*6b5ae148SOverMighty         aNaN, func(T(-123.38), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID);
2876aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
288*6b5ae148SOverMighty         aNaN, func(T(123.96), FP_INT_TONEARESTFROMZERO, 6U), FE_INVALID);
2896aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
290*6b5ae148SOverMighty         aNaN, func(T(-123.96), FP_INT_TONEARESTFROMZERO, 32U), FE_INVALID);
291b2822597SOverMighty   }
292b2822597SOverMighty 
testFractionsToNearestWithinRange(UfromfpxFunc func)293b2822597SOverMighty   void testFractionsToNearestWithinRange(UfromfpxFunc func) {
294b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.5), FP_INT_TONEAREST, 1U),
295b2822597SOverMighty                                 FE_INEXACT);
296b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.5), FP_INT_TONEAREST, 1U),
297b2822597SOverMighty                                 FE_INEXACT);
298b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(0.0), func(T(0.115), FP_INT_TONEAREST, 1U),
299b2822597SOverMighty                                 FE_INEXACT);
300b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(-0.0), func(T(-0.115), FP_INT_TONEAREST, 1U),
301b2822597SOverMighty                                 FE_INEXACT);
302b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(0.715), FP_INT_TONEAREST, 1U),
303b2822597SOverMighty                                 FE_INEXACT);
304b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(1.0), func(T(1.3), FP_INT_TONEAREST, 1U),
305b2822597SOverMighty                                 FE_INEXACT);
306b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(1.5), FP_INT_TONEAREST, 2U),
307b2822597SOverMighty                                 FE_INEXACT);
308b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(1.75), FP_INT_TONEAREST, 2U),
309b2822597SOverMighty                                 FE_INEXACT);
310b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(10.0), func(T(10.32), FP_INT_TONEAREST, 4U),
311b2822597SOverMighty                                 FE_INEXACT);
312b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(11.0), func(T(10.65), FP_INT_TONEAREST, 4U),
313b2822597SOverMighty                                 FE_INEXACT);
314*6b5ae148SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(123.0), func(T(123.38), FP_INT_TONEAREST, 7U),
315*6b5ae148SOverMighty                                 FE_INEXACT);
316*6b5ae148SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(124.0), func(T(123.96), FP_INT_TONEAREST, 7U),
317*6b5ae148SOverMighty                                 FE_INEXACT);
318b2822597SOverMighty 
319b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(2.3), FP_INT_TONEAREST, 2U),
320b2822597SOverMighty                                 FE_INEXACT);
321b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(2.0), func(T(2.5), FP_INT_TONEAREST, 2U),
322b2822597SOverMighty                                 FE_INEXACT);
323b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(3.0), func(T(2.75), FP_INT_TONEAREST, 2U),
324b2822597SOverMighty                                 FE_INEXACT);
325b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(5.0), func(T(5.3), FP_INT_TONEAREST, 3U),
326b2822597SOverMighty                                 FE_INEXACT);
327b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(6.0), func(T(5.5), FP_INT_TONEAREST, 3U),
328b2822597SOverMighty                                 FE_INEXACT);
329b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(T(6.0), func(T(5.75), FP_INT_TONEAREST, 3U),
330b2822597SOverMighty                                 FE_INEXACT);
331b2822597SOverMighty   }
332b2822597SOverMighty 
testFractionsToNearestOutsideRange(UfromfpxFunc func)333b2822597SOverMighty   void testFractionsToNearestOutsideRange(UfromfpxFunc func) {
3346aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-0.715), FP_INT_TONEAREST, 32U),
3356aee1f9dSOverMighty                                 FE_INVALID);
3366aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.3), FP_INT_TONEAREST, 32U),
3376aee1f9dSOverMighty                                 FE_INVALID);
3386aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.5), FP_INT_TONEAREST, 1U),
3396aee1f9dSOverMighty                                 FE_INVALID);
3406aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.5), FP_INT_TONEAREST, 32U),
3416aee1f9dSOverMighty                                 FE_INVALID);
3426aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(1.75), FP_INT_TONEAREST, 1U),
3436aee1f9dSOverMighty                                 FE_INVALID);
3446aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-1.75), FP_INT_TONEAREST, 32U),
3456aee1f9dSOverMighty                                 FE_INVALID);
3466aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.32), FP_INT_TONEAREST, 3U),
3476aee1f9dSOverMighty                                 FE_INVALID);
3486aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.32), FP_INT_TONEAREST, 32U),
3496aee1f9dSOverMighty                                 FE_INVALID);
3506aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(10.65), FP_INT_TONEAREST, 3U),
3516aee1f9dSOverMighty                                 FE_INVALID);
3526aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-10.65), FP_INT_TONEAREST, 32U),
3536aee1f9dSOverMighty                                 FE_INVALID);
354*6b5ae148SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.38), FP_INT_TONEAREST, 6U),
3556aee1f9dSOverMighty                                 FE_INVALID);
356*6b5ae148SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.38), FP_INT_TONEAREST, 32U),
3576aee1f9dSOverMighty                                 FE_INVALID);
358*6b5ae148SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(123.96), FP_INT_TONEAREST, 6U),
3596aee1f9dSOverMighty                                 FE_INVALID);
360*6b5ae148SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-123.96), FP_INT_TONEAREST, 32U),
3616aee1f9dSOverMighty                                 FE_INVALID);
362b2822597SOverMighty 
3636aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(2.3), FP_INT_TONEAREST, 1U),
3646aee1f9dSOverMighty                                 FE_INVALID);
3656aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-2.3), FP_INT_TONEAREST, 32U),
3666aee1f9dSOverMighty                                 FE_INVALID);
3676aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(2.5), FP_INT_TONEAREST, 1U),
3686aee1f9dSOverMighty                                 FE_INVALID);
3696aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-2.5), FP_INT_TONEAREST, 32U),
3706aee1f9dSOverMighty                                 FE_INVALID);
3716aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(2.75), FP_INT_TONEAREST, 1U),
3726aee1f9dSOverMighty                                 FE_INVALID);
3736aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-2.75), FP_INT_TONEAREST, 32U),
3746aee1f9dSOverMighty                                 FE_INVALID);
3756aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(5.3), FP_INT_TONEAREST, 2U),
3766aee1f9dSOverMighty                                 FE_INVALID);
3776aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-5.3), FP_INT_TONEAREST, 32U),
3786aee1f9dSOverMighty                                 FE_INVALID);
3796aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(5.5), FP_INT_TONEAREST, 2U),
3806aee1f9dSOverMighty                                 FE_INVALID);
3816aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-5.5), FP_INT_TONEAREST, 32U),
3826aee1f9dSOverMighty                                 FE_INVALID);
3836aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(5.75), FP_INT_TONEAREST, 2U),
3846aee1f9dSOverMighty                                 FE_INVALID);
3856aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, func(T(-5.75), FP_INT_TONEAREST, 32U),
3866aee1f9dSOverMighty                                 FE_INVALID);
387b2822597SOverMighty   }
388b2822597SOverMighty 
testFractionsToNearestFallbackWithinRange(UfromfpxFunc func)389b2822597SOverMighty   void testFractionsToNearestFallbackWithinRange(UfromfpxFunc func) {
390b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
391b2822597SOverMighty         T(0.0), func(T(0.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INEXACT);
392b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
393b2822597SOverMighty         T(-0.0), func(T(-0.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U),
394b2822597SOverMighty         FE_INEXACT);
395b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
396b2822597SOverMighty         T(0.0), func(T(0.115), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U),
397b2822597SOverMighty         FE_INEXACT);
398b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
399b2822597SOverMighty         T(-0.0), func(T(-0.115), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U),
400b2822597SOverMighty         FE_INEXACT);
401b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
402b2822597SOverMighty         T(1.0), func(T(0.715), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U),
403b2822597SOverMighty         FE_INEXACT);
404b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
405b2822597SOverMighty         T(1.0), func(T(1.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INEXACT);
406b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
407b2822597SOverMighty         T(2.0), func(T(1.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INEXACT);
408b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
409b2822597SOverMighty         T(2.0), func(T(1.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INEXACT);
410b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
411b2822597SOverMighty         T(10.0), func(T(10.32), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U),
412b2822597SOverMighty         FE_INEXACT);
413b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
414b2822597SOverMighty         T(11.0), func(T(10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 4U),
415b2822597SOverMighty         FE_INEXACT);
416b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
417*6b5ae148SOverMighty         T(123.0), func(T(123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U),
418b2822597SOverMighty         FE_INEXACT);
419b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
420*6b5ae148SOverMighty         T(124.0), func(T(123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 7U),
421b2822597SOverMighty         FE_INEXACT);
422b2822597SOverMighty 
423b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
424b2822597SOverMighty         T(2.0), func(T(2.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INEXACT);
425b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
426b2822597SOverMighty         T(2.0), func(T(2.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INEXACT);
427b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
428b2822597SOverMighty         T(3.0), func(T(2.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INEXACT);
429b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
430b2822597SOverMighty         T(5.0), func(T(5.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INEXACT);
431b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
432b2822597SOverMighty         T(6.0), func(T(5.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INEXACT);
433b2822597SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
434b2822597SOverMighty         T(6.0), func(T(5.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INEXACT);
435b2822597SOverMighty   }
436b2822597SOverMighty 
testFractionsToNearestFallbackOutsideRange(UfromfpxFunc func)437b2822597SOverMighty   void testFractionsToNearestFallbackOutsideRange(UfromfpxFunc func) {
4386aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
4396aee1f9dSOverMighty         aNaN, func(T(-0.715), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U),
4406aee1f9dSOverMighty         FE_INVALID);
4416aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
4426aee1f9dSOverMighty         aNaN, func(T(-1.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), FE_INVALID);
4436aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
4446aee1f9dSOverMighty         aNaN, func(T(1.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID);
4456aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
4466aee1f9dSOverMighty         aNaN, func(T(-1.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), FE_INVALID);
4476aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
4486aee1f9dSOverMighty         aNaN, func(T(1.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID);
4496aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
4506aee1f9dSOverMighty         aNaN, func(T(-1.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), FE_INVALID);
4516aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
4526aee1f9dSOverMighty         aNaN, func(T(10.32), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INVALID);
4536aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
4546aee1f9dSOverMighty         aNaN, func(T(-10.32), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U),
4556aee1f9dSOverMighty         FE_INVALID);
4566aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
4576aee1f9dSOverMighty         aNaN, func(T(10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 3U), FE_INVALID);
4586aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
4596aee1f9dSOverMighty         aNaN, func(T(-10.65), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U),
4606aee1f9dSOverMighty         FE_INVALID);
4616aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
462*6b5ae148SOverMighty         aNaN, func(T(123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 6U), FE_INVALID);
463*6b5ae148SOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
464*6b5ae148SOverMighty         aNaN, func(T(-123.38), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U),
4656aee1f9dSOverMighty         FE_INVALID);
4666aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
467*6b5ae148SOverMighty         aNaN, func(T(123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 6U), FE_INVALID);
4686aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
469*6b5ae148SOverMighty         aNaN, func(T(-123.96), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U),
4706aee1f9dSOverMighty         FE_INVALID);
471b2822597SOverMighty 
4726aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
4736aee1f9dSOverMighty         aNaN, func(T(2.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID);
4746aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
4756aee1f9dSOverMighty         aNaN, func(T(-2.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), FE_INVALID);
4766aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
4776aee1f9dSOverMighty         aNaN, func(T(2.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID);
4786aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
4796aee1f9dSOverMighty         aNaN, func(T(-2.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), FE_INVALID);
4806aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
4816aee1f9dSOverMighty         aNaN, func(T(2.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 1U), FE_INVALID);
4826aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
4836aee1f9dSOverMighty         aNaN, func(T(-2.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), FE_INVALID);
4846aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
4856aee1f9dSOverMighty         aNaN, func(T(5.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INVALID);
4866aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
4876aee1f9dSOverMighty         aNaN, func(T(-5.3), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), FE_INVALID);
4886aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
4896aee1f9dSOverMighty         aNaN, func(T(5.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INVALID);
4906aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
4916aee1f9dSOverMighty         aNaN, func(T(-5.5), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), FE_INVALID);
4926aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
4936aee1f9dSOverMighty         aNaN, func(T(5.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 2U), FE_INVALID);
4946aee1f9dSOverMighty     EXPECT_FP_EQ_WITH_EXCEPTION(
4956aee1f9dSOverMighty         aNaN, func(T(-5.75), UNKNOWN_MATH_ROUNDING_DIRECTION, 32U), FE_INVALID);
496b2822597SOverMighty   }
497b2822597SOverMighty };
498b2822597SOverMighty 
499b2822597SOverMighty #define LIST_UFROMFPX_TESTS(T, func)                                           \
500b2822597SOverMighty   using LlvmLibcUfromfpxTest = UfromfpxTestTemplate<T>;                        \
501b2822597SOverMighty   TEST_F(LlvmLibcUfromfpxTest, SpecialNumbersNonzeroWidth) {                   \
502b2822597SOverMighty     testSpecialNumbersNonzeroWidth(&func);                                     \
503b2822597SOverMighty   }                                                                            \
504b2822597SOverMighty   TEST_F(LlvmLibcUfromfpxTest, SpecialNumbersZeroWidth) {                      \
505b2822597SOverMighty     testSpecialNumbersZeroWidth(&func);                                        \
506b2822597SOverMighty   }                                                                            \
507b2822597SOverMighty   TEST_F(LlvmLibcUfromfpxTest, RoundedNumbersWithinRange) {                    \
508b2822597SOverMighty     testRoundedNumbersWithinRange(&func);                                      \
509b2822597SOverMighty   }                                                                            \
510b2822597SOverMighty   TEST_F(LlvmLibcUfromfpxTest, RoundedNumbersOutsideRange) {                   \
511b2822597SOverMighty     testRoundedNumbersOutsideRange(&func);                                     \
512b2822597SOverMighty   }                                                                            \
513b2822597SOverMighty   TEST_F(LlvmLibcUfromfpxTest, FractionsUpwardWithinRange) {                   \
514b2822597SOverMighty     testFractionsUpwardWithinRange(&func);                                     \
515b2822597SOverMighty   }                                                                            \
516b2822597SOverMighty   TEST_F(LlvmLibcUfromfpxTest, FractionsUpwardOutsideRange) {                  \
517b2822597SOverMighty     testFractionsUpwardOutsideRange(&func);                                    \
518b2822597SOverMighty   }                                                                            \
519b2822597SOverMighty   TEST_F(LlvmLibcUfromfpxTest, FractionsDownwardWithinRange) {                 \
520b2822597SOverMighty     testFractionsDownwardWithinRange(&func);                                   \
521b2822597SOverMighty   }                                                                            \
522b2822597SOverMighty   TEST_F(LlvmLibcUfromfpxTest, FractionsDownwardOutsideRange) {                \
523b2822597SOverMighty     testFractionsDownwardOutsideRange(&func);                                  \
524b2822597SOverMighty   }                                                                            \
525b2822597SOverMighty   TEST_F(LlvmLibcUfromfpxTest, FractionsTowardZeroWithinRange) {               \
526b2822597SOverMighty     testFractionsTowardZeroWithinRange(&func);                                 \
527b2822597SOverMighty   }                                                                            \
528b2822597SOverMighty   TEST_F(LlvmLibcUfromfpxTest, FractionsTowardZeroOutsideRange) {              \
529b2822597SOverMighty     testFractionsTowardZeroOutsideRange(&func);                                \
530b2822597SOverMighty   }                                                                            \
531b2822597SOverMighty   TEST_F(LlvmLibcUfromfpxTest, FractionsToNearestFromZeroWithinRange) {        \
532b2822597SOverMighty     testFractionsToNearestFromZeroWithinRange(&func);                          \
533b2822597SOverMighty   }                                                                            \
534b2822597SOverMighty   TEST_F(LlvmLibcUfromfpxTest, FractionsToNearestFromZeroOutsideRange) {       \
535b2822597SOverMighty     testFractionsToNearestFromZeroOutsideRange(&func);                         \
536b2822597SOverMighty   }                                                                            \
537b2822597SOverMighty   TEST_F(LlvmLibcUfromfpxTest, FractionsToNearestWithinRange) {                \
538b2822597SOverMighty     testFractionsToNearestWithinRange(&func);                                  \
539b2822597SOverMighty   }                                                                            \
540b2822597SOverMighty   TEST_F(LlvmLibcUfromfpxTest, FractionsToNearestOutsideRange) {               \
541b2822597SOverMighty     testFractionsToNearestOutsideRange(&func);                                 \
542b2822597SOverMighty   }                                                                            \
543b2822597SOverMighty   TEST_F(LlvmLibcUfromfpxTest, FractionsToNearestFallbackWithinRange) {        \
544b2822597SOverMighty     testFractionsToNearestFallbackWithinRange(&func);                          \
545b2822597SOverMighty   }                                                                            \
546b2822597SOverMighty   TEST_F(LlvmLibcUfromfpxTest, FractionsToNearestFallbackOutsideRange) {       \
547b2822597SOverMighty     testFractionsToNearestFallbackOutsideRange(&func);                         \
548b2822597SOverMighty   }
549b2822597SOverMighty 
550b2822597SOverMighty #endif // LIBC_TEST_SRC_MATH_SMOKE_UFROMFPXTEST_H
551