]>
Commit | Line | Data |
---|---|---|
b75a7d8f A |
1 | /******************************************************************** |
2 | * COPYRIGHT: | |
374ca955 | 3 | * Copyright (c) 1997-2004, International Business Machines Corporation and |
b75a7d8f A |
4 | * others. All Rights Reserved. |
5 | ********************************************************************/ | |
6 | /* file name: strtest.cpp | |
7 | * encoding: US-ASCII | |
8 | * tab size: 8 (not used) | |
9 | * indentation:4 | |
10 | * | |
11 | * created on: 1999nov22 | |
12 | * created by: Markus W. Scherer | |
13 | */ | |
14 | ||
15 | #include "unicode/utypes.h" | |
16 | #include "unicode/putil.h" | |
17 | #include "intltest.h" | |
18 | #include "strtest.h" | |
19 | #include "unicode/ustring.h" | |
20 | ||
374ca955 A |
21 | #if defined(WIN32) && defined(_MSC_VER) |
22 | #include <vector> | |
23 | using namespace std; | |
24 | #endif | |
25 | ||
26 | StringTest::~StringTest() {} | |
27 | ||
b75a7d8f A |
28 | void StringTest::TestEndian(void) { |
29 | union { | |
30 | uint8_t byte; | |
31 | uint16_t word; | |
32 | } u; | |
33 | u.word=0x0100; | |
34 | if(U_IS_BIG_ENDIAN!=u.byte) { | |
35 | errln("TestEndian: U_IS_BIG_ENDIAN needs to be fixed in platform.h"); | |
36 | } | |
37 | } | |
38 | ||
374ca955 | 39 | void StringTest::TestSizeofTypes(void) { |
b75a7d8f A |
40 | if(U_SIZEOF_WCHAR_T!=sizeof(wchar_t)) { |
41 | errln("TestSizeofWCharT: U_SIZEOF_WCHAR_T!=sizeof(wchar_t) - U_SIZEOF_WCHAR_T needs to be fixed in platform.h"); | |
42 | } | |
b75a7d8f A |
43 | #ifdef U_INT64_T_UNAVAILABLE |
44 | errln("int64_t and uint64_t are undefined."); | |
45 | #else | |
46 | if(8!=sizeof(int64_t)) { | |
374ca955 | 47 | errln("TestSizeofTypes: 8!=sizeof(int64_t) - int64_t needs to be fixed in platform.h"); |
b75a7d8f A |
48 | } |
49 | if(8!=sizeof(uint64_t)) { | |
374ca955 | 50 | errln("TestSizeofTypes: 8!=sizeof(uint64_t) - uint64_t needs to be fixed in platform.h"); |
b75a7d8f A |
51 | } |
52 | #endif | |
53 | if(8!=sizeof(double)) { | |
54 | errln("8!=sizeof(double) - putil.c code may not work"); | |
55 | } | |
374ca955 A |
56 | if(4!=sizeof(int32_t)) { |
57 | errln("4!=sizeof(int32_t)"); | |
58 | } | |
59 | if(4!=sizeof(uint32_t)) { | |
60 | errln("4!=sizeof(uint32_t)"); | |
61 | } | |
62 | if(2!=sizeof(int16_t)) { | |
63 | errln("2!=sizeof(int16_t)"); | |
64 | } | |
65 | if(2!=sizeof(uint16_t)) { | |
66 | errln("2!=sizeof(uint16_t)"); | |
67 | } | |
68 | if(2!=sizeof(UChar)) { | |
69 | errln("2!=sizeof(UChar)"); | |
70 | } | |
71 | if(1!=sizeof(int8_t)) { | |
72 | errln("1!=sizeof(int8_t)"); | |
73 | } | |
74 | if(1!=sizeof(uint8_t)) { | |
75 | errln("1!=sizeof(uint8_t)"); | |
76 | } | |
77 | if(1!=sizeof(UBool)) { | |
78 | errln("1!=sizeof(UBool)"); | |
79 | } | |
b75a7d8f A |
80 | } |
81 | ||
82 | void StringTest::TestCharsetFamily(void) { | |
83 | unsigned char c='A'; | |
84 | if( U_CHARSET_FAMILY==U_ASCII_FAMILY && c!=0x41 || | |
85 | U_CHARSET_FAMILY==U_EBCDIC_FAMILY && c!=0xc1 | |
86 | ) { | |
87 | errln("TestCharsetFamily: U_CHARSET_FAMILY needs to be fixed in platform.h"); | |
88 | } | |
89 | } | |
90 | ||
91 | U_STRING_DECL(ustringVar, "aZ0 -", 5); | |
92 | ||
93 | void StringTest::runIndexedTest(int32_t index, UBool exec, const char *&name, char * /*par*/) { | |
94 | if(exec) { | |
95 | logln("TestSuite Character and String Test: "); | |
96 | } | |
97 | switch(index) { | |
98 | case 0: | |
99 | name="TestEndian"; | |
100 | if(exec) { | |
101 | TestEndian(); | |
102 | } | |
103 | break; | |
104 | case 1: | |
374ca955 | 105 | name="TestSizeofTypes"; |
b75a7d8f | 106 | if(exec) { |
374ca955 | 107 | TestSizeofTypes(); |
b75a7d8f A |
108 | } |
109 | break; | |
110 | case 2: | |
b75a7d8f A |
111 | name="TestCharsetFamily"; |
112 | if(exec) { | |
113 | TestCharsetFamily(); | |
114 | } | |
115 | break; | |
374ca955 | 116 | case 3: |
b75a7d8f A |
117 | name="Test_U_STRING"; |
118 | if(exec) { | |
119 | U_STRING_INIT(ustringVar, "aZ0 -", 5); | |
120 | if( sizeof(ustringVar)/sizeof(*ustringVar)!=6 || | |
121 | ustringVar[0]!=0x61 || | |
122 | ustringVar[1]!=0x5a || | |
123 | ustringVar[2]!=0x30 || | |
124 | ustringVar[3]!=0x20 || | |
125 | ustringVar[4]!=0x2d || | |
126 | ustringVar[5]!=0 | |
127 | ) { | |
128 | errln("Test_U_STRING: U_STRING_DECL with U_STRING_INIT does not work right! " | |
129 | "See putil.h and utypes.h with platform.h."); | |
130 | } | |
131 | } | |
132 | break; | |
374ca955 | 133 | case 4: |
b75a7d8f A |
134 | name="Test_UNICODE_STRING"; |
135 | if(exec) { | |
136 | UnicodeString ustringVar=UNICODE_STRING("aZ0 -", 5); | |
137 | if( ustringVar.length()!=5 || | |
138 | ustringVar[0]!=0x61 || | |
139 | ustringVar[1]!=0x5a || | |
140 | ustringVar[2]!=0x30 || | |
141 | ustringVar[3]!=0x20 || | |
142 | ustringVar[4]!=0x2d | |
143 | ) { | |
144 | errln("Test_UNICODE_STRING: UNICODE_STRING does not work right! " | |
145 | "See unistr.h and utypes.h with platform.h."); | |
146 | } | |
147 | } | |
148 | break; | |
374ca955 | 149 | case 5: |
b75a7d8f A |
150 | name="Test_UNICODE_STRING_SIMPLE"; |
151 | if(exec) { | |
152 | UnicodeString ustringVar=UNICODE_STRING_SIMPLE("aZ0 -"); | |
153 | if( ustringVar.length()!=5 || | |
154 | ustringVar[0]!=0x61 || | |
155 | ustringVar[1]!=0x5a || | |
156 | ustringVar[2]!=0x30 || | |
157 | ustringVar[3]!=0x20 || | |
158 | ustringVar[4]!=0x2d | |
159 | ) { | |
160 | errln("Test_UNICODE_STRING_SIMPLE: UNICODE_STRING_SIMPLE does not work right! " | |
161 | "See unistr.h and utypes.h with platform.h."); | |
162 | } | |
163 | } | |
164 | break; | |
374ca955 | 165 | case 6: |
b75a7d8f A |
166 | name="Test_UTF8_COUNT_TRAIL_BYTES"; |
167 | if(exec) { | |
168 | if(UTF8_COUNT_TRAIL_BYTES(0x7F) != 0 | |
169 | || UTF8_COUNT_TRAIL_BYTES(0xC0) != 1 | |
170 | || UTF8_COUNT_TRAIL_BYTES(0xE0) != 2 | |
171 | || UTF8_COUNT_TRAIL_BYTES(0xF0) != 3) | |
172 | { | |
173 | errln("Test_UTF8_COUNT_TRAIL_BYTES: UTF8_COUNT_TRAIL_BYTES does not work right! " | |
174 | "See utf8.h."); | |
175 | } | |
176 | } | |
177 | break; | |
374ca955 A |
178 | case 7: |
179 | name="TestSTLCompatibility"; | |
180 | if(exec) { | |
181 | #if defined(WIN32) && defined(_MSC_VER) | |
182 | /* Just make sure that it compiles with STL's placement new usage. */ | |
183 | vector<UnicodeString> myvect; | |
184 | myvect.push_back(UnicodeString("blah")); | |
185 | #endif | |
186 | } | |
187 | break; | |
b75a7d8f A |
188 | default: |
189 | name=""; | |
190 | break; | |
191 | } | |
192 | } |