]> git.saurik.com Git - apple/icu.git/blame - icuSources/test/cintltst/putiltst.c
ICU-3.13.tar.gz
[apple/icu.git] / icuSources / test / cintltst / putiltst.c
CommitLineData
b75a7d8f
A
1/********************************************************************
2 * COPYRIGHT:
3 * Copyright (c) 1998-2003, International Business Machines Corporation and
4 * others. All Rights Reserved.
5 ********************************************************************/
6/*
7* File putiltst.c (Tests the API in putil)
8*
9* Modification History:
10*
11* Date Name Description
12* 07/12/2000 Madhu Creation
13*******************************************************************************
14*/
15
16#include "unicode/utypes.h"
17#include "cintltst.h"
18#include "cmemory.h"
19#include "unicode/putil.h"
20#include "unicode/ustring.h"
21#include "cstring.h"
22
23static UBool compareWithNAN(double x, double y);
24static void doAssert(double expect, double got, const char *message);
25
26static void TestPUtilAPI(void){
27
28 double n1=0.0, y1=0.0, expn1, expy1;
29 double value1 = 0.021;
30 UVersionInfo versionArray = {0x01, 0x00, 0x02, 0x02};
31 char versionString[17]; /* xxx.xxx.xxx.xxx\0 */
32 char *str=0;
33 UBool isTrue=FALSE;
34
35 log_verbose("Testing the API uprv_modf()\n");
36 y1 = uprv_modf(value1, &n1);
37 expn1=0;
38 expy1=0.021;
39 if(y1 != expy1 || n1 != expn1){
40 log_err("Error in uprv_modf. Expected IntegralValue=%f, Got=%f, \n Expected FractionalValue=%f, Got=%f\n",
41 expn1, n1, expy1, y1);
42 }
43 if(VERBOSITY){
44 log_verbose("[float] x = %f n = %f y = %f\n", value1, n1, y1);
45 }
46 log_verbose("Testing the API uprv_fmod()\n");
47 expn1=uprv_fmod(30.50, 15.00);
48 doAssert(expn1, 0.5, "uprv_fmod(30.50, 15.00) failed.");
49
50 log_verbose("Testing the API uprv_ceil()\n");
51 expn1=uprv_ceil(value1);
52 doAssert(expn1, 1, "uprv_ceil(0.021) failed.");
53
54 log_verbose("Testing the API uprv_floor()\n");
55 expn1=uprv_floor(value1);
56 doAssert(expn1, 0, "uprv_floor(0.021) failed.");
57
58 log_verbose("Testing the API uprv_fabs()\n");
59 expn1=uprv_fabs((2.02-1.345));
60 doAssert(expn1, 0.675, "uprv_fabs(2.02-1.345) failed.");
61
62 log_verbose("Testing the API uprv_fmax()\n");
63 doAssert(uprv_fmax(2.4, 1.2), 2.4, "uprv_fmax(2.4, 1.2) failed.");
64
65 log_verbose("Testing the API uprv_fmax() with x value= NaN\n");
66 expn1=uprv_fmax(uprv_getNaN(), 1.2);
67 doAssert(expn1, uprv_getNaN(), "uprv_fmax(uprv_getNaN(), 1.2) failed. when one parameter is NaN");
68
69 log_verbose("Testing the API uprv_fmin()\n");
70 doAssert(uprv_fmin(2.4, 1.2), 1.2, "uprv_fmin(2.4, 1.2) failed.");
71
72 log_verbose("Testing the API uprv_fmin() with x value= NaN\n");
73 expn1=uprv_fmin(uprv_getNaN(), 1.2);
74 doAssert(expn1, uprv_getNaN(), "uprv_fmin(uprv_getNaN(), 1.2) failed. when one parameter is NaN");
75
76 log_verbose("Testing the API uprv_max()\n");
77 doAssert(uprv_max(4, 2), 4, "uprv_max(4, 2) failed.");
78
79 log_verbose("Testing the API uprv_min()\n");
80 doAssert(uprv_min(-4, 2), -4, "uprv_min(-4, 2) failed.");
81
82 log_verbose("Testing the API uprv_trunc()\n");
83 doAssert(uprv_trunc(12.3456), 12, "uprv_trunc(12.3456) failed.");
84 doAssert(uprv_trunc(12.234E2), 1223, "uprv_trunc(12.234E2) failed.");
85 doAssert(uprv_trunc(uprv_getNaN()), uprv_getNaN(), "uprv_trunc(uprv_getNaN()) failed. with parameter=NaN");
86 doAssert(uprv_trunc(uprv_getInfinity()), uprv_getInfinity(), "uprv_trunc(uprv_getInfinity()) failed. with parameter=Infinity");
87
88
89 log_verbose("Testing the API uprv_pow10()\n");
90 doAssert(uprv_pow10(4), 10000, "uprv_pow10(4) failed.");
91
92 log_verbose("Testing the API uprv_log10()\n");
93 doAssert(uprv_log10(3456), 3, "uprv_log10(3456) failed.");
94#ifdef OS390
95 doAssert(uprv_log10(1.0e55), 55, "uprv_log10(1.0e55) failed.");
96#else
97 doAssert(uprv_log10(1.0e300), 300, "uprv_log10(1.0e300) failed.");
98#endif
99 log_verbose("Testing the API uprv_isNegativeInfinity()\n");
100 isTrue=uprv_isNegativeInfinity(uprv_getInfinity() * -1);
101 if(isTrue != TRUE){
102 log_err("ERROR: uprv_isNegativeInfinity failed.\n");
103 }
104 log_verbose("Testing the API uprv_isPositiveInfinity()\n");
105 isTrue=uprv_isPositiveInfinity(uprv_getInfinity());
106 if(isTrue != TRUE){
107 log_err("ERROR: uprv_isPositiveInfinity failed.\n");
108 }
109 log_verbose("Testing the API uprv_isInfinite()\n");
110 isTrue=uprv_isInfinite(uprv_getInfinity());
111 if(isTrue != TRUE){
112 log_err("ERROR: uprv_isInfinite failed.\n");
113 }
114
115 log_verbose("Testing the API uprv_digitsAfterDecimal()....\n");
116 doAssert(uprv_digitsAfterDecimal(value1), 3, "uprv_digitsAfterDecimal() failed.");
117 doAssert(uprv_digitsAfterDecimal(1.2345E2), 2, "uprv_digitsAfterDecimal(1.2345E2) failed.");
118 doAssert(uprv_digitsAfterDecimal(1.2345E-2), 6, "uprv_digitsAfterDecimal(1.2345E-2) failed.");
119 doAssert(uprv_digitsAfterDecimal(1.2345E2), 2, "uprv_digitsAfterDecimal(1.2345E2) failed.");
120 doAssert(uprv_digitsAfterDecimal(-1.2345E-20), 24, "uprv_digitsAfterDecimal(1.2345E-20) failed.");
121 doAssert(uprv_digitsAfterDecimal(1.2345E20), 0, "uprv_digitsAfterDecimal(1.2345E20) failed.");
122 doAssert(uprv_digitsAfterDecimal(-0.021), 3, "uprv_digitsAfterDecimal(-0.021) failed.");
123 doAssert(uprv_digitsAfterDecimal(23.0), 0, "uprv_digitsAfterDecimal(23.0) failed.");
124 doAssert(uprv_digitsAfterDecimal(0.022223333321), 9, "uprv_digitsAfterDecimal(0.022223333321) failed.");
125
126
127 log_verbose("Testing the API u_versionToString().....\n");
128 u_versionToString(versionArray, versionString);
129 if(strcmp(versionString, "1.0.2.2") != 0){
130 log_err("ERROR: u_versionToString() failed. Expected: 1.0.2.2, Got=%s\n", versionString);
131 }
132 log_verbose("Testing the API u_versionToString().....with versionArray=NULL\n");
133 u_versionToString(NULL, versionString);
134 if(strcmp(versionString, "") != 0){
135 log_err("ERROR: u_versionToString() failed. with versionArray=NULL. It should just return\n");
136 }
137 log_verbose("Testing the API u_versionToString().....with versionArray=NULL\n");
138 u_versionToString(NULL, versionString);
139 if(strcmp(versionString, "") != 0){
140 log_err("ERROR: u_versionToString() failed . It should just return\n");
141 }
142 log_verbose("Testing the API u_versionToString().....with versionString=NULL\n");
143 u_versionToString(versionArray, NULL);
144 if(strcmp(versionString, "") != 0){
145 log_err("ERROR: u_versionToString() failed. with versionArray=NULL It should just return\n");
146 }
147 versionArray[0] = 0x0a;
148 log_verbose("Testing the API u_versionToString().....\n");
149 u_versionToString(versionArray, versionString);
150 if(strcmp(versionString, "10.0.2.2") != 0){
151 log_err("ERROR: u_versionToString() failed. Expected: 10.0.2.2, Got=%s\n", versionString);
152 }
153 versionArray[0] = 0xa0;
154 u_versionToString(versionArray, versionString);
155 if(strcmp(versionString, "160.0.2.2") != 0){
156 log_err("ERROR: u_versionToString() failed. Expected: 160.0.2.2, Got=%s\n", versionString);
157 }
158 versionArray[0] = 0xa0;
159 versionArray[1] = 0xa0;
160 u_versionToString(versionArray, versionString);
161 if(strcmp(versionString, "160.160.2.2") != 0){
162 log_err("ERROR: u_versionToString() failed. Expected: 160.160.2.2, Got=%s\n", versionString);
163 }
164 versionArray[0] = 0x01;
165 versionArray[1] = 0x0a;
166 u_versionToString(versionArray, versionString);
167 if(strcmp(versionString, "1.10.2.2") != 0){
168 log_err("ERROR: u_versionToString() failed. Expected: 160.160.2.2, Got=%s\n", versionString);
169 }
170
171 log_verbose("Testing the API u_versionFromString() ....\n");
172 u_versionFromString(versionArray, "1.3.5.6");
173 u_versionToString(versionArray, versionString);
174 if(strcmp(versionString, "1.3.5.6") != 0){
175 log_err("ERROR: u_getVersion() failed. Expected: 1.3.5.6, Got=%s\n", versionString);
176 }
177 log_verbose("Testing the API u_versionFromString() where versionArray=NULL....\n");
178 u_versionFromString(NULL, "1.3.5.6");
179 u_versionToString(versionArray, versionString);
180 if(strcmp(versionString, "1.3.5.6") != 0){
181 log_err("ERROR: u_getVersion() failed. Expected: 1.3.5.6, Got=%s\n", versionString);
182 }
183
184 log_verbose("Testing the API u_getVersion().....\n");
185 u_getVersion(versionArray);
186 u_versionToString(versionArray, versionString);
187 if(strcmp(versionString, U_ICU_VERSION) != 0){
188 log_err("ERROR: u_getVersion() failed. Got=%s, expected %s\n", versionString, U_ICU_VERSION);
189 }
190 log_verbose("Testing the API u_errorName()...\n");
191 str=(char*)u_errorName((UErrorCode)0);
192 if(strcmp(str, "U_ZERO_ERROR") != 0){
193 log_err("ERROR: u_getVersion() failed. Expected: U_ZERO_ERROR Got=%s\n", str);
194 }
195 log_verbose("Testing the API u_errorName()...\n");
196 str=(char*)u_errorName((UErrorCode)-127);
197 if(strcmp(str, "U_USING_DEFAULT_WARNING") != 0){
198 log_err("ERROR: u_getVersion() failed. Expected: U_USING_DEFAULT_WARNING Got=%s\n", str);
199 }
200 log_verbose("Testing the API u_errorName().. with BOGUS ERRORCODE...\n");
201 str=(char*)u_errorName((UErrorCode)200);
202 if(strcmp(str, "[BOGUS UErrorCode]") != 0){
203 log_err("ERROR: u_getVersion() failed. Expected: [BOGUS UErrorCode] Got=%s\n", str);
204 }
205
206 {
207 const char* dataDirectory;
208 UChar *udataDir=0;
209 UChar temp[100];
210 char *charvalue=0;
211 log_verbose("Testing chars to UChars\n");
212
213 /* This cannot really work on a japanese system. u_uastrcpy will have different results than */
214 /* u_charsToUChars when there is a backslash in the string! */
215 /*dataDirectory=u_getDataDirectory();*/
216
217 dataDirectory="directory1"; /*no backslashes*/
218 udataDir=(UChar*)malloc(sizeof(UChar) * (strlen(dataDirectory) + 1));
219 u_charsToUChars(dataDirectory, udataDir, (strlen(dataDirectory)+1));
220 u_uastrcpy(temp, dataDirectory);
221
222 if(u_strcmp(temp, udataDir) != 0){
223 log_err("ERROR: u_charsToUChars failed. Expected %s, Got %s\n", austrdup(temp), austrdup(udataDir));
224 }
225 log_verbose("Testing UChars to chars\n");
226 charvalue=(char*)malloc(sizeof(char) * (u_strlen(udataDir) + 1));
227
228 u_UCharsToChars(udataDir, charvalue, (u_strlen(udataDir)+1));
229 if(strcmp(charvalue, dataDirectory) != 0){
230 log_err("ERROR: u_UCharsToChars failed. Expected %s, Got %s\n", charvalue, dataDirectory);
231 }
232 free(charvalue);
233 free(udataDir);
234 }
235
236 log_verbose("Testing uprv_timezone()....\n");
237 {
238 int32_t tzoffset = uprv_timezone();
239 log_verbose("Value returned from uprv_timezone = %d\n", tzoffset);
240 if (tzoffset != 28800) {
241 log_verbose("***** WARNING: If testing in the PST timezone, t_timezone should return 28800! *****");
242 }
243 if ((tzoffset % 1800 != 0)) {
244 log_err("FAIL: t_timezone may be incorrect. It is not a multiple of 30min.");
245 }
246 tzoffset=uprv_getUTCtime();
247
248 }
249}
250
251#if 0
252static void testIEEEremainder()
253{
254 double pinf = uprv_getInfinity();
255 double ninf = -uprv_getInfinity();
256 double nan = uprv_getNaN();
257/* double pzero = 0.0;*/
258/* double nzero = 0.0;
259 nzero *= -1;*/
260
261 /* simple remainder checks*/
262 remainderTest(7.0, 2.5, -0.5);
263 remainderTest(7.0, -2.5, -0.5);
264 /* this should work
265 remainderTest(43.7, 2.5, 1.2);
266 */
267
268 /* infinity and real*/
269 remainderTest(1.0, pinf, 1.0);
270 remainderTest(1.0, ninf, 1.0);
271
272 /*test infinity and real*/
273 remainderTest(nan, 1.0, nan);
274 remainderTest(1.0, nan, nan);
275 /*test infinity and nan*/
276 remainderTest(ninf, nan, nan);
277 remainderTest(pinf, nan, nan);
278
279 /* test infinity and zero */
280/* remainderTest(pinf, pzero, 1.25);
281 remainderTest(pinf, nzero, 1.25);
282 remainderTest(ninf, pzero, 1.25);
283 remainderTest(ninf, nzero, 1.25); */
284}
285
286static void remainderTest(double x, double y, double exp)
287{
288 double result = uprv_IEEEremainder(x,y);
289
290 if( uprv_isNaN(result) &&
291 ! ( uprv_isNaN(x) || uprv_isNaN(y))) {
292 log_err("FAIL: got NaN as result without NaN as argument");
293 log_err(" IEEEremainder(%f, %f) is %f, expected %f\n", x, y, result, exp);
294 }
295 else if(!compareWithNAN(result, exp)) {
296 log_err("FAIL: IEEEremainder(%f, %f) is %f, expected %f\n", x, y, result, exp);
297 } else{
298 log_verbose("OK: IEEEremainder(%f, %f) is %f\n", x, y, result);
299 }
300
301}
302#endif
303
304static UBool compareWithNAN(double x, double y)
305{
306 if( uprv_isNaN(x) || uprv_isNaN(y) ) {
307 if(!uprv_isNaN(x) || !uprv_isNaN(y) ) {
308 return FALSE;
309 }
310 }
311 else if (y != x) { /* no NaN's involved */
312 return FALSE;
313 }
314
315 return TRUE;
316}
317
318static void doAssert(double got, double expect, const char *message)
319{
320 if(! compareWithNAN(expect, got) ) {
321 log_err("ERROR : %s. Expected : %lf, Got: %lf\n", message, expect, got);
322 }
323}
324
325
326#define _CODE_ARR_LEN 8
327static const UErrorCode errorCode[_CODE_ARR_LEN] = {
328 U_USING_FALLBACK_WARNING,
329 U_STRING_NOT_TERMINATED_WARNING,
330 U_ILLEGAL_ARGUMENT_ERROR,
331 U_STATE_TOO_OLD_ERROR,
332 U_BAD_VARIABLE_DEFINITION,
333 U_RULE_MASK_ERROR,
334 U_UNEXPECTED_TOKEN,
335 U_UNSUPPORTED_ATTRIBUTE
336};
337
338static const char* str[] = {
339 "U_USING_FALLBACK_WARNING",
340 "U_STRING_NOT_TERMINATED_WARNING",
341 "U_ILLEGAL_ARGUMENT_ERROR",
342 "U_STATE_TOO_OLD_ERROR",
343 "U_BAD_VARIABLE_DEFINITION",
344 "U_RULE_MASK_ERROR",
345 "U_UNEXPECTED_TOKEN",
346 "U_UNSUPPORTED_ATTRIBUTE"
347};
348
349static void TestErrorName(void){
350 int32_t code=0;
351 const char* errorName ;
352 for(;code<U_ERROR_LIMIT;code++){
353 errorName = u_errorName((UErrorCode)code);
354 }
355
356 for(code=0;code<_CODE_ARR_LEN; code++){
357 errorName = u_errorName(errorCode[code]);
358 if(uprv_strcmp(str[code],errorName )!=0){
359 log_err("Error : u_errorName failed. Expected: %s Got: %s \n",str[code],errorName);
360 }
361 }
362}
363
364void addPUtilTest(TestNode** root);
365
366void
367addPUtilTest(TestNode** root)
368{
369 addTest(root, &TestPUtilAPI, "putiltst/TestPUtilAPI");
370/* addTest(root, &testIEEEremainder, "putiltst/testIEEEremainder"); */
371 addTest(root, &TestErrorName, "putiltst/TestErrorName");
372}
373