]>
git.saurik.com Git - apple/icu.git/blob - icuSources/test/cintltst/cstrtest.c
2 **********************************************************************
3 * Copyright (C) 1998-2004, International Business Machines Corporation
4 * and others. All Rights Reserved.
5 **********************************************************************
9 * Modification History:
11 * Date Name Description
12 * 07/13/2000 Madhu created
13 *******************************************************************************
16 #include "unicode/ustring.h"
17 #include "unicode/ucnv.h"
23 #define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
25 static void TestAPI(void);
26 void addCStringTest(TestNode
** root
);
28 static void TestInvariant(void);
30 void addCStringTest(TestNode
** root
) {
31 addTest(root
, &TestAPI
, "tsutil/cstrtest/TestAPI");
32 addTest(root
, &TestInvariant
, "tsutil/cstrtest/TestInvariant");
35 static void TestAPI(void)
38 char src
[30]="HELLO THERE", dest
[30];
39 static const char *const abc
="abcdefghijklmnopqrstuvwxyz", *const ABC
="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
43 log_verbose("Testing uprv_tolower() and uprv_toupper()\n");
44 for(i
=0; i
<=26; ++i
) {
45 dest
[i
]=uprv_tolower(abc
[i
]);
47 if(0!=strcmp(abc
, dest
)) {
48 log_err("uprv_tolower(abc) failed\n");
51 for(i
=0; i
<=26; ++i
) {
52 dest
[i
]=uprv_tolower(ABC
[i
]);
54 if(0!=strcmp(abc
, dest
)) {
55 log_err("uprv_tolower(ABC) failed\n");
58 for(i
=0; i
<=26; ++i
) {
59 dest
[i
]=uprv_toupper(abc
[i
]);
61 if(0!=strcmp(ABC
, dest
)) {
62 log_err("uprv_toupper(abc) failed\n");
65 for(i
=0; i
<=26; ++i
) {
66 dest
[i
]=uprv_toupper(ABC
[i
]);
68 if(0!=strcmp(ABC
, dest
)) {
69 log_err("uprv_toupper(ABC) failed\n");
72 log_verbose("Testing the API in cstring\n");
73 T_CString_toLowerCase(src
);
74 if(uprv_strcmp(src
, "hello there") != 0){
75 log_err("FAIL: *** T_CString_toLowerCase() failed. Expected: \"hello there\", Got: \"%s\"\n", src
);
77 T_CString_toUpperCase(src
);
78 if(uprv_strcmp(src
, "HELLO THERE") != 0){
79 log_err("FAIL: *** T_CString_toUpperCase() failed. Expected: \"HELLO THERE\", Got: \"%s\"\n", src
);
82 intValue
=T_CString_stringToInteger("34556", 10);
83 if(intValue
!= 34556){
84 log_err("FAIL: ****T_CString_stringToInteger(\"34556\", 10) failed. Expected: 34556, Got: %d\n", intValue
);
86 intValue
=T_CString_stringToInteger("100", 16);
88 log_err("FAIL: ****T_CString_stringToInteger(\"100\", 16) failed. Expected: 256, Got: %d\n", intValue
);
90 i
= T_CString_integerToString(src
, 34556, 10);
91 if(uprv_strcmp(src
, "34556") != 0 || i
!= 5){
92 log_err("FAIL: ****integerToString(src, 34566, 10); failed. Expected: \"34556\", Got: %s\n", src
);
94 i
= T_CString_integerToString(src
, 431, 16);
95 if(uprv_stricmp(src
, "1AF") != 0 || i
!= 3){
96 log_err("FAIL: ****integerToString(src, 431, 16); failed. Expected: \"1AF\", Got: %s\n", src
);
99 uprv_strcpy(src
, "this is lower case");
100 if(T_CString_stricmp(src
, "THIS is lower CASE") != 0){
101 log_err("FAIL: *****T_CString_stricmp() failed.");
103 if((intValue
=T_CString_stricmp(NULL
, "first string is null") )!= -1){
104 log_err("FAIL: T_CString_stricmp() where the first string is null failed. Expected: -1, returned %d\n", intValue
);
106 if((intValue
=T_CString_stricmp("second string is null", NULL
)) != 1){
107 log_err("FAIL: T_CString_stricmp() where the second string is null failed. Expected: 1, returned %d\n", intValue
);
109 if((intValue
=T_CString_stricmp(NULL
, NULL
)) != 0){
110 log_err("FAIL: T_CString_stricmp(NULL, NULL) failed. Expected: 0, returned %d\n", intValue
);;
112 if((intValue
=T_CString_stricmp("", "")) != 0){
113 log_err("FAIL: T_CString_stricmp(\"\", \"\") failed. Expected: 0, returned %d\n", intValue
);;
115 if((intValue
=T_CString_stricmp("", "abc")) != -1){
116 log_err("FAIL: T_CString_stricmp(\"\", \"abc\") failed. Expected: -1, returned %d\n", intValue
);
118 if((intValue
=T_CString_stricmp("abc", "")) != 1){
119 log_err("FAIL: T_CString_stricmp(\"abc\", \"\") failed. Expected: 1, returned %d\n", intValue
);
122 temp
=uprv_strdup("strdup");
123 if(uprv_strcmp(temp
, "strdup") !=0 ){
124 log_err("FAIL: uprv_strdup() failed. Expected: \"strdup\", Got: %s\n", temp
);
126 uprv_free((char *)temp
);
128 uprv_strcpy(src
, "this is lower case");
129 if(T_CString_strnicmp(src
, "THIS", 4 ) != 0){
130 log_err("FAIL: *****T_CString_strnicmp() failed.");
132 if((intValue
=T_CString_strnicmp(NULL
, "first string is null", 10) )!= -1){
133 log_err("FAIL: T_CString_strnicmp() where the first string is null failed. Expected: -1, returned %d\n", intValue
);
135 if((intValue
=T_CString_strnicmp("second string is null", NULL
, 10)) != 1){
136 log_err("FAIL: T_CString_strnicmp() where the second string is null failed. Expected: 1, returned %d\n", intValue
);
138 if((intValue
=T_CString_strnicmp(NULL
, NULL
, 10)) != 0){
139 log_err("FAIL: T_CString_strnicmp(NULL, NULL, 10) failed. Expected: 0, returned %d\n", intValue
);;
141 if((intValue
=T_CString_strnicmp("", "", 10)) != 0){
142 log_err("FAIL: T_CString_strnicmp(\"\", \"\") failed. Expected: 0, returned %d\n", intValue
);;
144 if((intValue
=T_CString_strnicmp("", "abc", 10)) != -1){
145 log_err("FAIL: T_CString_stricmp(\"\", \"abc\", 10) failed. Expected: -1, returned %d\n", intValue
);
147 if((intValue
=T_CString_strnicmp("abc", "", 10)) != 1){
148 log_err("FAIL: T_CString_strnicmp(\"abc\", \"\", 10) failed. Expected: 1, returned %d\n", intValue
);
153 /* test invariant-character handling */
156 /* all invariant graphic chars and some control codes (not \n!) */
157 const char invariantChars
[]=
160 "ABCDEFGHIJKLMNOPQRSTUVWXYZ_"
161 "abcdefghijklmnopqrstuvwxyz";
163 const UChar invariantUChars
[]={
164 9, 0xd, 0x20, 0x22, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
165 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
166 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
167 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5f,
168 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
169 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0
172 const char variantChars
[]="\n!#$@[\\]^`{|}~";
174 const UChar variantUChars
[]={
175 0x0a, 0x21, 0x23, 0x24, 0x40, 0x5b, 0x5c, 0x5d, 0x5e, 0x60, 0x7b, 0x7c, 0x7d, 0x7e, 0
178 const UChar nonASCIIUChars
[]={ 0x80, 0xa0, 0x900, 0xff51 };
185 /* make sure that all invariant characters convert both ways */
186 length
=sizeof(invariantChars
);
187 u_charsToUChars(invariantChars
, us
, length
);
188 if(u_strcmp(us
, invariantUChars
)!=0) {
189 log_err("u_charsToUChars(invariantChars) failed\n");
192 u_UCharsToChars(invariantUChars
, cs
, length
);
193 if(strcmp(cs
, invariantChars
)!=0) {
194 log_err("u_UCharsToChars(invariantUChars) failed\n");
199 * make sure that variant characters convert from source code literals to Unicode
200 * but not back to char *
202 length
=sizeof(variantChars
);
203 u_charsToUChars(variantChars
, us
, length
);
204 if(u_strcmp(us
, variantUChars
)!=0) {
205 log_err("u_charsToUChars(variantChars) failed\n");
210 * Test u_UCharsToChars(variantUChars) only in release mode because it will
211 * cause an assertion failure in debug builds.
213 u_UCharsToChars(variantUChars
, cs
, length
);
214 for(i
=0; i
<length
; ++i
) {
216 log_err("u_UCharsToChars(variantUChars) converted the %d-th character to %02x instead of 00\n", i
, cs
[i
]);
222 * Verify that invariant characters roundtrip from Unicode to the
223 * default converter and back.
227 UErrorCode errorCode
;
229 errorCode
=U_ZERO_ERROR
;
230 cnv
=ucnv_open(NULL
, &errorCode
);
231 if(U_FAILURE(errorCode
)) {
232 log_err("unable to open the default converter\n");
234 length
=ucnv_fromUChars(cnv
, cs
, sizeof(cs
), invariantUChars
, -1, &errorCode
);
235 if(U_FAILURE(errorCode
)) {
236 log_err("ucnv_fromUChars(invariantUChars) failed - %s\n", u_errorName(errorCode
));
237 } else if(length
!=sizeof(invariantChars
)-1 || strcmp(cs
, invariantChars
)!=0) {
238 log_err("ucnv_fromUChars(invariantUChars) failed\n");
241 errorCode
=U_ZERO_ERROR
;
242 length
=ucnv_toUChars(cnv
, us
, LENGTHOF(us
), invariantChars
, -1, &errorCode
);
243 if(U_FAILURE(errorCode
)) {
244 log_err("ucnv_toUChars(invariantChars) failed - %s\n", u_errorName(errorCode
));
245 } else if(length
!=LENGTHOF(invariantUChars
)-1 || u_strcmp(us
, invariantUChars
)!=0) {
246 log_err("ucnv_toUChars(invariantChars) failed\n");
254 if(!uprv_isInvariantString(invariantChars
, -1)) {
255 log_err("uprv_isInvariantString(invariantChars) failed\n");
257 if(!uprv_isInvariantUString(invariantUChars
, -1)) {
258 log_err("uprv_isInvariantUString(invariantUChars) failed\n");
261 for(i
=0; i
<(sizeof(variantChars
)-1); ++i
) {
262 if(uprv_isInvariantString(variantChars
+i
, 1)) {
263 log_err("uprv_isInvariantString(variantChars[%d]) failed\n", i
);
265 if(uprv_isInvariantUString(variantUChars
+i
, 1)) {
266 log_err("uprv_isInvariantUString(variantUChars[%d]) failed\n", i
);
270 for(i
=0; i
<LENGTHOF(nonASCIIUChars
); ++i
) {
271 if(uprv_isInvariantUString(nonASCIIUChars
+i
, 1)) {
272 log_err("uprv_isInvariantUString(nonASCIIUChars[%d]) failed\n", i
);