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

Provided by KDAB

Privacy Policy
Learn to use CMake with our Intro Training
Find out more

source code of libc/test/src/math/smoke/FromfpxTest.h