1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/******************************************************************** 2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * COPYRIGHT: 354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * Copyright (c) 1998-2012, International Business Machines Corporation and 4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * others. All Rights Reserved. 5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ********************************************************************/ 6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* 7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* File putiltst.c (Tests the API in putil) 8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Modification History: 10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Date Name Description 12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 07/12/2000 Madhu Creation 13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru******************************************************************************* 14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/ 15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/utypes.h" 17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "cintltst.h" 18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "cmemory.h" 19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/putil.h" 20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/ustring.h" 2150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/icudataver.h" 22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "cstring.h" 23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "putilimp.h" 2450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "toolutil.h" 2527f654740f2a26ad62a5c155af9199af9e69b889claireho#include "uinvchar.h" 2627f654740f2a26ad62a5c155af9199af9e69b889claireho#include <stdio.h> 2727f654740f2a26ad62a5c155af9199af9e69b889claireho 28103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/* See the comments on U_SIGNED_RIGHT_SHIFT_IS_ARITHMETIC. */ 2954dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic void TestSignedRightShiftIsArithmetic(void) { 30103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t x=0xfff5fff3; 31103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t m=-1; 32103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t x4=x>>4; 33103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t m1=m>>1; 34103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UBool signedRightShiftIsArithmetic= x4==0xffff5fff && m1==-1; 35103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if(signedRightShiftIsArithmetic==U_SIGNED_RIGHT_SHIFT_IS_ARITHMETIC) { 36103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius log_info("signed right shift is Arithmetic Shift Right: %d\n", 37103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius signedRightShiftIsArithmetic); 38103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } else { 39103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius log_err("error: unexpected signed right shift is Arithmetic Shift Right: %d\n" 40103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius " You need to change the value of U_SIGNED_RIGHT_SHIFT_IS_ARITHMETIC " 41103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "for your platform.\n", 42103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius signedRightShiftIsArithmetic); 43103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 44103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} 45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic UBool compareWithNAN(double x, double y); 47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void doAssert(double expect, double got, const char *message); 48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void TestPUtilAPI(void){ 50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru double n1=0.0, y1=0.0, expn1, expy1; 52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru double value1 = 0.021; 53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru char *str=0; 54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UBool isTrue=FALSE; 55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("Testing the API uprv_modf()\n"); 57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru y1 = uprv_modf(value1, &n1); 58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru expn1=0; 59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru expy1=0.021; 60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(y1 != expy1 || n1 != expn1){ 61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("Error in uprv_modf. Expected IntegralValue=%f, Got=%f, \n Expected FractionalValue=%f, Got=%f\n", 62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru expn1, n1, expy1, y1); 63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 6427f654740f2a26ad62a5c155af9199af9e69b889claireho if(getTestOption(VERBOSITY_OPTION)){ 65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("[float] x = %f n = %f y = %f\n", value1, n1, y1); 66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("Testing the API uprv_fmod()\n"); 68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru expn1=uprv_fmod(30.50, 15.00); 69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru doAssert(expn1, 0.5, "uprv_fmod(30.50, 15.00) failed."); 70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("Testing the API uprv_ceil()\n"); 72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru expn1=uprv_ceil(value1); 73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru doAssert(expn1, 1, "uprv_ceil(0.021) failed."); 74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("Testing the API uprv_floor()\n"); 76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru expn1=uprv_floor(value1); 77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru doAssert(expn1, 0, "uprv_floor(0.021) failed."); 78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("Testing the API uprv_fabs()\n"); 80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru expn1=uprv_fabs((2.02-1.345)); 81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru doAssert(expn1, 0.675, "uprv_fabs(2.02-1.345) failed."); 82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("Testing the API uprv_fmax()\n"); 84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru doAssert(uprv_fmax(2.4, 1.2), 2.4, "uprv_fmax(2.4, 1.2) failed."); 85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("Testing the API uprv_fmax() with x value= NaN\n"); 87ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru expn1=uprv_fmax(uprv_getNaN(), 1.2); 88ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru doAssert(expn1, uprv_getNaN(), "uprv_fmax(uprv_getNaN(), 1.2) failed. when one parameter is NaN"); 89ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 90ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("Testing the API uprv_fmin()\n"); 91ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru doAssert(uprv_fmin(2.4, 1.2), 1.2, "uprv_fmin(2.4, 1.2) failed."); 92ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 93ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("Testing the API uprv_fmin() with x value= NaN\n"); 94ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru expn1=uprv_fmin(uprv_getNaN(), 1.2); 95ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru doAssert(expn1, uprv_getNaN(), "uprv_fmin(uprv_getNaN(), 1.2) failed. when one parameter is NaN"); 96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 97ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("Testing the API uprv_max()\n"); 98ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru doAssert(uprv_max(4, 2), 4, "uprv_max(4, 2) failed."); 99ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 100ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("Testing the API uprv_min()\n"); 101ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru doAssert(uprv_min(-4, 2), -4, "uprv_min(-4, 2) failed."); 102ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 103ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("Testing the API uprv_trunc()\n"); 104ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru doAssert(uprv_trunc(12.3456), 12, "uprv_trunc(12.3456) failed."); 105ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru doAssert(uprv_trunc(12.234E2), 1223, "uprv_trunc(12.234E2) failed."); 106ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru doAssert(uprv_trunc(uprv_getNaN()), uprv_getNaN(), "uprv_trunc(uprv_getNaN()) failed. with parameter=NaN"); 107ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru doAssert(uprv_trunc(uprv_getInfinity()), uprv_getInfinity(), "uprv_trunc(uprv_getInfinity()) failed. with parameter=Infinity"); 108ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 109ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 110ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("Testing the API uprv_pow10()\n"); 111ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru doAssert(uprv_pow10(4), 10000, "uprv_pow10(4) failed."); 112ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 113ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("Testing the API uprv_isNegativeInfinity()\n"); 114ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru isTrue=uprv_isNegativeInfinity(uprv_getInfinity() * -1); 115ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(isTrue != TRUE){ 116ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("ERROR: uprv_isNegativeInfinity failed.\n"); 117ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 118ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("Testing the API uprv_isPositiveInfinity()\n"); 119ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru isTrue=uprv_isPositiveInfinity(uprv_getInfinity()); 120ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(isTrue != TRUE){ 121ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("ERROR: uprv_isPositiveInfinity failed.\n"); 122ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 123ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("Testing the API uprv_isInfinite()\n"); 124ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru isTrue=uprv_isInfinite(uprv_getInfinity()); 125ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(isTrue != TRUE){ 126ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("ERROR: uprv_isInfinite failed.\n"); 127ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 128ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 129ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if 0 130ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("Testing the API uprv_digitsAfterDecimal()....\n"); 131ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru doAssert(uprv_digitsAfterDecimal(value1), 3, "uprv_digitsAfterDecimal() failed."); 132ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru doAssert(uprv_digitsAfterDecimal(1.2345E2), 2, "uprv_digitsAfterDecimal(1.2345E2) failed."); 133ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru doAssert(uprv_digitsAfterDecimal(1.2345E-2), 6, "uprv_digitsAfterDecimal(1.2345E-2) failed."); 134ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru doAssert(uprv_digitsAfterDecimal(1.2345E2), 2, "uprv_digitsAfterDecimal(1.2345E2) failed."); 135ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru doAssert(uprv_digitsAfterDecimal(-1.2345E-20), 24, "uprv_digitsAfterDecimal(1.2345E-20) failed."); 136ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru doAssert(uprv_digitsAfterDecimal(1.2345E20), 0, "uprv_digitsAfterDecimal(1.2345E20) failed."); 137ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru doAssert(uprv_digitsAfterDecimal(-0.021), 3, "uprv_digitsAfterDecimal(-0.021) failed."); 138ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru doAssert(uprv_digitsAfterDecimal(23.0), 0, "uprv_digitsAfterDecimal(23.0) failed."); 139ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru doAssert(uprv_digitsAfterDecimal(0.022223333321), 9, "uprv_digitsAfterDecimal(0.022223333321) failed."); 140ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif 141ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 14285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho log_verbose("Testing the API u_errorName()...\n"); 14385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho str=(char*)u_errorName((UErrorCode)0); 14485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if(strcmp(str, "U_ZERO_ERROR") != 0){ 14585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho log_err("ERROR: u_getVersion() failed. Expected: U_ZERO_ERROR Got=%s\n", str); 14685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 14785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho log_verbose("Testing the API u_errorName()...\n"); 14885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho str=(char*)u_errorName((UErrorCode)-127); 14985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if(strcmp(str, "U_USING_DEFAULT_WARNING") != 0){ 15085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho log_err("ERROR: u_getVersion() failed. Expected: U_USING_DEFAULT_WARNING Got=%s\n", str); 15185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 15285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho log_verbose("Testing the API u_errorName().. with BOGUS ERRORCODE...\n"); 15385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho str=(char*)u_errorName((UErrorCode)200); 15485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if(strcmp(str, "[BOGUS UErrorCode]") != 0){ 15585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho log_err("ERROR: u_getVersion() failed. Expected: [BOGUS UErrorCode] Got=%s\n", str); 15685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 15785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 15885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho { 15985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho const char* dataDirectory; 16085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho int32_t dataDirectoryLen; 16185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UChar *udataDir=0; 16285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UChar temp[100]; 16385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho char *charvalue=0; 16485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho log_verbose("Testing chars to UChars\n"); 16585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 16685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho /* This cannot really work on a japanese system. u_uastrcpy will have different results than */ 16785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho /* u_charsToUChars when there is a backslash in the string! */ 16885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho /*dataDirectory=u_getDataDirectory();*/ 16985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 17085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho dataDirectory="directory1"; /*no backslashes*/ 17185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho dataDirectoryLen=(int32_t)strlen(dataDirectory); 17285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho udataDir=(UChar*)malloc(sizeof(UChar) * (dataDirectoryLen + 1)); 17385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho u_charsToUChars(dataDirectory, udataDir, (dataDirectoryLen + 1)); 17485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho u_uastrcpy(temp, dataDirectory); 17585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 17685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if(u_strcmp(temp, udataDir) != 0){ 17785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho log_err("ERROR: u_charsToUChars failed. Expected %s, Got %s\n", austrdup(temp), austrdup(udataDir)); 17885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 17985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho log_verbose("Testing UChars to chars\n"); 18085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho charvalue=(char*)malloc(sizeof(char) * (u_strlen(udataDir) + 1)); 18185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 18285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho u_UCharsToChars(udataDir, charvalue, (u_strlen(udataDir)+1)); 18385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if(strcmp(charvalue, dataDirectory) != 0){ 18485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho log_err("ERROR: u_UCharsToChars failed. Expected %s, Got %s\n", charvalue, dataDirectory); 18585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 18685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho free(charvalue); 18785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho free(udataDir); 18885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 18985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 19085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho log_verbose("Testing uprv_timezone()....\n"); 19185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho { 19285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho int32_t tzoffset = uprv_timezone(); 19385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho log_verbose("Value returned from uprv_timezone = %d\n", tzoffset); 19485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if (tzoffset != 28800) { 19585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho log_verbose("***** WARNING: If testing in the PST timezone, t_timezone should return 28800! *****"); 19685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 19785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if ((tzoffset % 1800 != 0)) { 19827f654740f2a26ad62a5c155af9199af9e69b889claireho log_info("Note: t_timezone offset of %ld (for %s : %s) is not a multiple of 30min.", tzoffset, uprv_tzname(0), uprv_tzname(1)); 19985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 20085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho /*tzoffset=uprv_getUTCtime();*/ 20185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 20285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 20385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho} 20485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 205b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic void TestVersion(void) 20685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho{ 20785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UVersionInfo versionArray = {0x01, 0x00, 0x02, 0x02}; 20885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UVersionInfo versionArray2 = {0x01, 0x00, 0x02, 0x02}; 20985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho char versionString[17]; /* xxx.xxx.xxx.xxx\0 */ 21085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UChar versionUString[] = { 0x0031, 0x002E, 0x0030, 0x002E, 21185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 0x0032, 0x002E, 0x0038, 0x0000 }; /* 1.0.2.8 */ 21250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UVersionInfo version; 21350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 214ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 215ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("Testing the API u_versionToString().....\n"); 216ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru u_versionToString(versionArray, versionString); 217ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(strcmp(versionString, "1.0.2.2") != 0){ 218ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("ERROR: u_versionToString() failed. Expected: 1.0.2.2, Got=%s\n", versionString); 219ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 220ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("Testing the API u_versionToString().....with versionArray=NULL\n"); 221ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru u_versionToString(NULL, versionString); 222ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(strcmp(versionString, "") != 0){ 223ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("ERROR: u_versionToString() failed. with versionArray=NULL. It should just return\n"); 224ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 225ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("Testing the API u_versionToString().....with versionArray=NULL\n"); 226ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru u_versionToString(NULL, versionString); 227ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(strcmp(versionString, "") != 0){ 228ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("ERROR: u_versionToString() failed . It should just return\n"); 229ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 230ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("Testing the API u_versionToString().....with versionString=NULL\n"); 231ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru u_versionToString(versionArray, NULL); 232ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(strcmp(versionString, "") != 0){ 233ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("ERROR: u_versionToString() failed. with versionArray=NULL It should just return\n"); 234ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 235ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru versionArray[0] = 0x0a; 236ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("Testing the API u_versionToString().....\n"); 237ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru u_versionToString(versionArray, versionString); 238ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(strcmp(versionString, "10.0.2.2") != 0){ 239ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("ERROR: u_versionToString() failed. Expected: 10.0.2.2, Got=%s\n", versionString); 240ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 241ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru versionArray[0] = 0xa0; 242ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru u_versionToString(versionArray, versionString); 243ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(strcmp(versionString, "160.0.2.2") != 0){ 244ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("ERROR: u_versionToString() failed. Expected: 160.0.2.2, Got=%s\n", versionString); 245ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 246ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru versionArray[0] = 0xa0; 247ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru versionArray[1] = 0xa0; 248ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru u_versionToString(versionArray, versionString); 249ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(strcmp(versionString, "160.160.2.2") != 0){ 250ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("ERROR: u_versionToString() failed. Expected: 160.160.2.2, Got=%s\n", versionString); 251ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 252ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru versionArray[0] = 0x01; 253ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru versionArray[1] = 0x0a; 254ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru u_versionToString(versionArray, versionString); 255ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(strcmp(versionString, "1.10.2.2") != 0){ 256ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("ERROR: u_versionToString() failed. Expected: 160.160.2.2, Got=%s\n", versionString); 257ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 258ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 259ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("Testing the API u_versionFromString() ....\n"); 260ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru u_versionFromString(versionArray, "1.3.5.6"); 261ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru u_versionToString(versionArray, versionString); 262ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(strcmp(versionString, "1.3.5.6") != 0){ 263ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("ERROR: u_getVersion() failed. Expected: 1.3.5.6, Got=%s\n", versionString); 264ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 265ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("Testing the API u_versionFromString() where versionArray=NULL....\n"); 266ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru u_versionFromString(NULL, "1.3.5.6"); 267ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru u_versionToString(versionArray, versionString); 268ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(strcmp(versionString, "1.3.5.6") != 0){ 269ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("ERROR: u_getVersion() failed. Expected: 1.3.5.6, Got=%s\n", versionString); 270ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 271ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 272ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("Testing the API u_getVersion().....\n"); 273ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru u_getVersion(versionArray); 274ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru u_versionToString(versionArray, versionString); 275ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(strcmp(versionString, U_ICU_VERSION) != 0){ 276ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("ERROR: u_getVersion() failed. Got=%s, expected %s\n", versionString, U_ICU_VERSION); 277ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 27885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho /* test unicode */ 27985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho log_verbose("Testing u_versionFromUString...\n"); 28085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho u_versionFromString(versionArray,"1.0.2.8"); 28185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho u_versionFromUString(versionArray2, versionUString); 28285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho u_versionToString(versionArray2, versionString); 28385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if(memcmp(versionArray, versionArray2, sizeof(UVersionInfo))) { 28485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho log_err("FAIL: u_versionFromUString produced a different result - not 1.0.2.8 but %s [%x.%x.%x.%x]\n", 28585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho versionString, 28685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho (int)versionArray2[0], 28785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho (int)versionArray2[1], 28885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho (int)versionArray2[2], 28985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho (int)versionArray2[3]); 29085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 29185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho else { 29285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho log_verbose(" from UString: %s\n", versionString); 293ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 29450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 29550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /* Test the data version API for better code coverage */ 29650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho u_getDataVersion(version, &status); 29750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (U_FAILURE(status)) { 29850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_data_err("ERROR: Unable to get data version. %s\n", u_errorName(status)); 29950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 30085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho} 301ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 302b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic void TestCompareVersions(void) 30385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho{ 30485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho /* use a 1d array to be palatable to java */ 30585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho const char *testCases[] = { 30685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho /* v1 <|=|> v2 */ 30785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho "0.0.0.0", "=", "0.0.0.0", 30885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho "3.1.2.0", ">", "3.0.9.0", 30985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho "3.2.8.6", "<", "3.4", 31085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho "4.0", ">", "3.2", 31185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho NULL, NULL, NULL 31285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho }; 31385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho const char *v1str; 31485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho const char *opstr; 31585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho const char *v2str; 31685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho int32_t op, invop, got, invgot; 31785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UVersionInfo v1, v2; 31885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho int32_t j; 31950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_verbose("Testing memcmp()\n"); 32085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho for(j=0;testCases[j]!=NULL;j+=3) { 32185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho v1str = testCases[j+0]; 32285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho opstr = testCases[j+1]; 32385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho v2str = testCases[j+2]; 32485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho switch(opstr[0]) { 32585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho case '-': 32685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho case '<': op = -1; break; 32785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho case '0': 32885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho case '=': op = 0; break; 32985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho case '+': 33085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho case '>': op = 1; break; 33185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho default: log_err("Bad operator at j/3=%d\n", (j/3)); return; 332ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 33385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho invop = 0-op; /* inverse operation: with v1 and v2 switched */ 33485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho u_versionFromString(v1, v1str); 33585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho u_versionFromString(v2, v2str); 33650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho got = memcmp(v1, v2, sizeof(UVersionInfo)); 33750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho invgot = memcmp(v2, v1, sizeof(UVersionInfo)); /* Opposite */ 33850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if((got <= 0 && op <= 0) || (got >= 0 && op >= 0)) { 33985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho log_verbose("%d: %s %s %s, OK\n", (j/3), v1str, opstr, v2str); 34085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } else { 34150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_err("%d: %s %s %s: wanted values of the same sign, %d got %d\n", (j/3), v1str, opstr, v2str, op, got); 34285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 34350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if((invgot >= 0 && invop >= 0) || (invgot <= 0 && invop <= 0)) { 34485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho log_verbose("%d: %s (%d) %s, OK (inverse)\n", (j/3), v2str, invop, v1str); 34585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } else { 34650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_err("%d: %s (%d) %s: wanted values of the same sign, %d got %d\n", (j/3), v2str, invop, v1str, invop, invgot); 347ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 34885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 349ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 350ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 35185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 35285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 353ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if 0 354ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void testIEEEremainder() 355ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 356ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru double pinf = uprv_getInfinity(); 357ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru double ninf = -uprv_getInfinity(); 358ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru double nan = uprv_getNaN(); 359ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* double pzero = 0.0;*/ 360ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* double nzero = 0.0; 361ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru nzero *= -1;*/ 362ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 363ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* simple remainder checks*/ 364ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru remainderTest(7.0, 2.5, -0.5); 365ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru remainderTest(7.0, -2.5, -0.5); 366ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* this should work 367ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru remainderTest(43.7, 2.5, 1.2); 368ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 369ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 370ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* infinity and real*/ 371ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru remainderTest(1.0, pinf, 1.0); 372ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru remainderTest(1.0, ninf, 1.0); 373ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 374ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /*test infinity and real*/ 375ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru remainderTest(nan, 1.0, nan); 376ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru remainderTest(1.0, nan, nan); 377ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /*test infinity and nan*/ 378ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru remainderTest(ninf, nan, nan); 379ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru remainderTest(pinf, nan, nan); 380ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 381ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* test infinity and zero */ 382ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* remainderTest(pinf, pzero, 1.25); 383ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru remainderTest(pinf, nzero, 1.25); 384ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru remainderTest(ninf, pzero, 1.25); 385ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru remainderTest(ninf, nzero, 1.25); */ 386ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 387ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 388ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void remainderTest(double x, double y, double exp) 389ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 390ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru double result = uprv_IEEEremainder(x,y); 391ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 392ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if( uprv_isNaN(result) && 393ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ! ( uprv_isNaN(x) || uprv_isNaN(y))) { 394ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("FAIL: got NaN as result without NaN as argument"); 395ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err(" IEEEremainder(%f, %f) is %f, expected %f\n", x, y, result, exp); 396ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 397ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru else if(!compareWithNAN(result, exp)) { 398ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("FAIL: IEEEremainder(%f, %f) is %f, expected %f\n", x, y, result, exp); 399ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else{ 400ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_verbose("OK: IEEEremainder(%f, %f) is %f\n", x, y, result); 401ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 402ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 403ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 404ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif 405ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 406ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic UBool compareWithNAN(double x, double y) 407ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 408ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if( uprv_isNaN(x) || uprv_isNaN(y) ) { 409ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(!uprv_isNaN(x) || !uprv_isNaN(y) ) { 410ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return FALSE; 411ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 412ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 413ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru else if (y != x) { /* no NaN's involved */ 414ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return FALSE; 415ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 416ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 417ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return TRUE; 418ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 419ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 420ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void doAssert(double got, double expect, const char *message) 421ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 422ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(! compareWithNAN(expect, got) ) { 423ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("ERROR : %s. Expected : %lf, Got: %lf\n", message, expect, got); 424ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 425ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 426ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 427ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 428ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define _CODE_ARR_LEN 8 429ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const UErrorCode errorCode[_CODE_ARR_LEN] = { 430ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru U_USING_FALLBACK_WARNING, 431ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru U_STRING_NOT_TERMINATED_WARNING, 432ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru U_ILLEGAL_ARGUMENT_ERROR, 433ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru U_STATE_TOO_OLD_ERROR, 434ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru U_BAD_VARIABLE_DEFINITION, 435ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru U_RULE_MASK_ERROR, 436ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru U_UNEXPECTED_TOKEN, 437ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru U_UNSUPPORTED_ATTRIBUTE 438ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 439ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 440ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic const char* str[] = { 441ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "U_USING_FALLBACK_WARNING", 442ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "U_STRING_NOT_TERMINATED_WARNING", 443ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "U_ILLEGAL_ARGUMENT_ERROR", 444ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "U_STATE_TOO_OLD_ERROR", 445ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "U_BAD_VARIABLE_DEFINITION", 446ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "U_RULE_MASK_ERROR", 447ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "U_UNEXPECTED_TOKEN", 448ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru "U_UNSUPPORTED_ATTRIBUTE" 449ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 450ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 451ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void TestErrorName(void){ 452ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t code=0; 453ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const char* errorName ; 454ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for(;code<U_ERROR_LIMIT;code++){ 455ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errorName = u_errorName((UErrorCode)code); 45650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(!errorName || errorName[0] == 0) { 45750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_err("Error: u_errorName(0x%X) failed.\n",code); 45850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 459ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 460ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 461ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for(code=0;code<_CODE_ARR_LEN; code++){ 462ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errorName = u_errorName(errorCode[code]); 463ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(uprv_strcmp(str[code],errorName )!=0){ 464ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("Error : u_errorName failed. Expected: %s Got: %s \n",str[code],errorName); 465ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 466ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 467ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 468ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 46927f654740f2a26ad62a5c155af9199af9e69b889claireho#define AESTRNCPY_SIZE 13 47027f654740f2a26ad62a5c155af9199af9e69b889claireho 47127f654740f2a26ad62a5c155af9199af9e69b889clairehostatic const char * dump_binline(uint8_t *bytes) { 47227f654740f2a26ad62a5c155af9199af9e69b889claireho static char buf[512]; 47327f654740f2a26ad62a5c155af9199af9e69b889claireho int32_t i; 47427f654740f2a26ad62a5c155af9199af9e69b889claireho for(i=0;i<13;i++) { 47527f654740f2a26ad62a5c155af9199af9e69b889claireho sprintf(buf+(i*3), "%02x ", bytes[i]); 47627f654740f2a26ad62a5c155af9199af9e69b889claireho } 47727f654740f2a26ad62a5c155af9199af9e69b889claireho return buf; 47827f654740f2a26ad62a5c155af9199af9e69b889claireho} 47927f654740f2a26ad62a5c155af9199af9e69b889claireho 48027f654740f2a26ad62a5c155af9199af9e69b889clairehostatic void Test_aestrncpy(int32_t line, const uint8_t *expect, const uint8_t *src, int32_t len) 48127f654740f2a26ad62a5c155af9199af9e69b889claireho{ 48227f654740f2a26ad62a5c155af9199af9e69b889claireho uint8_t str_buf[AESTRNCPY_SIZE] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; 48327f654740f2a26ad62a5c155af9199af9e69b889claireho uint8_t *ret; 48427f654740f2a26ad62a5c155af9199af9e69b889claireho 48527f654740f2a26ad62a5c155af9199af9e69b889claireho log_verbose("\n%s:%d: Beginning test of uprv_aestrncpy(dst, src, %d)\n", __FILE__, line, len); 48627f654740f2a26ad62a5c155af9199af9e69b889claireho ret = uprv_aestrncpy(str_buf, src, len); 48727f654740f2a26ad62a5c155af9199af9e69b889claireho if(ret != str_buf) { 48827f654740f2a26ad62a5c155af9199af9e69b889claireho log_err("\n%s:%d: FAIL: uprv_aestrncpy returned %p expected %p\n", __FILE__, line, (void*)ret, (void*)str_buf); 48927f654740f2a26ad62a5c155af9199af9e69b889claireho } 49027f654740f2a26ad62a5c155af9199af9e69b889claireho if(!uprv_memcmp(str_buf, expect, AESTRNCPY_SIZE)) { 49127f654740f2a26ad62a5c155af9199af9e69b889claireho log_verbose("\n%s:%d: OK - compared OK.", __FILE__, line); 49227f654740f2a26ad62a5c155af9199af9e69b889claireho log_verbose("\n%s:%d: expected: %s", __FILE__, line, dump_binline((uint8_t *)expect)); 49327f654740f2a26ad62a5c155af9199af9e69b889claireho log_verbose("\n%s:%d: got : %s\n", __FILE__, line, dump_binline(str_buf)); 49427f654740f2a26ad62a5c155af9199af9e69b889claireho } else { 49527f654740f2a26ad62a5c155af9199af9e69b889claireho log_err ("\n%s:%d: FAIL: uprv_aestrncpy output differs", __FILE__, line); 49627f654740f2a26ad62a5c155af9199af9e69b889claireho log_err ("\n%s:%d: expected: %s", __FILE__, line, dump_binline((uint8_t *)expect)); 49727f654740f2a26ad62a5c155af9199af9e69b889claireho log_err ("\n%s:%d: got : %s\n", __FILE__, line, dump_binline(str_buf)); 49827f654740f2a26ad62a5c155af9199af9e69b889claireho } 49927f654740f2a26ad62a5c155af9199af9e69b889claireho} 50027f654740f2a26ad62a5c155af9199af9e69b889claireho 50127f654740f2a26ad62a5c155af9199af9e69b889clairehostatic void TestString(void) 50227f654740f2a26ad62a5c155af9199af9e69b889claireho{ 50327f654740f2a26ad62a5c155af9199af9e69b889claireho 50427f654740f2a26ad62a5c155af9199af9e69b889claireho uint8_t str_tst[AESTRNCPY_SIZE] = { 0x81, 0x4b, 0x5c, 0x82, 0x25, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f }; 50527f654740f2a26ad62a5c155af9199af9e69b889claireho 50627f654740f2a26ad62a5c155af9199af9e69b889claireho uint8_t str_exp1[AESTRNCPY_SIZE] = { 0x61, 0x2e, 0x2a, 0x62, 0x0a, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; 50727f654740f2a26ad62a5c155af9199af9e69b889claireho uint8_t str_exp2[AESTRNCPY_SIZE] = { 0x61, 0x2e, 0x2a, 0x62, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; 50827f654740f2a26ad62a5c155af9199af9e69b889claireho uint8_t str_exp3[AESTRNCPY_SIZE] = { 0x61, 0x2e, 0x2a, 0x62, 0x0a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff }; 50927f654740f2a26ad62a5c155af9199af9e69b889claireho 51027f654740f2a26ad62a5c155af9199af9e69b889claireho 51127f654740f2a26ad62a5c155af9199af9e69b889claireho 51227f654740f2a26ad62a5c155af9199af9e69b889claireho /* test #1- copy with -1 length */ 51327f654740f2a26ad62a5c155af9199af9e69b889claireho Test_aestrncpy(__LINE__, str_exp1, str_tst, -1); 51427f654740f2a26ad62a5c155af9199af9e69b889claireho Test_aestrncpy(__LINE__, str_exp1, str_tst, 6); 51527f654740f2a26ad62a5c155af9199af9e69b889claireho Test_aestrncpy(__LINE__, str_exp2, str_tst, 5); 51627f654740f2a26ad62a5c155af9199af9e69b889claireho Test_aestrncpy(__LINE__, str_exp3, str_tst, 8); 51727f654740f2a26ad62a5c155af9199af9e69b889claireho} 51827f654740f2a26ad62a5c155af9199af9e69b889claireho 519ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid addPUtilTest(TestNode** root); 520ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 52150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostatic void addToolUtilTests(TestNode** root); 52250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 523ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid 524ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruaddPUtilTest(TestNode** root) 525ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 52685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho addTest(root, &TestVersion, "putiltst/TestVersion"); 52785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho addTest(root, &TestCompareVersions, "putiltst/TestCompareVersions"); 528ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* addTest(root, &testIEEEremainder, "putiltst/testIEEEremainder"); */ 529ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru addTest(root, &TestErrorName, "putiltst/TestErrorName"); 53050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho addTest(root, &TestPUtilAPI, "putiltst/TestPUtilAPI"); 53127f654740f2a26ad62a5c155af9199af9e69b889claireho addTest(root, &TestString, "putiltst/TestString"); 53250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho addToolUtilTests(root); 53350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 53450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 53550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* Tool Util Tests ================ */ 53650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#define TOOLUTIL_TESTBUF_SIZE 2048 53750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostatic char toolutil_testBuf[TOOLUTIL_TESTBUF_SIZE]; 53850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostatic const char *NULLSTR="NULL"; 53950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 54050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/** 54150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Normalize NULL to 'NULL' for testing 54250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 54350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#define STRNULL(x) ((x)?(x):NULLSTR) 54450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 54550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostatic void toolutil_findBasename(void) 54650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho{ 54750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho struct { 54850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *inBuf; 54950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *expectResult; 55050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } testCases[] = { 55150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 55250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho U_FILE_SEP_STRING "usr" U_FILE_SEP_STRING "bin" U_FILE_SEP_STRING "pkgdata", 55350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "pkgdata" 55450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho }, 55550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 55650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho U_FILE_SEP_STRING "usr" U_FILE_SEP_STRING "bin" U_FILE_SEP_STRING, 55750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "" 55850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho }, 55950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 56050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho U_FILE_ALT_SEP_STRING "usr" U_FILE_ALT_SEP_STRING "bin" U_FILE_ALT_SEP_STRING "pkgdata", 56150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "pkgdata" 56250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho }, 56350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 56450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho U_FILE_ALT_SEP_STRING "usr" U_FILE_ALT_SEP_STRING "bin" U_FILE_ALT_SEP_STRING, 56550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "" 56650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho }, 56750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho }; 56850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t count=(sizeof(testCases)/sizeof(testCases[0])); 56950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t i; 57050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 57150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 57250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_verbose("Testing findBaseName()\n"); 57350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho for(i=0;i<count;i++) { 57450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *result; 57550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *input = STRNULL(testCases[i].inBuf); 57650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *expect = STRNULL(testCases[i].expectResult); 57750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_verbose("Test case [%d/%d]: %s\n", i, count-1, input); 57850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho result = STRNULL(findBasename(testCases[i].inBuf)); 57950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(result==expect||!strcmp(result,expect)) { 58050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_verbose(" -> %s PASS\n", result); 58150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } else { 58250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_err("FAIL: Test case [%d/%d]: %s -> %s but expected %s\n", i, count-1, input, result, expect); 58350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 58450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 58550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 58650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 58750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 58850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostatic void toolutil_findDirname(void) 58950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho{ 59050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int i; 59150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho struct { 59250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *inBuf; 59350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t outBufLen; 59450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode expectStatus; 59550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *expectResult; 59650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } testCases[] = { 59750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 59850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho U_FILE_SEP_STRING "usr" U_FILE_SEP_STRING "bin" U_FILE_SEP_STRING "pkgdata", 59950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 200, 60050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho U_ZERO_ERROR, 60150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho U_FILE_SEP_STRING "usr" U_FILE_SEP_STRING "bin", 60250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho }, 60350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 60450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho U_FILE_SEP_STRING "usr" U_FILE_SEP_STRING "bin" U_FILE_SEP_STRING "pkgdata", 60550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2, 60650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho U_BUFFER_OVERFLOW_ERROR, 60750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho NULL 60850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho }, 60950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 61050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho U_FILE_ALT_SEP_STRING "usr" U_FILE_ALT_SEP_STRING "bin" U_FILE_ALT_SEP_STRING "pkgdata", 61150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 200, 61250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho U_ZERO_ERROR, 61350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho U_FILE_ALT_SEP_STRING "usr" U_FILE_ALT_SEP_STRING "bin" 61450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho }, 61550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 61650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho U_FILE_ALT_SEP_STRING "usr" U_FILE_ALT_SEP_STRING "bin" U_FILE_ALT_SEP_STRING "pkgdata", 61750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2, 61850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho U_BUFFER_OVERFLOW_ERROR, 61950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho NULL 62050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho }, 62150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 62250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho U_FILE_ALT_SEP_STRING "usr" U_FILE_ALT_SEP_STRING "bin" U_FILE_SEP_STRING "pkgdata", 62350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 200, 62450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho U_ZERO_ERROR, 62550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho U_FILE_ALT_SEP_STRING "usr" U_FILE_ALT_SEP_STRING "bin" 62650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho }, 62750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 62850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho U_FILE_ALT_SEP_STRING "usr" U_FILE_SEP_STRING "bin" U_FILE_ALT_SEP_STRING "pkgdata", 62950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 200, 63050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho U_ZERO_ERROR, 63150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho U_FILE_ALT_SEP_STRING "usr" U_FILE_SEP_STRING "bin" 63250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho }, 63350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 63450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho U_FILE_ALT_SEP_STRING "usr" U_FILE_ALT_SEP_STRING "bin" U_FILE_ALT_SEP_STRING "pkgdata", 63550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2, 63650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho U_BUFFER_OVERFLOW_ERROR, 63750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho NULL 63850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho }, 63950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 64050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho U_FILE_ALT_SEP_STRING "vmlinuz", 64150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 200, 64250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho U_ZERO_ERROR, 64350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho U_FILE_ALT_SEP_STRING 64450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho }, 64550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 64650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho U_FILE_SEP_STRING "vmlinux", 64750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 200, 64850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho U_ZERO_ERROR, 64950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho U_FILE_SEP_STRING 65050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho }, 65150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 65250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "pkgdata", 65350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 0, 65450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho U_BUFFER_OVERFLOW_ERROR, 65550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho NULL 65650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho }, 65750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 65850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "pkgdata", 65950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2, 66050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho U_ZERO_ERROR, 661103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "" 66250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 66350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho }; 66450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t count=(sizeof(testCases)/sizeof(testCases[0])); 66550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 66650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_verbose("Testing findDirname()\n"); 66750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho for(i=0;i<count;i++) { 66850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *result; 66950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *input = STRNULL(testCases[i].inBuf); 67050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *expect = STRNULL(testCases[i].expectResult); 67150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 67250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho uprv_memset(toolutil_testBuf, 0x55, TOOLUTIL_TESTBUF_SIZE); 67350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 67450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_verbose("Test case [%d/%d]: %s\n", i, count-1, input); 67550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho result = STRNULL(findDirname(testCases[i].inBuf, toolutil_testBuf, testCases[i].outBufLen, &status)); 67650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_verbose(" -> %s, \n", u_errorName(status)); 67750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(status != testCases[i].expectStatus) { 67850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_verbose("FAIL: Test case [%d/%d]: %s got error code %s but expected %s\n", i, count-1, input, u_errorName(status), u_errorName(testCases[i].expectStatus)); 67950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 68050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(result==expect||!strcmp(result,expect)) { 68150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_verbose(" = -> %s \n", result); 68250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } else { 68350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_err("FAIL: Test case [%d/%d]: %s -> %s but expected %s\n", i, count-1, input, result, expect); 68450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 68550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 686ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 687ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 68850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 68950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 69050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostatic void addToolUtilTests(TestNode** root) { 69150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho addTest(root, &toolutil_findBasename, "putiltst/toolutil/findBasename"); 69250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho addTest(root, &toolutil_findDirname, "putiltst/toolutil/findDirname"); 693103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius addTest(root, &TestSignedRightShiftIsArithmetic, "putiltst/toolutil/TestSignedRightShiftIsArithmetic"); 69450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /* 69550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Not yet tested: 69650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 69750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho addTest(root, &toolutil_getLongPathname, "putiltst/toolutil/getLongPathname"); 69850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho addTest(root, &toolutil_getCurrentYear, "putiltst/toolutil/getCurrentYear"); 69950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho addTest(root, &toolutil_UToolMemory, "putiltst/toolutil/UToolMemory"); 70050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 70150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 702