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