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 | |
16 | template <typename T> |
17 | class FromfpxTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest { |
18 | |
19 | DECLARE_SPECIAL_CONSTANTS(T) |
20 | |
21 | public: |
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 |
Definitions
- FromfpxTestTemplate
- testSpecialNumbersNonzeroWidth
- testSpecialNumbersZeroWidth
- testRoundedNumbersWithinRange
- testRoundedNumbersOutsideRange
- testFractionsUpwardWithinRange
- testFractionsUpwardOutsideRange
- testFractionsDownwardWithinRange
- testFractionsDownwardOutsideRange
- testFractionsTowardZeroWithinRange
- testFractionsTowardZeroOutsideRange
- testFractionsToNearestFromZeroWithinRange
- testFractionsToNearestFromZeroOutsideRange
- testFractionsToNearestWithinRange
- testFractionsToNearestOutsideRange
- testFractionsToNearestFallbackWithinRange
Learn to use CMake with our Intro Training
Find out more