| OLD | NEW |
| (Empty) |
| 1 /******************************************************************** | |
| 2 * COPYRIGHT: | |
| 3 * Copyright (c) 1997-2011, International Business Machines Corporation and | |
| 4 * others. All Rights Reserved. | |
| 5 ********************************************************************/ | |
| 6 | |
| 7 #include "tsputil.h" | |
| 8 | |
| 9 #include <float.h> // DBL_MAX, DBL_MIN | |
| 10 #include "putilimp.h" | |
| 11 | |
| 12 #define CASE(id,test) case id: name = #test; if (exec) { logln(#test "---"); log
ln((UnicodeString)""); test(); } break; | |
| 13 | |
| 14 void | |
| 15 PUtilTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /
*par*/ ) | |
| 16 { | |
| 17 //if (exec) logln("TestSuite PUtilTest: "); | |
| 18 switch (index) { | |
| 19 CASE(0, testMaxMin) | |
| 20 CASE(1, testNaN) | |
| 21 CASE(2, testPositiveInfinity) | |
| 22 CASE(3, testNegativeInfinity) | |
| 23 CASE(4, testZero) | |
| 24 // CASE(, testIEEEremainder) | |
| 25 | |
| 26 default: name = ""; break; //needed to end loop | |
| 27 } | |
| 28 } | |
| 29 | |
| 30 #if 0 | |
| 31 void | |
| 32 PUtilTest::testIEEEremainder() | |
| 33 { | |
| 34 double pinf = uprv_getInfinity(); | |
| 35 double ninf = -uprv_getInfinity(); | |
| 36 double nan = uprv_getNaN(); | |
| 37 double pzero = 0.0; | |
| 38 double nzero = 0.0; | |
| 39 | |
| 40 nzero *= -1; | |
| 41 | |
| 42 // simple remainder checks | |
| 43 remainderTest(7.0, 2.5, -0.5); | |
| 44 remainderTest(7.0, -2.5, -0.5); | |
| 45 #if U_PLATFORM != U_PF_OS390 | |
| 46 // ### TODO: | |
| 47 // The following tests fails on S/390 with IEEE support in release builds; | |
| 48 // debug builds work. | |
| 49 // The functioning of ChoiceFormat is not affected by this bug. | |
| 50 remainderTest(-7.0, 2.5, 0.5); | |
| 51 remainderTest(-7.0, -2.5, 0.5); | |
| 52 #endif | |
| 53 remainderTest(5.0, 3.0, -1.0); | |
| 54 | |
| 55 // this should work | |
| 56 //remainderTest(43.7, 2.5, 1.25); | |
| 57 | |
| 58 /* | |
| 59 | |
| 60 // infinity and real | |
| 61 remainderTest(pinf, 1.0, 1.25); | |
| 62 remainderTest(1.0, pinf, 1.0); | |
| 63 remainderTest(ninf, 1.0, 1.25); | |
| 64 remainderTest(1.0, ninf, 1.0); | |
| 65 | |
| 66 // test infinity and nan | |
| 67 remainderTest(ninf, pinf, 1.25); | |
| 68 remainderTest(ninf, nan, 1.25); | |
| 69 remainderTest(pinf, nan, 1.25); | |
| 70 | |
| 71 // test infinity and zero | |
| 72 remainderTest(pinf, pzero, 1.25); | |
| 73 remainderTest(pinf, nzero, 1.25); | |
| 74 remainderTest(ninf, pzero, 1.25); | |
| 75 remainderTest(ninf, nzero, 1.25); | |
| 76 */ | |
| 77 } | |
| 78 | |
| 79 void | |
| 80 PUtilTest::remainderTest(double x, double y, double exp) | |
| 81 { | |
| 82 double result = uprv_IEEEremainder(x,y); | |
| 83 | |
| 84 if( uprv_isNaN(result) && | |
| 85 ! ( uprv_isNaN(x) || uprv_isNaN(y))) { | |
| 86 errln(UnicodeString("FAIL: got NaN as result without NaN as argument")); | |
| 87 errln(UnicodeString(" IEEEremainder(") + x + ", " + y + ") is " + r
esult + ", expected " + exp); | |
| 88 } | |
| 89 else if(result != exp) | |
| 90 errln(UnicodeString("FAIL: IEEEremainder(") + x + ", " + y + ") is " + r
esult + ", expected " + exp); | |
| 91 else | |
| 92 logln(UnicodeString("OK: IEEEremainder(") + x + ", " + y + ") is " + res
ult); | |
| 93 | |
| 94 } | |
| 95 #endif | |
| 96 | |
| 97 void | |
| 98 PUtilTest::testMaxMin() | |
| 99 { | |
| 100 double pinf = uprv_getInfinity(); | |
| 101 double ninf = -uprv_getInfinity(); | |
| 102 double nan = uprv_getNaN(); | |
| 103 double pzero = 0.0; | |
| 104 double nzero = 0.0; | |
| 105 | |
| 106 nzero *= -1; | |
| 107 | |
| 108 // +Inf with -Inf | |
| 109 maxMinTest(pinf, ninf, pinf, TRUE); | |
| 110 maxMinTest(pinf, ninf, ninf, FALSE); | |
| 111 | |
| 112 // +Inf with +0 and -0 | |
| 113 maxMinTest(pinf, pzero, pinf, TRUE); | |
| 114 maxMinTest(pinf, pzero, pzero, FALSE); | |
| 115 maxMinTest(pinf, nzero, pinf, TRUE); | |
| 116 maxMinTest(pinf, nzero, nzero, FALSE); | |
| 117 | |
| 118 // -Inf with +0 and -0 | |
| 119 maxMinTest(ninf, pzero, pzero, TRUE); | |
| 120 maxMinTest(ninf, pzero, ninf, FALSE); | |
| 121 maxMinTest(ninf, nzero, nzero, TRUE); | |
| 122 maxMinTest(ninf, nzero, ninf, FALSE); | |
| 123 | |
| 124 // NaN with +Inf and -Inf | |
| 125 maxMinTest(pinf, nan, nan, TRUE); | |
| 126 maxMinTest(pinf, nan, nan, FALSE); | |
| 127 maxMinTest(ninf, nan, nan, TRUE); | |
| 128 maxMinTest(ninf, nan, nan, FALSE); | |
| 129 | |
| 130 // NaN with NaN | |
| 131 maxMinTest(nan, nan, nan, TRUE); | |
| 132 maxMinTest(nan, nan, nan, FALSE); | |
| 133 | |
| 134 // NaN with +0 and -0 | |
| 135 maxMinTest(nan, pzero, nan, TRUE); | |
| 136 maxMinTest(nan, pzero, nan, FALSE); | |
| 137 maxMinTest(nan, nzero, nan, TRUE); | |
| 138 maxMinTest(nan, nzero, nan, FALSE); | |
| 139 | |
| 140 // +Inf with DBL_MAX and DBL_MIN | |
| 141 maxMinTest(pinf, DBL_MAX, pinf, TRUE); | |
| 142 maxMinTest(pinf, -DBL_MAX, pinf, TRUE); | |
| 143 maxMinTest(pinf, DBL_MIN, pinf, TRUE); | |
| 144 maxMinTest(pinf, -DBL_MIN, pinf, TRUE); | |
| 145 maxMinTest(pinf, DBL_MIN, DBL_MIN, FALSE); | |
| 146 maxMinTest(pinf, -DBL_MIN, -DBL_MIN, FALSE); | |
| 147 maxMinTest(pinf, DBL_MAX, DBL_MAX, FALSE); | |
| 148 maxMinTest(pinf, -DBL_MAX, -DBL_MAX, FALSE); | |
| 149 | |
| 150 // -Inf with DBL_MAX and DBL_MIN | |
| 151 maxMinTest(ninf, DBL_MAX, DBL_MAX, TRUE); | |
| 152 maxMinTest(ninf, -DBL_MAX, -DBL_MAX, TRUE); | |
| 153 maxMinTest(ninf, DBL_MIN, DBL_MIN, TRUE); | |
| 154 maxMinTest(ninf, -DBL_MIN, -DBL_MIN, TRUE); | |
| 155 maxMinTest(ninf, DBL_MIN, ninf, FALSE); | |
| 156 maxMinTest(ninf, -DBL_MIN, ninf, FALSE); | |
| 157 maxMinTest(ninf, DBL_MAX, ninf, FALSE); | |
| 158 maxMinTest(ninf, -DBL_MAX, ninf, FALSE); | |
| 159 | |
| 160 // +0 with DBL_MAX and DBL_MIN | |
| 161 maxMinTest(pzero, DBL_MAX, DBL_MAX, TRUE); | |
| 162 maxMinTest(pzero, -DBL_MAX, pzero, TRUE); | |
| 163 maxMinTest(pzero, DBL_MIN, DBL_MIN, TRUE); | |
| 164 maxMinTest(pzero, -DBL_MIN, pzero, TRUE); | |
| 165 maxMinTest(pzero, DBL_MIN, pzero, FALSE); | |
| 166 maxMinTest(pzero, -DBL_MIN, -DBL_MIN, FALSE); | |
| 167 maxMinTest(pzero, DBL_MAX, pzero, FALSE); | |
| 168 maxMinTest(pzero, -DBL_MAX, -DBL_MAX, FALSE); | |
| 169 | |
| 170 // -0 with DBL_MAX and DBL_MIN | |
| 171 maxMinTest(nzero, DBL_MAX, DBL_MAX, TRUE); | |
| 172 maxMinTest(nzero, -DBL_MAX, nzero, TRUE); | |
| 173 maxMinTest(nzero, DBL_MIN, DBL_MIN, TRUE); | |
| 174 maxMinTest(nzero, -DBL_MIN, nzero, TRUE); | |
| 175 maxMinTest(nzero, DBL_MIN, nzero, FALSE); | |
| 176 maxMinTest(nzero, -DBL_MIN, -DBL_MIN, FALSE); | |
| 177 maxMinTest(nzero, DBL_MAX, nzero, FALSE); | |
| 178 maxMinTest(nzero, -DBL_MAX, -DBL_MAX, FALSE); | |
| 179 } | |
| 180 | |
| 181 void | |
| 182 PUtilTest::maxMinTest(double a, double b, double exp, UBool max) | |
| 183 { | |
| 184 double result = 0.0; | |
| 185 | |
| 186 if(max) | |
| 187 result = uprv_fmax(a, b); | |
| 188 else | |
| 189 result = uprv_fmin(a, b); | |
| 190 | |
| 191 UBool nanResultOK = (uprv_isNaN(a) || uprv_isNaN(b)); | |
| 192 | |
| 193 if(uprv_isNaN(result) && ! nanResultOK) { | |
| 194 errln(UnicodeString("FAIL: got NaN as result without NaN as argument")); | |
| 195 if(max) | |
| 196 errln(UnicodeString(" max(") + a + ", " + b + ") is " + result
+ ", expected " + exp); | |
| 197 else | |
| 198 errln(UnicodeString(" min(") + a + ", " + b + ") is " + result
+ ", expected " + exp); | |
| 199 } | |
| 200 else if(result != exp && ! (uprv_isNaN(result) || uprv_isNaN(exp))) | |
| 201 if(max) | |
| 202 errln(UnicodeString("FAIL: max(") + a + ", " + b + ") is " + result
+ ", expected " + exp); | |
| 203 else | |
| 204 errln(UnicodeString("FAIL: min(") + a + ", " + b + ") is " + result
+ ", expected " + exp); | |
| 205 else { | |
| 206 if (verbose) { | |
| 207 if(max) | |
| 208 logln(UnicodeString("OK: max(") + a + ", " + b + ") is " + resul
t); | |
| 209 else | |
| 210 logln(UnicodeString("OK: min(") + a + ", " + b + ") is " + resul
t); | |
| 211 } | |
| 212 } | |
| 213 } | |
| 214 //============================== | |
| 215 | |
| 216 // NaN is weird- comparisons with NaN _always_ return false, with the | |
| 217 // exception of !=, which _always_ returns true | |
| 218 void | |
| 219 PUtilTest::testNaN(void) | |
| 220 { | |
| 221 logln("NaN tests may show that the expected NaN!=NaN etc. is not true on som
e"); | |
| 222 logln("platforms; however, ICU does not rely on them because it defines"); | |
| 223 logln("and uses uprv_isNaN(). Therefore, most failing NaN tests only report
warnings."); | |
| 224 | |
| 225 PUtilTest::testIsNaN(); | |
| 226 PUtilTest::NaNGT(); | |
| 227 PUtilTest::NaNLT(); | |
| 228 PUtilTest::NaNGTE(); | |
| 229 PUtilTest::NaNLTE(); | |
| 230 PUtilTest::NaNE(); | |
| 231 PUtilTest::NaNNE(); | |
| 232 | |
| 233 logln("End of NaN tests."); | |
| 234 } | |
| 235 | |
| 236 //============================== | |
| 237 | |
| 238 void | |
| 239 PUtilTest::testPositiveInfinity(void) | |
| 240 { | |
| 241 double pinf = uprv_getInfinity(); | |
| 242 double ninf = -uprv_getInfinity(); | |
| 243 double ten = 10.0; | |
| 244 | |
| 245 if(uprv_isInfinite(pinf) != TRUE) { | |
| 246 errln("FAIL: isInfinite(+Infinity) returned FALSE, should be TRUE."); | |
| 247 } | |
| 248 | |
| 249 if(uprv_isPositiveInfinity(pinf) != TRUE) { | |
| 250 errln("FAIL: isPositiveInfinity(+Infinity) returned FALSE, should be TRU
E."); | |
| 251 } | |
| 252 | |
| 253 if(uprv_isNegativeInfinity(pinf) != FALSE) { | |
| 254 errln("FAIL: isNegativeInfinity(+Infinity) returned TRUE, should be FALS
E."); | |
| 255 } | |
| 256 | |
| 257 if((pinf > DBL_MAX) != TRUE) { | |
| 258 errln("FAIL: +Infinity > DBL_MAX returned FALSE, should be TRUE."); | |
| 259 } | |
| 260 | |
| 261 if((pinf > DBL_MIN) != TRUE) { | |
| 262 errln("FAIL: +Infinity > DBL_MIN returned FALSE, should be TRUE."); | |
| 263 } | |
| 264 | |
| 265 if((pinf > ninf) != TRUE) { | |
| 266 errln("FAIL: +Infinity > -Infinity returned FALSE, should be TRUE."); | |
| 267 } | |
| 268 | |
| 269 if((pinf > ten) != TRUE) { | |
| 270 errln("FAIL: +Infinity > 10.0 returned FALSE, should be TRUE."); | |
| 271 } | |
| 272 } | |
| 273 | |
| 274 //============================== | |
| 275 | |
| 276 void | |
| 277 PUtilTest::testNegativeInfinity(void) | |
| 278 { | |
| 279 double pinf = uprv_getInfinity(); | |
| 280 double ninf = -uprv_getInfinity(); | |
| 281 double ten = 10.0; | |
| 282 | |
| 283 if(uprv_isInfinite(ninf) != TRUE) { | |
| 284 errln("FAIL: isInfinite(-Infinity) returned FALSE, should be TRUE."); | |
| 285 } | |
| 286 | |
| 287 if(uprv_isNegativeInfinity(ninf) != TRUE) { | |
| 288 errln("FAIL: isNegativeInfinity(-Infinity) returned FALSE, should be TRU
E."); | |
| 289 } | |
| 290 | |
| 291 if(uprv_isPositiveInfinity(ninf) != FALSE) { | |
| 292 errln("FAIL: isPositiveInfinity(-Infinity) returned TRUE, should be FALS
E."); | |
| 293 } | |
| 294 | |
| 295 if((ninf < DBL_MAX) != TRUE) { | |
| 296 errln("FAIL: -Infinity < DBL_MAX returned FALSE, should be TRUE."); | |
| 297 } | |
| 298 | |
| 299 if((ninf < DBL_MIN) != TRUE) { | |
| 300 errln("FAIL: -Infinity < DBL_MIN returned FALSE, should be TRUE."); | |
| 301 } | |
| 302 | |
| 303 if((ninf < pinf) != TRUE) { | |
| 304 errln("FAIL: -Infinity < +Infinity returned FALSE, should be TRUE."); | |
| 305 } | |
| 306 | |
| 307 if((ninf < ten) != TRUE) { | |
| 308 errln("FAIL: -Infinity < 10.0 returned FALSE, should be TRUE."); | |
| 309 } | |
| 310 } | |
| 311 | |
| 312 //============================== | |
| 313 | |
| 314 // notes about zero: | |
| 315 // -0.0 == 0.0 == TRUE | |
| 316 // -0.0 < 0.0 == FALSE | |
| 317 // generating -0.0 must be done at runtime. compiler apparently ignores sign? | |
| 318 void | |
| 319 PUtilTest::testZero(void) | |
| 320 { | |
| 321 // volatile is used to fake out the compiler optimizer. We really want to d
ivide by 0. | |
| 322 volatile double pzero = 0.0; | |
| 323 volatile double nzero = 0.0; | |
| 324 | |
| 325 nzero *= -1; | |
| 326 | |
| 327 if((pzero == nzero) != TRUE) { | |
| 328 errln("FAIL: 0.0 == -0.0 returned FALSE, should be TRUE."); | |
| 329 } | |
| 330 | |
| 331 if((pzero > nzero) != FALSE) { | |
| 332 errln("FAIL: 0.0 > -0.0 returned TRUE, should be FALSE."); | |
| 333 } | |
| 334 | |
| 335 if((pzero >= nzero) != TRUE) { | |
| 336 errln("FAIL: 0.0 >= -0.0 returned FALSE, should be TRUE."); | |
| 337 } | |
| 338 | |
| 339 if((pzero < nzero) != FALSE) { | |
| 340 errln("FAIL: 0.0 < -0.0 returned TRUE, should be FALSE."); | |
| 341 } | |
| 342 | |
| 343 if((pzero <= nzero) != TRUE) { | |
| 344 errln("FAIL: 0.0 <= -0.0 returned FALSE, should be TRUE."); | |
| 345 } | |
| 346 #if U_PLATFORM != U_PF_OS400 /* OS/400 will generate divide by zero exception MC
H1214 */ | |
| 347 if(uprv_isInfinite(1/pzero) != TRUE) { | |
| 348 errln("FAIL: isInfinite(1/0.0) returned FALSE, should be TRUE."); | |
| 349 } | |
| 350 | |
| 351 if(uprv_isInfinite(1/nzero) != TRUE) { | |
| 352 errln("FAIL: isInfinite(1/-0.0) returned FALSE, should be TRUE."); | |
| 353 } | |
| 354 | |
| 355 if(uprv_isPositiveInfinity(1/pzero) != TRUE) { | |
| 356 errln("FAIL: isPositiveInfinity(1/0.0) returned FALSE, should be TRUE.")
; | |
| 357 } | |
| 358 | |
| 359 if(uprv_isNegativeInfinity(1/nzero) != TRUE) { | |
| 360 errln("FAIL: isNegativeInfinity(1/-0.0) returned FALSE, should be TRUE."
); | |
| 361 } | |
| 362 #endif | |
| 363 } | |
| 364 | |
| 365 //============================== | |
| 366 | |
| 367 void | |
| 368 PUtilTest::testIsNaN(void) | |
| 369 { | |
| 370 double pinf = uprv_getInfinity(); | |
| 371 double ninf = -uprv_getInfinity(); | |
| 372 double nan = uprv_getNaN(); | |
| 373 double ten = 10.0; | |
| 374 | |
| 375 if(uprv_isNaN(nan) == FALSE) { | |
| 376 errln("FAIL: isNaN() returned FALSE for NaN."); | |
| 377 } | |
| 378 | |
| 379 if(uprv_isNaN(pinf) == TRUE) { | |
| 380 errln("FAIL: isNaN() returned TRUE for +Infinity."); | |
| 381 } | |
| 382 | |
| 383 if(uprv_isNaN(ninf) == TRUE) { | |
| 384 errln("FAIL: isNaN() returned TRUE for -Infinity."); | |
| 385 } | |
| 386 | |
| 387 if(uprv_isNaN(ten) == TRUE) { | |
| 388 errln("FAIL: isNaN() returned TRUE for 10.0."); | |
| 389 } | |
| 390 } | |
| 391 | |
| 392 //============================== | |
| 393 | |
| 394 void | |
| 395 PUtilTest::NaNGT(void) | |
| 396 { | |
| 397 double pinf = uprv_getInfinity(); | |
| 398 double ninf = -uprv_getInfinity(); | |
| 399 double nan = uprv_getNaN(); | |
| 400 double ten = 10.0; | |
| 401 | |
| 402 if((nan > nan) != FALSE) { | |
| 403 logln("WARNING: NaN > NaN returned TRUE, should be FALSE"); | |
| 404 } | |
| 405 | |
| 406 if((nan > pinf) != FALSE) { | |
| 407 logln("WARNING: NaN > +Infinity returned TRUE, should be FALSE"); | |
| 408 } | |
| 409 | |
| 410 if((nan > ninf) != FALSE) { | |
| 411 logln("WARNING: NaN > -Infinity returned TRUE, should be FALSE"); | |
| 412 } | |
| 413 | |
| 414 if((nan > ten) != FALSE) { | |
| 415 logln("WARNING: NaN > 10.0 returned TRUE, should be FALSE"); | |
| 416 } | |
| 417 } | |
| 418 | |
| 419 //============================== | |
| 420 | |
| 421 void | |
| 422 PUtilTest::NaNLT(void) | |
| 423 { | |
| 424 double pinf = uprv_getInfinity(); | |
| 425 double ninf = -uprv_getInfinity(); | |
| 426 double nan = uprv_getNaN(); | |
| 427 double ten = 10.0; | |
| 428 | |
| 429 if((nan < nan) != FALSE) { | |
| 430 logln("WARNING: NaN < NaN returned TRUE, should be FALSE"); | |
| 431 } | |
| 432 | |
| 433 if((nan < pinf) != FALSE) { | |
| 434 logln("WARNING: NaN < +Infinity returned TRUE, should be FALSE"); | |
| 435 } | |
| 436 | |
| 437 if((nan < ninf) != FALSE) { | |
| 438 logln("WARNING: NaN < -Infinity returned TRUE, should be FALSE"); | |
| 439 } | |
| 440 | |
| 441 if((nan < ten) != FALSE) { | |
| 442 logln("WARNING: NaN < 10.0 returned TRUE, should be FALSE"); | |
| 443 } | |
| 444 } | |
| 445 | |
| 446 //============================== | |
| 447 | |
| 448 void | |
| 449 PUtilTest::NaNGTE(void) | |
| 450 { | |
| 451 double pinf = uprv_getInfinity(); | |
| 452 double ninf = -uprv_getInfinity(); | |
| 453 double nan = uprv_getNaN(); | |
| 454 double ten = 10.0; | |
| 455 | |
| 456 if((nan >= nan) != FALSE) { | |
| 457 logln("WARNING: NaN >= NaN returned TRUE, should be FALSE"); | |
| 458 } | |
| 459 | |
| 460 if((nan >= pinf) != FALSE) { | |
| 461 logln("WARNING: NaN >= +Infinity returned TRUE, should be FALSE"); | |
| 462 } | |
| 463 | |
| 464 if((nan >= ninf) != FALSE) { | |
| 465 logln("WARNING: NaN >= -Infinity returned TRUE, should be FALSE"); | |
| 466 } | |
| 467 | |
| 468 if((nan >= ten) != FALSE) { | |
| 469 logln("WARNING: NaN >= 10.0 returned TRUE, should be FALSE"); | |
| 470 } | |
| 471 } | |
| 472 | |
| 473 //============================== | |
| 474 | |
| 475 void | |
| 476 PUtilTest::NaNLTE(void) | |
| 477 { | |
| 478 double pinf = uprv_getInfinity(); | |
| 479 double ninf = -uprv_getInfinity(); | |
| 480 double nan = uprv_getNaN(); | |
| 481 double ten = 10.0; | |
| 482 | |
| 483 if((nan <= nan) != FALSE) { | |
| 484 logln("WARNING: NaN <= NaN returned TRUE, should be FALSE"); | |
| 485 } | |
| 486 | |
| 487 if((nan <= pinf) != FALSE) { | |
| 488 logln("WARNING: NaN <= +Infinity returned TRUE, should be FALSE"); | |
| 489 } | |
| 490 | |
| 491 if((nan <= ninf) != FALSE) { | |
| 492 logln("WARNING: NaN <= -Infinity returned TRUE, should be FALSE"); | |
| 493 } | |
| 494 | |
| 495 if((nan <= ten) != FALSE) { | |
| 496 logln("WARNING: NaN <= 10.0 returned TRUE, should be FALSE"); | |
| 497 } | |
| 498 } | |
| 499 | |
| 500 //============================== | |
| 501 | |
| 502 void | |
| 503 PUtilTest::NaNE(void) | |
| 504 { | |
| 505 double pinf = uprv_getInfinity(); | |
| 506 double ninf = -uprv_getInfinity(); | |
| 507 double nan = uprv_getNaN(); | |
| 508 double ten = 10.0; | |
| 509 | |
| 510 if((nan == nan) != FALSE) { | |
| 511 logln("WARNING: NaN == NaN returned TRUE, should be FALSE"); | |
| 512 } | |
| 513 | |
| 514 if((nan == pinf) != FALSE) { | |
| 515 logln("WARNING: NaN == +Infinity returned TRUE, should be FALSE"); | |
| 516 } | |
| 517 | |
| 518 if((nan == ninf) != FALSE) { | |
| 519 logln("WARNING: NaN == -Infinity returned TRUE, should be FALSE"); | |
| 520 } | |
| 521 | |
| 522 if((nan == ten) != FALSE) { | |
| 523 logln("WARNING: NaN == 10.0 returned TRUE, should be FALSE"); | |
| 524 } | |
| 525 } | |
| 526 | |
| 527 //============================== | |
| 528 | |
| 529 void | |
| 530 PUtilTest::NaNNE(void) | |
| 531 { | |
| 532 double pinf = uprv_getInfinity(); | |
| 533 double ninf = -uprv_getInfinity(); | |
| 534 double nan = uprv_getNaN(); | |
| 535 double ten = 10.0; | |
| 536 | |
| 537 if((nan != nan) != TRUE) { | |
| 538 logln("WARNING: NaN != NaN returned FALSE, should be TRUE"); | |
| 539 } | |
| 540 | |
| 541 if((nan != pinf) != TRUE) { | |
| 542 logln("WARNING: NaN != +Infinity returned FALSE, should be TRUE"); | |
| 543 } | |
| 544 | |
| 545 if((nan != ninf) != TRUE) { | |
| 546 logln("WARNING: NaN != -Infinity returned FALSE, should be TRUE"); | |
| 547 } | |
| 548 | |
| 549 if((nan != ten) != TRUE) { | |
| 550 logln("WARNING: NaN != 10.0 returned FALSE, should be TRUE"); | |
| 551 } | |
| 552 } | |
| OLD | NEW |