Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: source/test/intltest/bytestrietest.cpp

Issue 845603002: Update ICU to 54.1 step 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/icu.git@master
Patch Set: remove unusued directories Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « source/test/intltest/bidiconf.cpp ('k') | source/test/intltest/caltest.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 ******************************************************************************* 2 *******************************************************************************
3 * Copyright (C) 2010-2013, International Business Machines 3 * Copyright (C) 2010-2014, International Business Machines
4 * Corporation and others. All Rights Reserved. 4 * Corporation and others. All Rights Reserved.
5 ******************************************************************************* 5 *******************************************************************************
6 * file name: bytetrietest.cpp 6 * file name: bytetrietest.cpp
7 * encoding: US-ASCII 7 * encoding: US-ASCII
8 * tab size: 8 (not used) 8 * tab size: 8 (not used)
9 * indentation:4 9 * indentation:4
10 * 10 *
11 * created on: 2010nov16 11 * created on: 2010nov16
12 * created by: Markus W. Scherer 12 * created by: Markus W. Scherer
13 */ 13 */
14 14
15 #include <string.h> 15 #include <string.h>
16 16
17 #include "unicode/utypes.h" 17 #include "unicode/utypes.h"
18 #include "unicode/bytestrie.h" 18 #include "unicode/bytestrie.h"
19 #include "unicode/bytestriebuilder.h" 19 #include "unicode/bytestriebuilder.h"
20 #include "unicode/localpointer.h" 20 #include "unicode/localpointer.h"
21 #include "unicode/stringpiece.h" 21 #include "unicode/stringpiece.h"
22 #include "intltest.h" 22 #include "intltest.h"
23 23 #include "cmemory.h"
24 #define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
25 24
26 struct StringAndValue { 25 struct StringAndValue {
27 const char *s; 26 const char *s;
28 int32_t value; 27 int32_t value;
29 }; 28 };
30 29
31 class BytesTrieTest : public IntlTest { 30 class BytesTrieTest : public IntlTest {
32 public: 31 public:
33 BytesTrieTest(); 32 BytesTrieTest();
34 virtual ~BytesTrieTest(); 33 virtual ~BytesTrieTest();
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 if(errorCode.reset()!=U_ILLEGAL_ARGUMENT_ERROR) { 121 if(errorCode.reset()!=U_ILLEGAL_ARGUMENT_ERROR) {
123 errln("BytesTrieBuilder.add() did not detect duplicates"); 122 errln("BytesTrieBuilder.add() did not detect duplicates");
124 return; 123 return;
125 } 124 }
126 } 125 }
127 126
128 void BytesTrieTest::TestEmpty() { 127 void BytesTrieTest::TestEmpty() {
129 static const StringAndValue data[]={ 128 static const StringAndValue data[]={
130 { "", 0 } 129 { "", 0 }
131 }; 130 };
132 checkData(data, LENGTHOF(data)); 131 checkData(data, UPRV_LENGTHOF(data));
133 } 132 }
134 133
135 void BytesTrieTest::Test_a() { 134 void BytesTrieTest::Test_a() {
136 static const StringAndValue data[]={ 135 static const StringAndValue data[]={
137 { "a", 1 } 136 { "a", 1 }
138 }; 137 };
139 checkData(data, LENGTHOF(data)); 138 checkData(data, UPRV_LENGTHOF(data));
140 } 139 }
141 140
142 void BytesTrieTest::Test_a_ab() { 141 void BytesTrieTest::Test_a_ab() {
143 static const StringAndValue data[]={ 142 static const StringAndValue data[]={
144 { "a", 1 }, 143 { "a", 1 },
145 { "ab", 100 } 144 { "ab", 100 }
146 }; 145 };
147 checkData(data, LENGTHOF(data)); 146 checkData(data, UPRV_LENGTHOF(data));
148 } 147 }
149 148
150 void BytesTrieTest::TestShortestBranch() { 149 void BytesTrieTest::TestShortestBranch() {
151 static const StringAndValue data[]={ 150 static const StringAndValue data[]={
152 { "a", 1000 }, 151 { "a", 1000 },
153 { "b", 2000 } 152 { "b", 2000 }
154 }; 153 };
155 checkData(data, LENGTHOF(data)); 154 checkData(data, UPRV_LENGTHOF(data));
156 } 155 }
157 156
158 void BytesTrieTest::TestBranches() { 157 void BytesTrieTest::TestBranches() {
159 static const StringAndValue data[]={ 158 static const StringAndValue data[]={
160 { "a", 0x10 }, 159 { "a", 0x10 },
161 { "cc", 0x40 }, 160 { "cc", 0x40 },
162 { "e", 0x100 }, 161 { "e", 0x100 },
163 { "ggg", 0x400 }, 162 { "ggg", 0x400 },
164 { "i", 0x1000 }, 163 { "i", 0x1000 },
165 { "kkkk", 0x4000 }, 164 { "kkkk", 0x4000 },
166 { "n", 0x10000 }, 165 { "n", 0x10000 },
167 { "ppppp", 0x40000 }, 166 { "ppppp", 0x40000 },
168 { "r", 0x100000 }, 167 { "r", 0x100000 },
169 { "sss", 0x200000 }, 168 { "sss", 0x200000 },
170 { "t", 0x400000 }, 169 { "t", 0x400000 },
171 { "uu", 0x800000 }, 170 { "uu", 0x800000 },
172 { "vv", 0x7fffffff }, 171 { "vv", 0x7fffffff },
173 { "zz", (int32_t)0x80000000 } 172 { "zz", (int32_t)0x80000000 }
174 }; 173 };
175 for(int32_t length=2; length<=LENGTHOF(data); ++length) { 174 for(int32_t length=2; length<=UPRV_LENGTHOF(data); ++length) {
176 logln("TestBranches length=%d", (int)length); 175 logln("TestBranches length=%d", (int)length);
177 checkData(data, length); 176 checkData(data, length);
178 } 177 }
179 } 178 }
180 179
181 void BytesTrieTest::TestLongSequence() { 180 void BytesTrieTest::TestLongSequence() {
182 static const StringAndValue data[]={ 181 static const StringAndValue data[]={
183 { "a", -1 }, 182 { "a", -1 },
184 // sequence of linear-match nodes 183 // sequence of linear-match nodes
185 { "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", -2 }, 184 { "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", -2 },
186 // more than 256 bytes 185 // more than 256 bytes
187 { "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" 186 { "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
188 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" 187 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
189 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" 188 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
190 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" 189 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
191 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" 190 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
192 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", -3 } 191 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", -3 }
193 }; 192 };
194 checkData(data, LENGTHOF(data)); 193 checkData(data, UPRV_LENGTHOF(data));
195 } 194 }
196 195
197 void BytesTrieTest::TestLongBranch() { 196 void BytesTrieTest::TestLongBranch() {
198 // Split-branch and interesting compact-integer values. 197 // Split-branch and interesting compact-integer values.
199 static const StringAndValue data[]={ 198 static const StringAndValue data[]={
200 { "a", -2 }, 199 { "a", -2 },
201 { "b", -1 }, 200 { "b", -1 },
202 { "c", 0 }, 201 { "c", 0 },
203 { "d2", 1 }, 202 { "d2", 1 },
204 { "f", 0x3f }, 203 { "f", 0x3f },
205 { "g", 0x40 }, 204 { "g", 0x40 },
206 { "h", 0x41 }, 205 { "h", 0x41 },
207 { "j23", 0x1900 }, 206 { "j23", 0x1900 },
208 { "j24", 0x19ff }, 207 { "j24", 0x19ff },
209 { "j25", 0x1a00 }, 208 { "j25", 0x1a00 },
210 { "k2", 0x1a80 }, 209 { "k2", 0x1a80 },
211 { "k3", 0x1aff }, 210 { "k3", 0x1aff },
212 { "l234567890", 0x1b00 }, 211 { "l234567890", 0x1b00 },
213 { "l234567890123", 0x1b01 }, 212 { "l234567890123", 0x1b01 },
214 { "nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn", 0x10ffff }, 213 { "nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn", 0x10ffff },
215 { "oooooooooooooooooooooooooooooooooooooooooooooooooooooo", 0x110000 }, 214 { "oooooooooooooooooooooooooooooooooooooooooooooooooooooo", 0x110000 },
216 { "pppppppppppppppppppppppppppppppppppppppppppppppppppppp", 0x120000 }, 215 { "pppppppppppppppppppppppppppppppppppppppppppppppppppppp", 0x120000 },
217 { "r", 0x333333 }, 216 { "r", 0x333333 },
218 { "s2345", 0x4444444 }, 217 { "s2345", 0x4444444 },
219 { "t234567890", 0x77777777 }, 218 { "t234567890", 0x77777777 },
220 { "z", (int32_t)0x80000001 } 219 { "z", (int32_t)0x80000001 }
221 }; 220 };
222 checkData(data, LENGTHOF(data)); 221 checkData(data, UPRV_LENGTHOF(data));
223 } 222 }
224 223
225 void BytesTrieTest::TestValuesForState() { 224 void BytesTrieTest::TestValuesForState() {
226 // Check that saveState() and resetToState() interact properly 225 // Check that saveState() and resetToState() interact properly
227 // with next() and current(). 226 // with next() and current().
228 static const StringAndValue data[]={ 227 static const StringAndValue data[]={
229 { "a", -1 }, 228 { "a", -1 },
230 { "ab", -2 }, 229 { "ab", -2 },
231 { "abc", -3 }, 230 { "abc", -3 },
232 { "abcd", -4 }, 231 { "abcd", -4 },
233 { "abcde", -5 }, 232 { "abcde", -5 },
234 { "abcdef", -6 } 233 { "abcdef", -6 }
235 }; 234 };
236 checkData(data, LENGTHOF(data)); 235 checkData(data, UPRV_LENGTHOF(data));
237 } 236 }
238 237
239 void BytesTrieTest::TestCompact() { 238 void BytesTrieTest::TestCompact() {
240 // Duplicate trailing strings and values provide opportunities for compactin g. 239 // Duplicate trailing strings and values provide opportunities for compactin g.
241 static const StringAndValue data[]={ 240 static const StringAndValue data[]={
242 { "+", 0 }, 241 { "+", 0 },
243 { "+august", 8 }, 242 { "+august", 8 },
244 { "+december", 12 }, 243 { "+december", 12 },
245 { "+july", 7 }, 244 { "+july", 7 },
246 { "+june", 6 }, 245 { "+june", 6 },
247 { "+november", 11 }, 246 { "+november", 11 },
248 { "+october", 10 }, 247 { "+october", 10 },
249 { "+september", 9 }, 248 { "+september", 9 },
250 { "-", 0 }, 249 { "-", 0 },
251 { "-august", 8 }, 250 { "-august", 8 },
252 { "-december", 12 }, 251 { "-december", 12 },
253 { "-july", 7 }, 252 { "-july", 7 },
254 { "-june", 6 }, 253 { "-june", 6 },
255 { "-november", 11 }, 254 { "-november", 11 },
256 { "-october", 10 }, 255 { "-october", 10 },
257 { "-september", 9 }, 256 { "-september", 9 },
258 // The l+n branch (with its sub-nodes) is a duplicate but will be writte n 257 // The l+n branch (with its sub-nodes) is a duplicate but will be writte n
259 // both times because each time it follows a different linear-match node . 258 // both times because each time it follows a different linear-match node .
260 { "xjuly", 7 }, 259 { "xjuly", 7 },
261 { "xjune", 6 } 260 { "xjune", 6 }
262 }; 261 };
263 checkData(data, LENGTHOF(data)); 262 checkData(data, UPRV_LENGTHOF(data));
264 } 263 }
265 264
266 BytesTrie *BytesTrieTest::buildMonthsTrie(UStringTrieBuildOption buildOption) { 265 BytesTrie *BytesTrieTest::buildMonthsTrie(UStringTrieBuildOption buildOption) {
267 // All types of nodes leading to the same value, 266 // All types of nodes leading to the same value,
268 // for code coverage of recursive functions. 267 // for code coverage of recursive functions.
269 // In particular, we need a lot of branches on some single level 268 // In particular, we need a lot of branches on some single level
270 // to exercise a split-branch node. 269 // to exercise a split-branch node.
271 static const StringAndValue data[]={ 270 static const StringAndValue data[]={
272 { "august", 8 }, 271 { "august", 8 },
273 { "jan", 1 }, 272 { "jan", 1 },
(...skipping 19 matching lines...) Expand all
293 { "janpp", 1 }, 292 { "janpp", 1 },
294 { "janqqq", 1 }, 293 { "janqqq", 1 },
295 { "janr", 1 }, 294 { "janr", 1 },
296 { "januar", 1 }, 295 { "januar", 1 },
297 { "january", 1 }, 296 { "january", 1 },
298 { "july", 7 }, 297 { "july", 7 },
299 { "jun", 6 }, 298 { "jun", 6 },
300 { "jun.", 6 }, 299 { "jun.", 6 },
301 { "june", 6 } 300 { "june", 6 }
302 }; 301 };
303 return buildTrie(data, LENGTHOF(data), buildOption); 302 return buildTrie(data, UPRV_LENGTHOF(data), buildOption);
304 } 303 }
305 304
306 void BytesTrieTest::TestHasUniqueValue() { 305 void BytesTrieTest::TestHasUniqueValue() {
307 LocalPointer<BytesTrie> trie(buildMonthsTrie(USTRINGTRIE_BUILD_FAST)); 306 LocalPointer<BytesTrie> trie(buildMonthsTrie(USTRINGTRIE_BUILD_FAST));
308 if(trie.isNull()) { 307 if(trie.isNull()) {
309 return; // buildTrie() reported an error 308 return; // buildTrie() reported an error
310 } 309 }
311 int32_t uniqueValue; 310 int32_t uniqueValue;
312 if(trie->hasUniqueValue(uniqueValue)) { 311 if(trie->hasUniqueValue(uniqueValue)) {
313 errln("unique value at root"); 312 errln("unique value at root");
(...skipping 24 matching lines...) Expand all
338 errln("not unique value 8 after \"au\""); 337 errln("not unique value 8 after \"au\"");
339 } 338 }
340 } 339 }
341 340
342 void BytesTrieTest::TestGetNextBytes() { 341 void BytesTrieTest::TestGetNextBytes() {
343 LocalPointer<BytesTrie> trie(buildMonthsTrie(USTRINGTRIE_BUILD_SMALL)); 342 LocalPointer<BytesTrie> trie(buildMonthsTrie(USTRINGTRIE_BUILD_SMALL));
344 if(trie.isNull()) { 343 if(trie.isNull()) {
345 return; // buildTrie() reported an error 344 return; // buildTrie() reported an error
346 } 345 }
347 char buffer[40]; 346 char buffer[40];
348 CheckedArrayByteSink sink(buffer, LENGTHOF(buffer)); 347 CheckedArrayByteSink sink(buffer, UPRV_LENGTHOF(buffer));
349 int32_t count=trie->getNextBytes(sink); 348 int32_t count=trie->getNextBytes(sink);
350 if(count!=2 || sink.NumberOfBytesAppended()!=2 || buffer[0]!='a' || buffer[1 ]!='j') { 349 if(count!=2 || sink.NumberOfBytesAppended()!=2 || buffer[0]!='a' || buffer[1 ]!='j') {
351 errln("months getNextBytes()!=[aj] at root"); 350 errln("months getNextBytes()!=[aj] at root");
352 } 351 }
353 trie->next('j'); 352 trie->next('j');
354 trie->next('a'); 353 trie->next('a');
355 trie->next('n'); 354 trie->next('n');
356 // getNextBytes() directly after next() 355 // getNextBytes() directly after next()
357 count=trie->getNextBytes(sink.Reset()); 356 count=trie->getNextBytes(sink.Reset());
358 buffer[count]=0; 357 buffer[count]=0;
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 { "l", 1 }, 423 { "l", 1 },
425 { "m", 1 }, 424 { "m", 1 },
426 { "nnnnnnnnnnnnnnnnnnnnnnnnnnnn", 1 }, 425 { "nnnnnnnnnnnnnnnnnnnnnnnnnnnn", 1 },
427 { "o", 1 }, 426 { "o", 1 },
428 { "pp", 1 }, 427 { "pp", 1 },
429 { "qqq", 1 }, 428 { "qqq", 1 },
430 { "r", 1 }, 429 { "r", 1 },
431 { "uar", 1 }, 430 { "uar", 1 },
432 { "uary", 1 } 431 { "uary", 1 }
433 }; 432 };
434 checkIterator(iter, data, LENGTHOF(data)); 433 checkIterator(iter, data, UPRV_LENGTHOF(data));
435 // Reset, and we should get the same result. 434 // Reset, and we should get the same result.
436 logln("after iter.reset()"); 435 logln("after iter.reset()");
437 checkIterator(iter.reset(), data, LENGTHOF(data)); 436 checkIterator(iter.reset(), data, UPRV_LENGTHOF(data));
438 } 437 }
439 438
440 void BytesTrieTest::TestIteratorFromLinearMatch() { 439 void BytesTrieTest::TestIteratorFromLinearMatch() {
441 LocalPointer<BytesTrie> trie(buildMonthsTrie(USTRINGTRIE_BUILD_SMALL)); 440 LocalPointer<BytesTrie> trie(buildMonthsTrie(USTRINGTRIE_BUILD_SMALL));
442 if(trie.isNull()) { 441 if(trie.isNull()) {
443 return; // buildTrie() reported an error 442 return; // buildTrie() reported an error
444 } 443 }
445 // Go into a linear-match node. 444 // Go into a linear-match node.
446 trie->next('j'); 445 trie->next('j');
447 trie->next('a'); 446 trie->next('a');
448 trie->next('n'); 447 trie->next('n');
449 trie->next('u'); 448 trie->next('u');
450 trie->next('a'); 449 trie->next('a');
451 IcuTestErrorCode errorCode(*this, "TestIteratorFromLinearMatch()"); 450 IcuTestErrorCode errorCode(*this, "TestIteratorFromLinearMatch()");
452 BytesTrie::Iterator iter(*trie, 0, errorCode); 451 BytesTrie::Iterator iter(*trie, 0, errorCode);
453 if(errorCode.logIfFailureAndReset("BytesTrie::Iterator(trie) constructor")) { 452 if(errorCode.logIfFailureAndReset("BytesTrie::Iterator(trie) constructor")) {
454 return; 453 return;
455 } 454 }
456 // Expected data: Same as in buildMonthsTrie(), except only the suffixes 455 // Expected data: Same as in buildMonthsTrie(), except only the suffixes
457 // following "janua". 456 // following "janua".
458 static const StringAndValue data[]={ 457 static const StringAndValue data[]={
459 { "r", 1 }, 458 { "r", 1 },
460 { "ry", 1 } 459 { "ry", 1 }
461 }; 460 };
462 checkIterator(iter, data, LENGTHOF(data)); 461 checkIterator(iter, data, UPRV_LENGTHOF(data));
463 // Reset, and we should get the same result. 462 // Reset, and we should get the same result.
464 logln("after iter.reset()"); 463 logln("after iter.reset()");
465 checkIterator(iter.reset(), data, LENGTHOF(data)); 464 checkIterator(iter.reset(), data, UPRV_LENGTHOF(data));
466 } 465 }
467 466
468 void BytesTrieTest::TestTruncatingIteratorFromRoot() { 467 void BytesTrieTest::TestTruncatingIteratorFromRoot() {
469 LocalPointer<BytesTrie> trie(buildMonthsTrie(USTRINGTRIE_BUILD_FAST)); 468 LocalPointer<BytesTrie> trie(buildMonthsTrie(USTRINGTRIE_BUILD_FAST));
470 if(trie.isNull()) { 469 if(trie.isNull()) {
471 return; // buildTrie() reported an error 470 return; // buildTrie() reported an error
472 } 471 }
473 IcuTestErrorCode errorCode(*this, "TestTruncatingIteratorFromRoot()"); 472 IcuTestErrorCode errorCode(*this, "TestTruncatingIteratorFromRoot()");
474 BytesTrie::Iterator iter(*trie, 4, errorCode); 473 BytesTrie::Iterator iter(*trie, 4, errorCode);
475 if(errorCode.logIfFailureAndReset("BytesTrie::Iterator(trie) constructor")) { 474 if(errorCode.logIfFailureAndReset("BytesTrie::Iterator(trie) constructor")) {
(...skipping 22 matching lines...) Expand all
498 { "jano", 1 }, 497 { "jano", 1 },
499 { "janp", -1 }, 498 { "janp", -1 },
500 { "janq", -1 }, 499 { "janq", -1 },
501 { "janr", 1 }, 500 { "janr", 1 },
502 { "janu", -1 }, 501 { "janu", -1 },
503 { "july", 7 }, 502 { "july", 7 },
504 { "jun", 6 }, 503 { "jun", 6 },
505 { "jun.", 6 }, 504 { "jun.", 6 },
506 { "june", 6 } 505 { "june", 6 }
507 }; 506 };
508 checkIterator(iter, data, LENGTHOF(data)); 507 checkIterator(iter, data, UPRV_LENGTHOF(data));
509 // Reset, and we should get the same result. 508 // Reset, and we should get the same result.
510 logln("after iter.reset()"); 509 logln("after iter.reset()");
511 checkIterator(iter.reset(), data, LENGTHOF(data)); 510 checkIterator(iter.reset(), data, UPRV_LENGTHOF(data));
512 } 511 }
513 512
514 void BytesTrieTest::TestTruncatingIteratorFromLinearMatchShort() { 513 void BytesTrieTest::TestTruncatingIteratorFromLinearMatchShort() {
515 static const StringAndValue data[]={ 514 static const StringAndValue data[]={
516 { "abcdef", 10 }, 515 { "abcdef", 10 },
517 { "abcdepq", 200 }, 516 { "abcdepq", 200 },
518 { "abcdeyz", 3000 } 517 { "abcdeyz", 3000 }
519 }; 518 };
520 LocalPointer<BytesTrie> trie(buildTrie(data, LENGTHOF(data), USTRINGTRIE_BUI LD_FAST)); 519 LocalPointer<BytesTrie> trie(buildTrie(data, UPRV_LENGTHOF(data), USTRINGTRI E_BUILD_FAST));
521 if(trie.isNull()) { 520 if(trie.isNull()) {
522 return; // buildTrie() reported an error 521 return; // buildTrie() reported an error
523 } 522 }
524 // Go into a linear-match node. 523 // Go into a linear-match node.
525 trie->next('a'); 524 trie->next('a');
526 trie->next('b'); 525 trie->next('b');
527 IcuTestErrorCode errorCode(*this, "TestTruncatingIteratorFromLinearMatchShor t()"); 526 IcuTestErrorCode errorCode(*this, "TestTruncatingIteratorFromLinearMatchShor t()");
528 // Truncate within the linear-match node. 527 // Truncate within the linear-match node.
529 BytesTrie::Iterator iter(*trie, 2, errorCode); 528 BytesTrie::Iterator iter(*trie, 2, errorCode);
530 if(errorCode.logIfFailureAndReset("BytesTrie::Iterator(trie) constructor")) { 529 if(errorCode.logIfFailureAndReset("BytesTrie::Iterator(trie) constructor")) {
531 return; 530 return;
532 } 531 }
533 static const StringAndValue expected[]={ 532 static const StringAndValue expected[]={
534 { "cd", -1 } 533 { "cd", -1 }
535 }; 534 };
536 checkIterator(iter, expected, LENGTHOF(expected)); 535 checkIterator(iter, expected, UPRV_LENGTHOF(expected));
537 // Reset, and we should get the same result. 536 // Reset, and we should get the same result.
538 logln("after iter.reset()"); 537 logln("after iter.reset()");
539 checkIterator(iter.reset(), expected, LENGTHOF(expected)); 538 checkIterator(iter.reset(), expected, UPRV_LENGTHOF(expected));
540 } 539 }
541 540
542 void BytesTrieTest::TestTruncatingIteratorFromLinearMatchLong() { 541 void BytesTrieTest::TestTruncatingIteratorFromLinearMatchLong() {
543 static const StringAndValue data[]={ 542 static const StringAndValue data[]={
544 { "abcdef", 10 }, 543 { "abcdef", 10 },
545 { "abcdepq", 200 }, 544 { "abcdepq", 200 },
546 { "abcdeyz", 3000 } 545 { "abcdeyz", 3000 }
547 }; 546 };
548 LocalPointer<BytesTrie> trie(buildTrie(data, LENGTHOF(data), USTRINGTRIE_BUI LD_FAST)); 547 LocalPointer<BytesTrie> trie(buildTrie(data, UPRV_LENGTHOF(data), USTRINGTRI E_BUILD_FAST));
549 if(trie.isNull()) { 548 if(trie.isNull()) {
550 return; // buildTrie() reported an error 549 return; // buildTrie() reported an error
551 } 550 }
552 // Go into a linear-match node. 551 // Go into a linear-match node.
553 trie->next('a'); 552 trie->next('a');
554 trie->next('b'); 553 trie->next('b');
555 trie->next('c'); 554 trie->next('c');
556 IcuTestErrorCode errorCode(*this, "TestTruncatingIteratorFromLinearMatchLong ()"); 555 IcuTestErrorCode errorCode(*this, "TestTruncatingIteratorFromLinearMatchLong ()");
557 // Truncate after the linear-match node. 556 // Truncate after the linear-match node.
558 BytesTrie::Iterator iter(*trie, 3, errorCode); 557 BytesTrie::Iterator iter(*trie, 3, errorCode);
559 if(errorCode.logIfFailureAndReset("BytesTrie::Iterator(trie) constructor")) { 558 if(errorCode.logIfFailureAndReset("BytesTrie::Iterator(trie) constructor")) {
560 return; 559 return;
561 } 560 }
562 static const StringAndValue expected[]={ 561 static const StringAndValue expected[]={
563 { "def", 10 }, 562 { "def", 10 },
564 { "dep", -1 }, 563 { "dep", -1 },
565 { "dey", -1 } 564 { "dey", -1 }
566 }; 565 };
567 checkIterator(iter, expected, LENGTHOF(expected)); 566 checkIterator(iter, expected, UPRV_LENGTHOF(expected));
568 // Reset, and we should get the same result. 567 // Reset, and we should get the same result.
569 logln("after iter.reset()"); 568 logln("after iter.reset()");
570 checkIterator(iter.reset(), expected, LENGTHOF(expected)); 569 checkIterator(iter.reset(), expected, UPRV_LENGTHOF(expected));
571 } 570 }
572 571
573 void BytesTrieTest::TestIteratorFromBytes() { 572 void BytesTrieTest::TestIteratorFromBytes() {
574 static const StringAndValue data[]={ 573 static const StringAndValue data[]={
575 { "mm", 3 }, 574 { "mm", 3 },
576 { "mmm", 33 }, 575 { "mmm", 33 },
577 { "mmnop", 333 } 576 { "mmnop", 333 }
578 }; 577 };
579 builder_->clear(); 578 builder_->clear();
580 IcuTestErrorCode errorCode(*this, "TestIteratorFromBytes()"); 579 IcuTestErrorCode errorCode(*this, "TestIteratorFromBytes()");
581 for(int32_t i=0; i<LENGTHOF(data); ++i) { 580 for(int32_t i=0; i<UPRV_LENGTHOF(data); ++i) {
582 builder_->add(data[i].s, data[i].value, errorCode); 581 builder_->add(data[i].s, data[i].value, errorCode);
583 } 582 }
584 StringPiece trieBytes=builder_->buildStringPiece(USTRINGTRIE_BUILD_FAST, err orCode); 583 StringPiece trieBytes=builder_->buildStringPiece(USTRINGTRIE_BUILD_FAST, err orCode);
585 BytesTrie::Iterator iter(trieBytes.data(), 0, errorCode); 584 BytesTrie::Iterator iter(trieBytes.data(), 0, errorCode);
586 checkIterator(iter, data, LENGTHOF(data)); 585 checkIterator(iter, data, UPRV_LENGTHOF(data));
587 } 586 }
588 587
589 void BytesTrieTest::checkData(const StringAndValue data[], int32_t dataLength) { 588 void BytesTrieTest::checkData(const StringAndValue data[], int32_t dataLength) {
590 logln("checkData(dataLength=%d, fast)", (int)dataLength); 589 logln("checkData(dataLength=%d, fast)", (int)dataLength);
591 checkData(data, dataLength, USTRINGTRIE_BUILD_FAST); 590 checkData(data, dataLength, USTRINGTRIE_BUILD_FAST);
592 logln("checkData(dataLength=%d, small)", (int)dataLength); 591 logln("checkData(dataLength=%d, small)", (int)dataLength);
593 checkData(data, dataLength, USTRINGTRIE_BUILD_SMALL); 592 checkData(data, dataLength, USTRINGTRIE_BUILD_SMALL);
594 } 593 }
595 594
596 void BytesTrieTest::checkData(const StringAndValue data[], int32_t dataLength, U StringTrieBuildOption buildOption) { 595 void BytesTrieTest::checkData(const StringAndValue data[], int32_t dataLength, U StringTrieBuildOption buildOption) {
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after
871 } 870 }
872 if(iter.hasNext()) { 871 if(iter.hasNext()) {
873 errln("trie iterator hasNext()=TRUE after all items"); 872 errln("trie iterator hasNext()=TRUE after all items");
874 } 873 }
875 UBool hasNext=iter.next(errorCode); 874 UBool hasNext=iter.next(errorCode);
876 errorCode.logIfFailureAndReset("trie iterator next() after all items"); 875 errorCode.logIfFailureAndReset("trie iterator next() after all items");
877 if(hasNext) { 876 if(hasNext) {
878 errln("trie iterator next()=TRUE after all items"); 877 errln("trie iterator next()=TRUE after all items");
879 } 878 }
880 } 879 }
OLDNEW
« no previous file with comments | « source/test/intltest/bidiconf.cpp ('k') | source/test/intltest/caltest.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698