void AlphabeticIndexTest::TestBug9009() { UErrorCode status = U_ZERO_ERROR; Locale loc("root"); AlphabeticIndex aindex(loc, status); TEST_CHECK_STATUS; aindex.nextBucket(status); // Crash here before bug was fixed. TEST_CHECK_STATUS; }
static int weekday(char const ** str) { static char const *days[] = {"sun", "mon", "tue", "wed", "thu", "fri", "sat", NULL}; return aindex(days, str, 3); }
static int month(char const ** str) { static char const *months[] = {"jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec", NULL}; return aindex(months, str, 3); }
void AlphabeticIndexTest::HackPinyinTest() { UErrorCode status = U_ZERO_ERROR; AlphabeticIndex aindex(Locale::createFromName("zh"), status); TEST_CHECK_STATUS; UnicodeString names[sizeof(pinyinTestData) / sizeof(pinyinTestData[0])]; int32_t nameCount; for (nameCount=0; pinyinTestData[nameCount] != NULL; nameCount++) { names[nameCount] = UnicodeString(pinyinTestData[nameCount], -1, UnicodeString::kInvariant).unescape(); aindex.addRecord(names[nameCount], &names[nameCount], status); TEST_CHECK_STATUS; if (U_FAILURE(status)) { return; } } TEST_ASSERT(nameCount == aindex.getRecordCount(status)); // Weak checking: make sure that none of the Chinese names landed in the overflow bucket // of the index, and that the names are distributed among several buckets. // (Exact expected data would be subject to change with evolution of the collation rules.) int32_t bucketCount = 0; int32_t filledBucketCount = 0; while (aindex.nextBucket(status)) { bucketCount++; UnicodeString label = aindex.getBucketLabel(); // std::string s; // std::cout << label.toUTF8String(s) << ": "; UBool bucketHasContents = FALSE; while (aindex.nextRecord(status)) { bucketHasContents = TRUE; UnicodeString name = aindex.getRecordName(); if (aindex.getBucketLabelType() != U_ALPHAINDEX_NORMAL) { errln("File %s, Line %d, Name \"\\u%x\" is in an under or overflow bucket.", __FILE__, __LINE__, name.char32At(0)); } // s.clear(); // std::cout << aindex.getRecordName().toUTF8String(s) << " "; } if (bucketHasContents) { filledBucketCount++; } // std::cout << std::endl; } TEST_ASSERT(bucketCount > 25); TEST_ASSERT(filledBucketCount > 15); }