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