blob: b566c850eaffe0afa77aaa9cc584f5e642631b1c [file] [log] [blame]
Frank Tang3e05d9d2021-11-08 14:04:04 -08001// © 2016 and later: Unicode, Inc. and others.
2// License & terms of use: http://www.unicode.org/copyright.html
3/********************************************************************
4 * COPYRIGHT:
5 * Copyright (c) 1997-2011, International Business Machines Corporation and
6 * others. All Rights Reserved.
7 ********************************************************************/
8
9#include "tsputil.h"
10
11#include <float.h> // DBL_MAX, DBL_MIN
12#include "putilimp.h"
13
14#define CASE(id,test) case id: name = #test; if (exec) { logln(#test "---"); logln((UnicodeString)""); test(); } break;
15
16void
17PUtilTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ )
18{
19 //if (exec) logln("TestSuite PUtilTest: ");
20 switch (index) {
21 CASE(0, testMaxMin)
22 CASE(1, testNaN)
23 CASE(2, testPositiveInfinity)
24 CASE(3, testNegativeInfinity)
25 CASE(4, testZero)
26// CASE(, testIEEEremainder)
27
28 default: name = ""; break; //needed to end loop
29 }
30}
31
32#if 0
33void
34PUtilTest::testIEEEremainder()
35{
36 double pinf = uprv_getInfinity();
37 double ninf = -uprv_getInfinity();
38 double nan = uprv_getNaN();
39 double pzero = 0.0;
40 double nzero = 0.0;
41
42 nzero *= -1;
43
44 // simple remainder checks
45 remainderTest(7.0, 2.5, -0.5);
46 remainderTest(7.0, -2.5, -0.5);
47#if U_PLATFORM != U_PF_OS390
48 // ### TODO:
49 // The following tests fails on S/390 with IEEE support in release builds;
50 // debug builds work.
51 // The functioning of ChoiceFormat is not affected by this bug.
52 remainderTest(-7.0, 2.5, 0.5);
53 remainderTest(-7.0, -2.5, 0.5);
54#endif
55 remainderTest(5.0, 3.0, -1.0);
56
57 // this should work
58 //remainderTest(43.7, 2.5, 1.25);
59
60 /*
61
62 // infinity and real
63 remainderTest(pinf, 1.0, 1.25);
64 remainderTest(1.0, pinf, 1.0);
65 remainderTest(ninf, 1.0, 1.25);
66 remainderTest(1.0, ninf, 1.0);
67
68 // test infinity and nan
69 remainderTest(ninf, pinf, 1.25);
70 remainderTest(ninf, nan, 1.25);
71 remainderTest(pinf, nan, 1.25);
72
73 // test infinity and zero
74 remainderTest(pinf, pzero, 1.25);
75 remainderTest(pinf, nzero, 1.25);
76 remainderTest(ninf, pzero, 1.25);
77 remainderTest(ninf, nzero, 1.25);
78*/
79}
80
81void
82PUtilTest::remainderTest(double x, double y, double exp)
83{
84 double result = uprv_IEEEremainder(x,y);
85
86 if( uprv_isNaN(result) &&
87 ! ( uprv_isNaN(x) || uprv_isNaN(y))) {
88 errln(UnicodeString("FAIL: got NaN as result without NaN as argument"));
89 errln(UnicodeString(" IEEEremainder(") + x + ", " + y + ") is " + result + ", expected " + exp);
90 }
91 else if(result != exp)
92 errln(UnicodeString("FAIL: IEEEremainder(") + x + ", " + y + ") is " + result + ", expected " + exp);
93 else
94 logln(UnicodeString("OK: IEEEremainder(") + x + ", " + y + ") is " + result);
95
96}
97#endif
98
99void
100PUtilTest::testMaxMin()
101{
102 double pinf = uprv_getInfinity();
103 double ninf = -uprv_getInfinity();
104 double nan = uprv_getNaN();
105 double pzero = 0.0;
106 double nzero = 0.0;
107
108 nzero *= -1;
109
110 // +Inf with -Inf
Frank Tang1f164ee2022-11-08 12:31:27 -0800111 maxMinTest(pinf, ninf, pinf, true);
112 maxMinTest(pinf, ninf, ninf, false);
Frank Tang3e05d9d2021-11-08 14:04:04 -0800113
114 // +Inf with +0 and -0
Frank Tang1f164ee2022-11-08 12:31:27 -0800115 maxMinTest(pinf, pzero, pinf, true);
116 maxMinTest(pinf, pzero, pzero, false);
117 maxMinTest(pinf, nzero, pinf, true);
118 maxMinTest(pinf, nzero, nzero, false);
Frank Tang3e05d9d2021-11-08 14:04:04 -0800119
120 // -Inf with +0 and -0
Frank Tang1f164ee2022-11-08 12:31:27 -0800121 maxMinTest(ninf, pzero, pzero, true);
122 maxMinTest(ninf, pzero, ninf, false);
123 maxMinTest(ninf, nzero, nzero, true);
124 maxMinTest(ninf, nzero, ninf, false);
Frank Tang3e05d9d2021-11-08 14:04:04 -0800125
126 // NaN with +Inf and -Inf
Frank Tang1f164ee2022-11-08 12:31:27 -0800127 maxMinTest(pinf, nan, nan, true);
128 maxMinTest(pinf, nan, nan, false);
129 maxMinTest(ninf, nan, nan, true);
130 maxMinTest(ninf, nan, nan, false);
Frank Tang3e05d9d2021-11-08 14:04:04 -0800131
132 // NaN with NaN
Frank Tang1f164ee2022-11-08 12:31:27 -0800133 maxMinTest(nan, nan, nan, true);
134 maxMinTest(nan, nan, nan, false);
Frank Tang3e05d9d2021-11-08 14:04:04 -0800135
136 // NaN with +0 and -0
Frank Tang1f164ee2022-11-08 12:31:27 -0800137 maxMinTest(nan, pzero, nan, true);
138 maxMinTest(nan, pzero, nan, false);
139 maxMinTest(nan, nzero, nan, true);
140 maxMinTest(nan, nzero, nan, false);
Frank Tang3e05d9d2021-11-08 14:04:04 -0800141
142 // +Inf with DBL_MAX and DBL_MIN
Frank Tang1f164ee2022-11-08 12:31:27 -0800143 maxMinTest(pinf, DBL_MAX, pinf, true);
144 maxMinTest(pinf, -DBL_MAX, pinf, true);
145 maxMinTest(pinf, DBL_MIN, pinf, true);
146 maxMinTest(pinf, -DBL_MIN, pinf, true);
147 maxMinTest(pinf, DBL_MIN, DBL_MIN, false);
148 maxMinTest(pinf, -DBL_MIN, -DBL_MIN, false);
149 maxMinTest(pinf, DBL_MAX, DBL_MAX, false);
150 maxMinTest(pinf, -DBL_MAX, -DBL_MAX, false);
Frank Tang3e05d9d2021-11-08 14:04:04 -0800151
152 // -Inf with DBL_MAX and DBL_MIN
Frank Tang1f164ee2022-11-08 12:31:27 -0800153 maxMinTest(ninf, DBL_MAX, DBL_MAX, true);
154 maxMinTest(ninf, -DBL_MAX, -DBL_MAX, true);
155 maxMinTest(ninf, DBL_MIN, DBL_MIN, true);
156 maxMinTest(ninf, -DBL_MIN, -DBL_MIN, true);
157 maxMinTest(ninf, DBL_MIN, ninf, false);
158 maxMinTest(ninf, -DBL_MIN, ninf, false);
159 maxMinTest(ninf, DBL_MAX, ninf, false);
160 maxMinTest(ninf, -DBL_MAX, ninf, false);
Frank Tang3e05d9d2021-11-08 14:04:04 -0800161
162 // +0 with DBL_MAX and DBL_MIN
Frank Tang1f164ee2022-11-08 12:31:27 -0800163 maxMinTest(pzero, DBL_MAX, DBL_MAX, true);
164 maxMinTest(pzero, -DBL_MAX, pzero, true);
165 maxMinTest(pzero, DBL_MIN, DBL_MIN, true);
166 maxMinTest(pzero, -DBL_MIN, pzero, true);
167 maxMinTest(pzero, DBL_MIN, pzero, false);
168 maxMinTest(pzero, -DBL_MIN, -DBL_MIN, false);
169 maxMinTest(pzero, DBL_MAX, pzero, false);
170 maxMinTest(pzero, -DBL_MAX, -DBL_MAX, false);
Frank Tang3e05d9d2021-11-08 14:04:04 -0800171
172 // -0 with DBL_MAX and DBL_MIN
Frank Tang1f164ee2022-11-08 12:31:27 -0800173 maxMinTest(nzero, DBL_MAX, DBL_MAX, true);
174 maxMinTest(nzero, -DBL_MAX, nzero, true);
175 maxMinTest(nzero, DBL_MIN, DBL_MIN, true);
176 maxMinTest(nzero, -DBL_MIN, nzero, true);
177 maxMinTest(nzero, DBL_MIN, nzero, false);
178 maxMinTest(nzero, -DBL_MIN, -DBL_MIN, false);
179 maxMinTest(nzero, DBL_MAX, nzero, false);
180 maxMinTest(nzero, -DBL_MAX, -DBL_MAX, false);
Frank Tang3e05d9d2021-11-08 14:04:04 -0800181}
182
183void
184PUtilTest::maxMinTest(double a, double b, double exp, UBool max)
185{
186 double result = 0.0;
187
188 if(max)
189 result = uprv_fmax(a, b);
190 else
191 result = uprv_fmin(a, b);
192
193 UBool nanResultOK = (uprv_isNaN(a) || uprv_isNaN(b));
194
195 if(uprv_isNaN(result) && ! nanResultOK) {
196 errln(UnicodeString("FAIL: got NaN as result without NaN as argument"));
197 if(max)
198 errln(UnicodeString(" max(") + a + ", " + b + ") is " + result + ", expected " + exp);
199 else
200 errln(UnicodeString(" min(") + a + ", " + b + ") is " + result + ", expected " + exp);
201 }
202 else if(result != exp && ! (uprv_isNaN(result) || uprv_isNaN(exp)))
203 if(max)
204 errln(UnicodeString("FAIL: max(") + a + ", " + b + ") is " + result + ", expected " + exp);
205 else
206 errln(UnicodeString("FAIL: min(") + a + ", " + b + ") is " + result + ", expected " + exp);
207 else {
208 if (verbose) {
209 if(max)
210 logln(UnicodeString("OK: max(") + a + ", " + b + ") is " + result);
211 else
212 logln(UnicodeString("OK: min(") + a + ", " + b + ") is " + result);
213 }
214 }
215}
216//==============================
217
218// NaN is weird- comparisons with NaN _always_ return false, with the
219// exception of !=, which _always_ returns true
220void
221PUtilTest::testNaN(void)
222{
223 logln("NaN tests may show that the expected NaN!=NaN etc. is not true on some");
224 logln("platforms; however, ICU does not rely on them because it defines");
225 logln("and uses uprv_isNaN(). Therefore, most failing NaN tests only report warnings.");
226
227 PUtilTest::testIsNaN();
228 PUtilTest::NaNGT();
229 PUtilTest::NaNLT();
230 PUtilTest::NaNGTE();
231 PUtilTest::NaNLTE();
232 PUtilTest::NaNE();
233 PUtilTest::NaNNE();
234
235 logln("End of NaN tests.");
236}
237
238//==============================
239
240void
241PUtilTest::testPositiveInfinity(void)
242{
243 double pinf = uprv_getInfinity();
244 double ninf = -uprv_getInfinity();
245 double ten = 10.0;
246
Frank Tang1f164ee2022-11-08 12:31:27 -0800247 if(uprv_isInfinite(pinf) != true) {
248 errln("FAIL: isInfinite(+Infinity) returned false, should be true.");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800249 }
250
Frank Tang1f164ee2022-11-08 12:31:27 -0800251 if(uprv_isPositiveInfinity(pinf) != true) {
252 errln("FAIL: isPositiveInfinity(+Infinity) returned false, should be true.");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800253 }
254
Frank Tang1f164ee2022-11-08 12:31:27 -0800255 if(uprv_isNegativeInfinity(pinf) != false) {
256 errln("FAIL: isNegativeInfinity(+Infinity) returned true, should be false.");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800257 }
258
Frank Tang1f164ee2022-11-08 12:31:27 -0800259 if((pinf > DBL_MAX) != true) {
260 errln("FAIL: +Infinity > DBL_MAX returned false, should be true.");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800261 }
262
Frank Tang1f164ee2022-11-08 12:31:27 -0800263 if((pinf > DBL_MIN) != true) {
264 errln("FAIL: +Infinity > DBL_MIN returned false, should be true.");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800265 }
266
Frank Tang1f164ee2022-11-08 12:31:27 -0800267 if((pinf > ninf) != true) {
268 errln("FAIL: +Infinity > -Infinity returned false, should be true.");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800269 }
270
Frank Tang1f164ee2022-11-08 12:31:27 -0800271 if((pinf > ten) != true) {
272 errln("FAIL: +Infinity > 10.0 returned false, should be true.");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800273 }
274}
275
276//==============================
277
278void
279PUtilTest::testNegativeInfinity(void)
280{
281 double pinf = uprv_getInfinity();
282 double ninf = -uprv_getInfinity();
283 double ten = 10.0;
284
Frank Tang1f164ee2022-11-08 12:31:27 -0800285 if(uprv_isInfinite(ninf) != true) {
286 errln("FAIL: isInfinite(-Infinity) returned false, should be true.");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800287 }
288
Frank Tang1f164ee2022-11-08 12:31:27 -0800289 if(uprv_isNegativeInfinity(ninf) != true) {
290 errln("FAIL: isNegativeInfinity(-Infinity) returned false, should be true.");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800291 }
292
Frank Tang1f164ee2022-11-08 12:31:27 -0800293 if(uprv_isPositiveInfinity(ninf) != false) {
294 errln("FAIL: isPositiveInfinity(-Infinity) returned true, should be false.");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800295 }
296
Frank Tang1f164ee2022-11-08 12:31:27 -0800297 if((ninf < DBL_MAX) != true) {
298 errln("FAIL: -Infinity < DBL_MAX returned false, should be true.");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800299 }
300
Frank Tang1f164ee2022-11-08 12:31:27 -0800301 if((ninf < DBL_MIN) != true) {
302 errln("FAIL: -Infinity < DBL_MIN returned false, should be true.");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800303 }
304
Frank Tang1f164ee2022-11-08 12:31:27 -0800305 if((ninf < pinf) != true) {
306 errln("FAIL: -Infinity < +Infinity returned false, should be true.");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800307 }
308
Frank Tang1f164ee2022-11-08 12:31:27 -0800309 if((ninf < ten) != true) {
310 errln("FAIL: -Infinity < 10.0 returned false, should be true.");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800311 }
312}
313
314//==============================
315
316// notes about zero:
Frank Tang1f164ee2022-11-08 12:31:27 -0800317// -0.0 == 0.0 == true
318// -0.0 < 0.0 == false
Frank Tang3e05d9d2021-11-08 14:04:04 -0800319// generating -0.0 must be done at runtime. compiler apparently ignores sign?
320void
321PUtilTest::testZero(void)
322{
323 // volatile is used to fake out the compiler optimizer. We really want to divide by 0.
324 volatile double pzero = 0.0;
325 volatile double nzero = 0.0;
326
Frank Tang585942f2022-05-09 15:40:30 -0700327 nzero = nzero * -1;
Frank Tang3e05d9d2021-11-08 14:04:04 -0800328
Frank Tang1f164ee2022-11-08 12:31:27 -0800329 if((pzero == nzero) != true) {
330 errln("FAIL: 0.0 == -0.0 returned false, should be true.");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800331 }
332
Frank Tang1f164ee2022-11-08 12:31:27 -0800333 if((pzero > nzero) != false) {
334 errln("FAIL: 0.0 > -0.0 returned true, should be false.");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800335 }
336
Frank Tang1f164ee2022-11-08 12:31:27 -0800337 if((pzero >= nzero) != true) {
338 errln("FAIL: 0.0 >= -0.0 returned false, should be true.");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800339 }
340
Frank Tang1f164ee2022-11-08 12:31:27 -0800341 if((pzero < nzero) != false) {
342 errln("FAIL: 0.0 < -0.0 returned true, should be false.");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800343 }
344
Frank Tang1f164ee2022-11-08 12:31:27 -0800345 if((pzero <= nzero) != true) {
346 errln("FAIL: 0.0 <= -0.0 returned false, should be true.");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800347 }
348#if U_PLATFORM != U_PF_OS400 /* OS/400 will generate divide by zero exception MCH1214 */
Frank Tang1f164ee2022-11-08 12:31:27 -0800349 if(uprv_isInfinite(1/pzero) != true) {
350 errln("FAIL: isInfinite(1/0.0) returned false, should be true.");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800351 }
352
Frank Tang1f164ee2022-11-08 12:31:27 -0800353 if(uprv_isInfinite(1/nzero) != true) {
354 errln("FAIL: isInfinite(1/-0.0) returned false, should be true.");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800355 }
356
Frank Tang1f164ee2022-11-08 12:31:27 -0800357 if(uprv_isPositiveInfinity(1/pzero) != true) {
358 errln("FAIL: isPositiveInfinity(1/0.0) returned false, should be true.");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800359 }
360
Frank Tang1f164ee2022-11-08 12:31:27 -0800361 if(uprv_isNegativeInfinity(1/nzero) != true) {
362 errln("FAIL: isNegativeInfinity(1/-0.0) returned false, should be true.");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800363 }
364#endif
365}
366
367//==============================
368
369void
370PUtilTest::testIsNaN(void)
371{
372 double pinf = uprv_getInfinity();
373 double ninf = -uprv_getInfinity();
374 double nan = uprv_getNaN();
375 double ten = 10.0;
376
Frank Tang1f164ee2022-11-08 12:31:27 -0800377 if(uprv_isNaN(nan) == false) {
378 errln("FAIL: isNaN() returned false for NaN.");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800379 }
380
Frank Tang1f164ee2022-11-08 12:31:27 -0800381 if(uprv_isNaN(pinf) == true) {
382 errln("FAIL: isNaN() returned true for +Infinity.");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800383 }
384
Frank Tang1f164ee2022-11-08 12:31:27 -0800385 if(uprv_isNaN(ninf) == true) {
386 errln("FAIL: isNaN() returned true for -Infinity.");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800387 }
388
Frank Tang1f164ee2022-11-08 12:31:27 -0800389 if(uprv_isNaN(ten) == true) {
390 errln("FAIL: isNaN() returned true for 10.0.");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800391 }
392}
393
394//==============================
395
396void
397PUtilTest::NaNGT(void)
398{
399 double pinf = uprv_getInfinity();
400 double ninf = -uprv_getInfinity();
401 double nan = uprv_getNaN();
402 double ten = 10.0;
403
Frank Tang1f164ee2022-11-08 12:31:27 -0800404 if((nan > nan) != false) {
405 logln("WARNING: NaN > NaN returned true, should be false");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800406 }
407
Frank Tang1f164ee2022-11-08 12:31:27 -0800408 if((nan > pinf) != false) {
409 logln("WARNING: NaN > +Infinity returned true, should be false");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800410 }
411
Frank Tang1f164ee2022-11-08 12:31:27 -0800412 if((nan > ninf) != false) {
413 logln("WARNING: NaN > -Infinity returned true, should be false");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800414 }
415
Frank Tang1f164ee2022-11-08 12:31:27 -0800416 if((nan > ten) != false) {
417 logln("WARNING: NaN > 10.0 returned true, should be false");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800418 }
419}
420
421//==============================
422
423void
424PUtilTest::NaNLT(void)
425{
426 double pinf = uprv_getInfinity();
427 double ninf = -uprv_getInfinity();
428 double nan = uprv_getNaN();
429 double ten = 10.0;
430
Frank Tang1f164ee2022-11-08 12:31:27 -0800431 if((nan < nan) != false) {
432 logln("WARNING: NaN < NaN returned true, should be false");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800433 }
434
Frank Tang1f164ee2022-11-08 12:31:27 -0800435 if((nan < pinf) != false) {
436 logln("WARNING: NaN < +Infinity returned true, should be false");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800437 }
438
Frank Tang1f164ee2022-11-08 12:31:27 -0800439 if((nan < ninf) != false) {
440 logln("WARNING: NaN < -Infinity returned true, should be false");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800441 }
442
Frank Tang1f164ee2022-11-08 12:31:27 -0800443 if((nan < ten) != false) {
444 logln("WARNING: NaN < 10.0 returned true, should be false");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800445 }
446}
447
448//==============================
449
450void
451PUtilTest::NaNGTE(void)
452{
453 double pinf = uprv_getInfinity();
454 double ninf = -uprv_getInfinity();
455 double nan = uprv_getNaN();
456 double ten = 10.0;
457
Frank Tang1f164ee2022-11-08 12:31:27 -0800458 if((nan >= nan) != false) {
459 logln("WARNING: NaN >= NaN returned true, should be false");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800460 }
461
Frank Tang1f164ee2022-11-08 12:31:27 -0800462 if((nan >= pinf) != false) {
463 logln("WARNING: NaN >= +Infinity returned true, should be false");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800464 }
465
Frank Tang1f164ee2022-11-08 12:31:27 -0800466 if((nan >= ninf) != false) {
467 logln("WARNING: NaN >= -Infinity returned true, should be false");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800468 }
469
Frank Tang1f164ee2022-11-08 12:31:27 -0800470 if((nan >= ten) != false) {
471 logln("WARNING: NaN >= 10.0 returned true, should be false");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800472 }
473}
474
475//==============================
476
477void
478PUtilTest::NaNLTE(void)
479{
480 double pinf = uprv_getInfinity();
481 double ninf = -uprv_getInfinity();
482 double nan = uprv_getNaN();
483 double ten = 10.0;
484
Frank Tang1f164ee2022-11-08 12:31:27 -0800485 if((nan <= nan) != false) {
486 logln("WARNING: NaN <= NaN returned true, should be false");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800487 }
488
Frank Tang1f164ee2022-11-08 12:31:27 -0800489 if((nan <= pinf) != false) {
490 logln("WARNING: NaN <= +Infinity returned true, should be false");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800491 }
492
Frank Tang1f164ee2022-11-08 12:31:27 -0800493 if((nan <= ninf) != false) {
494 logln("WARNING: NaN <= -Infinity returned true, should be false");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800495 }
496
Frank Tang1f164ee2022-11-08 12:31:27 -0800497 if((nan <= ten) != false) {
498 logln("WARNING: NaN <= 10.0 returned true, should be false");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800499 }
500}
501
502//==============================
503
504void
505PUtilTest::NaNE(void)
506{
507 double pinf = uprv_getInfinity();
508 double ninf = -uprv_getInfinity();
509 double nan = uprv_getNaN();
510 double ten = 10.0;
511
Frank Tang1f164ee2022-11-08 12:31:27 -0800512 if((nan == nan) != false) {
513 logln("WARNING: NaN == NaN returned true, should be false");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800514 }
515
Frank Tang1f164ee2022-11-08 12:31:27 -0800516 if((nan == pinf) != false) {
517 logln("WARNING: NaN == +Infinity returned true, should be false");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800518 }
519
Frank Tang1f164ee2022-11-08 12:31:27 -0800520 if((nan == ninf) != false) {
521 logln("WARNING: NaN == -Infinity returned true, should be false");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800522 }
523
Frank Tang1f164ee2022-11-08 12:31:27 -0800524 if((nan == ten) != false) {
525 logln("WARNING: NaN == 10.0 returned true, should be false");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800526 }
527}
528
529//==============================
530
531void
532PUtilTest::NaNNE(void)
533{
534 double pinf = uprv_getInfinity();
535 double ninf = -uprv_getInfinity();
536 double nan = uprv_getNaN();
537 double ten = 10.0;
538
Frank Tang1f164ee2022-11-08 12:31:27 -0800539 if((nan != nan) != true) {
540 logln("WARNING: NaN != NaN returned false, should be true");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800541 }
542
Frank Tang1f164ee2022-11-08 12:31:27 -0800543 if((nan != pinf) != true) {
544 logln("WARNING: NaN != +Infinity returned false, should be true");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800545 }
546
Frank Tang1f164ee2022-11-08 12:31:27 -0800547 if((nan != ninf) != true) {
548 logln("WARNING: NaN != -Infinity returned false, should be true");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800549 }
550
Frank Tang1f164ee2022-11-08 12:31:27 -0800551 if((nan != ten) != true) {
552 logln("WARNING: NaN != 10.0 returned false, should be true");
Frank Tang3e05d9d2021-11-08 14:04:04 -0800553 }
554}