OLD | NEW |
| (Empty) |
1 /******************************************************************** | |
2 * COPYRIGHT: | |
3 * Copyright (c) 1997-2006, International Business Machines Corporation and | |
4 * others. All Rights Reserved. | |
5 ********************************************************************/ | |
6 | |
7 #include "unicode/utypes.h" | |
8 | |
9 #if !UCONFIG_NO_COLLATION | |
10 | |
11 #include "cntabcol.h" | |
12 | |
13 U_NAMESPACE_USE | |
14 | |
15 ContractionTableTest::ContractionTableTest() { | |
16 testMapping = utrie_open(NULL, NULL, 0, 0, 0, TRUE); | |
17 } | |
18 | |
19 ContractionTableTest::~ContractionTableTest() { | |
20 utrie_close(testMapping); | |
21 } | |
22 | |
23 void ContractionTableTest::TestGrowTable(/* char* par */) { | |
24 UErrorCode status = U_ZERO_ERROR; | |
25 uint32_t i = 0, res = 0; | |
26 testTable = uprv_cnttab_open(testMapping, &status); | |
27 | |
28 // fill up one contraction so that it has to expand | |
29 for(i = 0; i<65536; i++) { | |
30 uprv_cnttab_addContraction(testTable, 0, (UChar)i, i, &status); | |
31 if(U_FAILURE(status)) { | |
32 errln("Error occurred at position %i, error = %i (%s)\n", i, status,
u_errorName(status)); | |
33 break; | |
34 } | |
35 } | |
36 // test whether the filled up contraction really contains the data we input | |
37 if(U_SUCCESS(status)) { | |
38 for(i = 0; i<65536; i++) { | |
39 res = uprv_cnttab_getCE(testTable, 0, i, &status); | |
40 if(U_FAILURE(status)) { | |
41 errln("Error occurred at position %i, error = %i (%s)\n", i, sta
tus, u_errorName(status)); | |
42 break; | |
43 } | |
44 if(res != i) { | |
45 errln("Error: expected %i, got %i\n", i, res); | |
46 break; | |
47 } | |
48 } | |
49 } | |
50 uprv_cnttab_close(testTable); | |
51 } | |
52 | |
53 void ContractionTableTest::TestSetContraction(){ | |
54 UErrorCode status = U_ZERO_ERROR; | |
55 testTable = uprv_cnttab_open(testMapping, &status); | |
56 // This should make a new contraction | |
57 uprv_cnttab_setContraction(testTable, 1, 0, 0x41, 0x41, &status); | |
58 if(U_FAILURE(status)) { | |
59 errln("Error setting a non existing contraction error = %i (%s)\n", stat
us, u_errorName(status)); | |
60 } | |
61 // if we try to change the non existing offset, we should get an error | |
62 status = U_ZERO_ERROR; | |
63 // currently this tests whether there is enough space, maybe it should test
whether the element is actually in | |
64 // range. Also, maybe a silent growing should take place.... | |
65 uprv_cnttab_setContraction(testTable, 1, 0x401, 0x41, 0x41, &status); | |
66 if(status != U_INDEX_OUTOFBOUNDS_ERROR) { | |
67 errln("changing a non-existing offset should have resulted in an error\n
"); | |
68 } | |
69 status = U_ZERO_ERROR; | |
70 uprv_cnttab_close(testTable); | |
71 } | |
72 | |
73 void ContractionTableTest::TestAddATableElement(){ | |
74 UErrorCode status = U_ZERO_ERROR; | |
75 testTable = uprv_cnttab_open(testMapping, &status); | |
76 uint32_t i = 0, res = 0; | |
77 | |
78 // fill up one contraction so that it has to expand | |
79 for(i = 0; i<0x1000; i++) { | |
80 uprv_cnttab_addContraction(testTable, i, (UChar)i, i, &status); | |
81 if(U_FAILURE(status)) { | |
82 errln("Error occurred at position %i, error = %i (%s)\n", i, status,
u_errorName(status)); | |
83 break; | |
84 } | |
85 } | |
86 // test whether the filled up contraction really contains the data we input | |
87 if(U_SUCCESS(status)) { | |
88 for(i = 0; i<0x1000; i++) { | |
89 res = uprv_cnttab_getCE(testTable, i, 0, &status); | |
90 if(U_FAILURE(status)) { | |
91 errln("Error occurred at position %i, error = %i (%s)\n", i, sta
tus, u_errorName(status)); | |
92 break; | |
93 } | |
94 if(res != i) { | |
95 errln("Error: expected %i, got %i\n", i, res); | |
96 break; | |
97 } | |
98 } | |
99 } | |
100 uprv_cnttab_close(testTable); | |
101 } | |
102 | |
103 void ContractionTableTest::TestClone(){ | |
104 UErrorCode status = U_ZERO_ERROR; | |
105 testTable = uprv_cnttab_open(testMapping, &status); | |
106 int32_t i = 0, res = 0; | |
107 // we must construct table in order to copy codepoints and CEs | |
108 // fill up one contraction so that it has to expand | |
109 for(i = 0; i<0x500; i++) { | |
110 uprv_cnttab_addContraction(testTable, i, (UChar)i, i, &status); | |
111 if(U_FAILURE(status)) { | |
112 errln("Error occurred at position %i, error = %i (%s)\n", i, status,
u_errorName(status)); | |
113 break; | |
114 } | |
115 } | |
116 uprv_cnttab_constructTable(testTable, 0, &status); | |
117 if(U_FAILURE(status)) { | |
118 errln("Error constructing table error = %i (%s)\n", status, u_errorName(
status)); | |
119 } else { | |
120 testClone = uprv_cnttab_clone(testTable, &status); | |
121 if(U_SUCCESS(status)) { | |
122 for(i = 0; i<0x500; i++) { | |
123 res = uprv_cnttab_getCE(testTable, i, 0, &status); | |
124 if(U_FAILURE(status)) { | |
125 errln("Error occurred at position %i, error = %i (%s)\n", i,
status, u_errorName(status)); | |
126 break; | |
127 } | |
128 if(res != i) { | |
129 errln("Error: expected %i, got %i\n", i, res); | |
130 break; | |
131 } | |
132 } | |
133 } | |
134 uprv_cnttab_close(testClone); | |
135 } | |
136 uprv_cnttab_close(testTable); | |
137 testTable = uprv_cnttab_open(testMapping, &status); | |
138 if(U_FAILURE(status)) { | |
139 errln("Error opening table error = %i (%s)\n", status, u_errorName(statu
s)); | |
140 } | |
141 uprv_cnttab_close(testTable); | |
142 } | |
143 | |
144 void ContractionTableTest::TestChangeContraction(){ | |
145 UErrorCode status = U_ZERO_ERROR; | |
146 testTable = uprv_cnttab_open(testMapping, &status); | |
147 uint32_t i = 0, res = 0; | |
148 res = uprv_cnttab_changeContraction(testTable, 0, 0x41, 0xAB, &status); | |
149 if(res != 0) { | |
150 errln("found a non existing contraction!\n"); | |
151 } | |
152 | |
153 for(i = 0; i < 0x20; i+=2) { | |
154 uprv_cnttab_addContraction(testTable, 0, (UChar)i, i, &status); | |
155 } | |
156 | |
157 res = uprv_cnttab_changeContraction(testTable, 0, 0x41, 0xAB, &status); | |
158 if(res != UCOL_NOT_FOUND) { | |
159 errln("managed to change a non existing contraction!\n"); | |
160 } | |
161 | |
162 for(i = 1; i < 0x20; i+=2) { | |
163 res = uprv_cnttab_changeContraction(testTable, 0, (UChar)i, 0xAB, &statu
s); | |
164 if(res != UCOL_NOT_FOUND) { | |
165 errln("managed to change a non existing contraction!\n"); | |
166 } | |
167 } | |
168 uprv_cnttab_close(testTable); | |
169 } | |
170 | |
171 void ContractionTableTest::TestChangeLastCE(){ | |
172 UErrorCode status = U_ZERO_ERROR; | |
173 testTable = uprv_cnttab_open(testMapping, &status); | |
174 uint32_t res = uprv_cnttab_changeLastCE(testTable, 1, 0xABCD, &status); | |
175 if(res!=0) { | |
176 errln("managed to change the last CE in an non-existing contraction!\n")
; | |
177 } | |
178 uprv_cnttab_close(testTable); | |
179 } | |
180 | |
181 void ContractionTableTest::TestErrorCodeChecking(){ | |
182 UErrorCode status = U_REGEX_SET_CONTAINS_STRING; | |
183 | |
184 uprv_cnttab_open(NULL, &status); | |
185 if (status != U_REGEX_SET_CONTAINS_STRING) { | |
186 errln("Status was incorrectly modified to %s\n", u_errorName(status)); | |
187 } | |
188 uprv_cnttab_clone(NULL, &status); | |
189 if (status != U_REGEX_SET_CONTAINS_STRING) { | |
190 errln("Status was incorrectly modified to %s\n", u_errorName(status)); | |
191 } | |
192 uprv_cnttab_changeLastCE(NULL, 0, 0, &status); | |
193 if (status != U_REGEX_SET_CONTAINS_STRING) { | |
194 errln("Status was incorrectly modified to %s\n", u_errorName(status)); | |
195 } | |
196 uprv_cnttab_insertContraction(NULL, 0, 0, 0, &status); | |
197 if (status != U_REGEX_SET_CONTAINS_STRING) { | |
198 errln("Status was incorrectly modified to %s\n", u_errorName(status)); | |
199 } | |
200 uprv_cnttab_addContraction(NULL, 0, 0, 0, &status); | |
201 if (status != U_REGEX_SET_CONTAINS_STRING) { | |
202 errln("Status was incorrectly modified to %s\n", u_errorName(status)); | |
203 } | |
204 uprv_cnttab_setContraction(NULL, 0, 0, 0, 0, &status); | |
205 if (status != U_REGEX_SET_CONTAINS_STRING) { | |
206 errln("Status was incorrectly modified to %s\n", u_errorName(status)); | |
207 } | |
208 uprv_cnttab_findCP(NULL, 0, 0, &status); | |
209 if (status != U_REGEX_SET_CONTAINS_STRING) { | |
210 errln("Status was incorrectly modified to %s\n", u_errorName(status)); | |
211 } | |
212 if (uprv_cnttab_getCE(NULL, 0, 0, &status) != UCOL_NOT_FOUND) { | |
213 errln("uprv_cnttab_getCE didn't return UCOL_NOT_FOUND\n"); | |
214 } | |
215 if (status != U_REGEX_SET_CONTAINS_STRING) { | |
216 errln("Status was incorrectly modified to %s\n", u_errorName(status)); | |
217 } | |
218 if (uprv_cnttab_findCE(NULL, 0, 0, &status) != UCOL_NOT_FOUND) { | |
219 errln("uprv_cnttab_findCE didn't return UCOL_NOT_FOUND\n"); | |
220 } | |
221 if (status != U_REGEX_SET_CONTAINS_STRING) { | |
222 errln("Status was incorrectly modified to %s\n", u_errorName(status)); | |
223 } | |
224 uprv_cnttab_isTailored(NULL, 0, NULL, &status); | |
225 if (status != U_REGEX_SET_CONTAINS_STRING) { | |
226 errln("Status was incorrectly modified to %s\n", u_errorName(status)); | |
227 } | |
228 uprv_cnttab_changeContraction(NULL, 0, 0, 0, &status); | |
229 if (status != U_REGEX_SET_CONTAINS_STRING) { | |
230 errln("Status was incorrectly modified to %s\n", u_errorName(status)); | |
231 } | |
232 } | |
233 | |
234 void ContractionTableTest::runIndexedTest( int32_t index, UBool exec, const char
* &name, char* /*par*/ ) | |
235 { | |
236 if (exec) logln("TestSuite ContractionTableTest: "); | |
237 switch (index) { | |
238 case 0: name = "TestGrowTable"; if (exec) TestGrowTable(/* par
*/); break; | |
239 case 1: name = "TestSetContraction"; if (exec) TestSetContraction(/
* par */); break; | |
240 case 2: name = "TestAddATableElement"; if (exec) TestAddATableElement
(/* par */); break; | |
241 case 3: name = "TestClone"; if (exec) TestClone(/* par */)
; break; | |
242 case 4: name = "TestChangeContraction"; if (exec) TestChangeContractio
n(/* par */); break; | |
243 case 5: name = "TestChangeLastCE"; if (exec) TestChangeLastCE(/*
par */); break; | |
244 case 6: name = "TestErrorCodeChecking"; if (exec) TestErrorCodeCheckin
g(/* par */); break; | |
245 default: name = ""; break; | |
246 } | |
247 } | |
248 | |
249 #endif /* #if !UCONFIG_NO_COLLATION */ | |
OLD | NEW |