1b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/******************************************************************** 2b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * COPYRIGHT: 3b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * Copyright (c) 2011, International Business Machines Corporation and 4b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * others. All Rights Reserved. 5b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho ********************************************************************/ 6b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// 7b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// file: alphaindex.cpp 8b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// Alphabetic Index Tests. 9b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// 10b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#include "intltest.h" 11b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#include "alphaindextst.h" 12b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 13b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#include "unicode/alphaindex.h" 14b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#include "unicode/coll.h" 15b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#include "unicode/tblcoll.h" 16b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#include "unicode/uniset.h" 17b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 18b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// #include <string> 19b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// #include <iostream> 20b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 21b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoAlphabeticIndexTest::AlphabeticIndexTest() { 22b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} 23b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 24b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoAlphabeticIndexTest::~AlphabeticIndexTest() { 25b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} 26b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 27b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehovoid AlphabeticIndexTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) 28b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho{ 29b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (exec) logln("TestSuite AlphabeticIndex: "); 30b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho switch (index) { 31b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 32b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho case 0: name = "APITest"; 33b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (exec) APITest(); 34b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho break; 35b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 36b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho case 1: name = "ManyLocales"; 37b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (exec) ManyLocalesTest(); 38b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho break; 39b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 40b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho case 2: name = "HackPinyinTest"; 41b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (exec) HackPinyinTest(); 42b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho break; 43b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 44b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho default: name = ""; 45b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho break; //needed to end loop 46b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 47b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} 48b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 49b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#define TEST_CHECK_STATUS {if (U_FAILURE(status)) {dataerrln("%s:%d: Test failure. status=%s", \ 50b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho __FILE__, __LINE__, u_errorName(status)); return;}} 51b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 52b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#define TEST_ASSERT(expr) {if ((expr)==FALSE) {errln("%s:%d: Test failure \n", __FILE__, __LINE__);};} 53b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 54b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// 55b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// APITest. Invoke every function at least once, and check that it does something. 56b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// Does not attempt to check complete functionality. 57b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// 58b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehovoid AlphabeticIndexTest::APITest() { 59b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 60b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // 61b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // Simple constructor and destructor, getBucketCount() 62b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // 63b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UErrorCode status = U_ZERO_ERROR; 64b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t lc = 0; 65b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t i = 0; 66b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho AlphabeticIndex *index = new AlphabeticIndex(Locale::getEnglish(), status); 67b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 68b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho lc = index->getBucketCount(status); 69b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 70b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(28 == lc); // 26 letters plus two under/overflow labels. 71b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho //printf("getBucketCount() == %d\n", lc); 72b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete index; 73b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 74b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // addLabels() 75b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 76b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 77b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho index = new AlphabeticIndex(Locale::getEnglish(), status); 78b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 79b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeSet additions; 80b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho additions.add((UChar32)0x410).add((UChar32)0x415); // A couple of Cyrillic letters 81b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho index->addLabels(additions, status); 82b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 83b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho lc = index->getBucketCount(status); 84b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 85b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // TODO: should get 31. Java also gives 30. Needs fixing 86b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(30 == lc); // 26 Latin letters plus 87b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // TEST_ASSERT(31 == lc); // 26 Latin letters plus 88b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // 2 Cyrillic letters plus 89b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // 1 inflow label plus 90b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // two under/overflow labels. 91b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // std::cout << lc << std::endl; 92b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete index; 93b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 94b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 95b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // addLabels(Locale) 96b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 97b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 98b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho index = new AlphabeticIndex(Locale::getEnglish(), status); 99b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 100b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho AlphabeticIndex &aip = index->addLabels(Locale::getJapanese(), status); 101b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(&aip == index); 102b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 103b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho lc = index->getBucketCount(status); 104b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 105b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(35 < lc); // Japanese should add a bunch. Don't rely on the exact value. 106b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete index; 107b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 108b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // GetCollator(), Get under/in/over flow labels 109b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 110b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 111b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho index = new AlphabeticIndex(Locale::getGerman(), status); 112b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 113b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho Collator *germanCol = Collator::createInstance(Locale::getGerman(), status); 114b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 115b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const RuleBasedCollator &indexCol = index->getCollator(); 116b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(*germanCol == indexCol); 117b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete germanCol; 118b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 119b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString ELLIPSIS; ELLIPSIS.append((UChar32)0x2026); 120b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString s = index->getUnderflowLabel(); 121b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(ELLIPSIS == s); 122b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho s = index->getOverflowLabel(); 123b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(ELLIPSIS == s); 124b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho s = index->getInflowLabel(); 125b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(ELLIPSIS == s); 126b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho index->setOverflowLabel(UNICODE_STRING_SIMPLE("O"), status); 127b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho index->setUnderflowLabel(UNICODE_STRING_SIMPLE("U"), status).setInflowLabel(UNICODE_STRING_SIMPLE("I"), status); 128b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho s = index->getUnderflowLabel(); 129b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(UNICODE_STRING_SIMPLE("U") == s); 130b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho s = index->getOverflowLabel(); 131b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(UNICODE_STRING_SIMPLE("O") == s); 132b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho s = index->getInflowLabel(); 133b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(UNICODE_STRING_SIMPLE("I") == s); 134b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 135b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 136b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 137b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 138b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete index; 139b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 140b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 141b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 142b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const UnicodeString adam = UNICODE_STRING_SIMPLE("Adam"); 143b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const UnicodeString baker = UNICODE_STRING_SIMPLE("Baker"); 144b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const UnicodeString charlie = UNICODE_STRING_SIMPLE("Charlie"); 145b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const UnicodeString chad = UNICODE_STRING_SIMPLE("Chad"); 146b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const UnicodeString zed = UNICODE_STRING_SIMPLE("Zed"); 147b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const UnicodeString Cyrillic = UNICODE_STRING_SIMPLE("\\u0410\\u0443\\u0435").unescape(); 148b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 149b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // addRecord(), verify that it comes back out. 150b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // 151b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 152b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho index = new AlphabeticIndex(Locale::getEnglish(), status); 153b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 154b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho index->addRecord(UnicodeString("Adam"), this, status); 155b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UBool b; 156b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 157b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho index->resetBucketIterator(status); 158b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 159b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho index->nextBucket(status); // Move to underflow label 160b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho index->nextBucket(status); // Move to "A" 161b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 162b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const UnicodeString &label2 = index->getBucketLabel(); 163b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString A_STR = UNICODE_STRING_SIMPLE("A"); 164b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(A_STR == label2); 165b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 166b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho b = index->nextRecord(status); 167b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 168b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(b); 169b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const UnicodeString &itemName = index->getRecordName(); 170b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(adam == itemName); 171b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 172b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const void *itemContext = index->getRecordData(); 173b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(itemContext == this); 174b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 175b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete index; 176b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 177b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // clearRecords, addRecord(), Iteration 178b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 179b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 180b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho index = new AlphabeticIndex(Locale::getEnglish(), status); 181b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 182b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho while (index->nextBucket(status)) { 183b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 184b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho while (index->nextRecord(status)) { 185b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 186b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(FALSE); // No items have been added. 187b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 188b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 189b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 190b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 191b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho index->addRecord(adam, NULL, status); 192b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho index->addRecord(baker, NULL, status); 193b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho index->addRecord(charlie, NULL, status); 194b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho index->addRecord(chad, NULL, status); 195b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 196b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int itemCount = 0; 197b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho index->resetBucketIterator(status); 198b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho while (index->nextBucket(status)) { 199b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 200b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho while (index->nextRecord(status)) { 201b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 202b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho ++itemCount; 203b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 204b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 205b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 206b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(itemCount == 4); 207b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 208b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(index->nextBucket(status) == FALSE); 209b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho index->resetBucketIterator(status); 210b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 211b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(index->nextBucket(status) == TRUE); 212b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 213b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho index->clearRecords(status); 214b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 215b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho index->resetBucketIterator(status); 216b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho while (index->nextBucket(status)) { 217b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 218b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho while (index->nextRecord(status)) { 219b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(FALSE); // No items have been added. 220b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 221b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 222b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 223b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete index; 224b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 225b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // getBucketLabel(), getBucketType() 226b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 227b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 228b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho index = new AlphabeticIndex(Locale::getEnglish(), status); 229b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 230b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho index->setUnderflowLabel(adam, status).setOverflowLabel(charlie, status); 231b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 232b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (i=0; index->nextBucket(status); i++) { 233b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 234b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString label = index->getBucketLabel(); 235b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UAlphabeticIndexLabelType type = index->getBucketLabelType(); 236b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (i == 0) { 237b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(type == U_ALPHAINDEX_UNDERFLOW); 238b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(label == adam); 239b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else if (i <= 26) { 240b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // Labels A - Z for English locale 241b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(type == U_ALPHAINDEX_NORMAL); 242b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString expectedLabel((UChar)(0x40 + i)); 243b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(expectedLabel == label); 244b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else if (i == 27) { 245b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(type == U_ALPHAINDEX_OVERFLOW); 246b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(label == charlie); 247b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 248b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(FALSE); 249b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 250b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 251b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(i==28); 252b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete index; 253b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 254b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // getBucketIndex() 255b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 256b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 257b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho index = new AlphabeticIndex(Locale::getEnglish(), status); 258b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 259b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t n = index->getBucketIndex(adam, status); 260b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 261b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(n == 1); /* Label #0 is underflow, 1 is A, etc. */ 262b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho n = index->getBucketIndex(baker, status); 263b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(n == 2); 264b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho n = index->getBucketIndex(Cyrillic, status); 265b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(n == 27); // Overflow label 266b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho n = index->getBucketIndex(zed, status); 267b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(n == 26); 268b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 269b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (i=0; index->nextBucket(status); i++) { 270b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho n = index->getBucketIndex(); 271b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(n == i); 272b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString label = index->getBucketLabel(); 273b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(n == i); 274b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 275b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(i == 28); 276b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 277b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete index; 278b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho index = new AlphabeticIndex(Locale::createFromName("ru"), status); 279b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho //Locale loc = Locale::createFromName(localeName); 280b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 281b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho n = index->getBucketIndex(adam, status); 282b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 283b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(n == 0); // Label #0 is underflow 284b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho n = index->getBucketIndex(baker, status); 285b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(n == 0); 286b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho n = index->getBucketIndex(Cyrillic, status); 287b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(n == 1); // Overflow label 288b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho n = index->getBucketIndex(zed, status); 289b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(n == 0); 290b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 291b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete index; 292b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 293b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} 294b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 295b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 296b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char * KEY_LOCALES[] = { 297b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "en", "es", "de", "fr", "ja", "it", "tr", "pt", "zh", "nl", 298b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "pl", "ar", "ru", "zh_Hant", "ko", "th", "sv", "fi", "da", 299b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "he", "nb", "el", "hr", "bg", "sk", "lt", "vi", "lv", "sr", 300b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "pt_PT", "ro", "hu", "cs", "id", "sl", "fil", "fa", "uk", 301b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "ca", "hi", "et", "eu", "is", "sw", "ms", "bn", "am", "ta", 302b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "te", "mr", "ur", "ml", "kn", "gu", "or", ""}; 303b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 304b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 305b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehovoid AlphabeticIndexTest::ManyLocalesTest() { 306b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UErrorCode status = U_ZERO_ERROR; 307b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t lc = 0; 308b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho AlphabeticIndex *index = NULL; 309b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 310b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (int i=0; ; ++i) { 311b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 312b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const char *localeName = KEY_LOCALES[i]; 313b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (localeName[0] == 0) { 314b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho break; 315b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 316b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // std::cout << localeName << " "; 317b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho Locale loc = Locale::createFromName(localeName); 318b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho index = new AlphabeticIndex(loc, status); 319b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 320b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho lc = index->getBucketCount(status); 321b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 322b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // std::cout << "getBucketCount() == " << lc << std::endl; 323b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 324b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho while (index->nextBucket(status)) { 325b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 326b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const UnicodeString &label = index->getBucketLabel(); 327b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(label.length()>0); 328b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // std::string ss; 329b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // std::cout << ":" << label.toUTF8String(ss); 330b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 331b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // std::cout << ":" << std::endl; 332b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 333b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 334b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete index; 335b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 336b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} 337b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 338b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 339b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// Test data for Pinyin based indexes. 340b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// The Chinese characters should be distributed under latin labels in 341b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// an index. 342b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 343b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *pinyinTestData[] = { 344b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "\\u0101", "\\u5416", "\\u58ba", // 345b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "b", "\\u516b", "\\u62d4", "\\u8500", // 346b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "c", "\\u5693", "\\u7938", "\\u9e7e", // 347b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "d", "\\u5491", "\\u8fcf", "\\u964a", // 348b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "\\u0113","\\u59b8", "\\u92e8", "\\u834b", // 349b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "f", "\\u53d1", "\\u9197", "\\u99a5", // 350b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "g", "\\u7324", "\\u91d3", "\\u8142", // 351b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "h", "\\u598e", "\\u927f", "\\u593b", // 352b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "j", "\\u4e0c", "\\u6785", "\\u9d58", // 353b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "k", "\\u5494", "\\u958b", "\\u7a52", // 354b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "l", "\\u5783", "\\u62c9", "\\u9ba5", // 355b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "m", "\\u5638", "\\u9ebb", "\\u65c0", // 356b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "n", "\\u62ff", "\\u80ad", "\\u685b", // 357b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "\\u014D", "\\u5662", "\\u6bee", "\\u8bb4", // 358b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "p", "\\u5991", "\\u8019", "\\u8c31", // 359b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "q", "\\u4e03", "\\u6053", "\\u7f56", // 360b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "r", "\\u5465", "\\u72aa", "\\u6e03", // 361b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "s", "\\u4ee8", "\\u9491", "\\u93c1", // 362b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "t", "\\u4ed6", "\\u9248", "\\u67dd", // 363b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "w", "\\u5c72", "\\u5558", "\\u5a7a", // 364b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "x", "\\u5915", "\\u5438", "\\u6bbe", // 365b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "y", "\\u4e2b", "\\u82bd", "\\u8574", // 366b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "z", "\\u5e00", "\\u707d", "\\u5c0a", 367b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NULL 368b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho }; 369b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 370b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehovoid AlphabeticIndexTest::HackPinyinTest() { 371b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UErrorCode status = U_ZERO_ERROR; 372b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho AlphabeticIndex aindex(Locale::createFromName("zh"), status); 373b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 374b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 375b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString names[sizeof(pinyinTestData) / sizeof(pinyinTestData[0])]; 376b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t nameCount; 377b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (nameCount=0; pinyinTestData[nameCount] != NULL; nameCount++) { 378b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho names[nameCount] = UnicodeString(pinyinTestData[nameCount], -1, UnicodeString::kInvariant).unescape(); 379b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho aindex.addRecord(names[nameCount], &names[nameCount], status); 380b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_CHECK_STATUS; 381b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status)) { 382b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return; 383b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 384b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 385b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(nameCount == aindex.getRecordCount(status)); 386b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 387b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // Weak checking: make sure that none of the Chinese names landed in the overflow bucket 388b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // of the index, and that the names are distributed among several buckets. 389b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // (Exact expected data would be subject to change with evolution of the collation rules.) 390b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 391b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t bucketCount = 0; 392b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t filledBucketCount = 0; 393b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho while (aindex.nextBucket(status)) { 394b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho bucketCount++; 395b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString label = aindex.getBucketLabel(); 396b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // std::string s; 397b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // std::cout << label.toUTF8String(s) << ": "; 398b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 399b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UBool bucketHasContents = FALSE; 400b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho while (aindex.nextRecord(status)) { 401b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho bucketHasContents = TRUE; 402b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString name = aindex.getRecordName(); 403b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (aindex.getBucketLabelType() != U_ALPHAINDEX_NORMAL) { 404b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("File %s, Line %d, Name \"\\u%x\" is in an under or overflow bucket.", 405b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho __FILE__, __LINE__, name.char32At(0)); 406b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 407b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // s.clear(); 408b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // std::cout << aindex.getRecordName().toUTF8String(s) << " "; 409b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 410b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (bucketHasContents) { 411b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho filledBucketCount++; 412b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 413b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // std::cout << std::endl; 414b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 415b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(bucketCount > 25); 416b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(filledBucketCount > 15); 417b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} 418