diff --git a/icu4c/source/test/intltest/jacoll.cpp b/icu4c/source/test/intltest/jacoll.cpp index 3524bcf210..d9ac242f13 100644 --- a/icu4c/source/test/intltest/jacoll.cpp +++ b/icu4c/source/test/intltest/jacoll.cpp @@ -73,6 +73,45 @@ const Collator::EComparisonResult CollationKanaTest::results[] = { Collator::GREATER }; +const UChar CollationKanaTest::testBaseCases[][CollationKanaTest::MAX_TOKEN_LEN] = { + {0x30AB, 0x0000}, + {0x30AB, 0x30AD, 0x0000}, + {0x30AD, 0x0000}, + {0x30AD, 0x30AD, 0x0000} +}; + +const UChar CollationKanaTest::testPlainDakutenHandakutenCases[][CollationKanaTest::MAX_TOKEN_LEN] = { + {0x30CF, 0x30AB, 0x0000}, + {0x30D0, 0x30AB, 0x0000}, + {0x30CF, 0x30AD, 0x0000}, + {0x30D0, 0x30AD, 0x0000} +}; + +const UChar CollationKanaTest::testSmallLargeCases[][CollationKanaTest::MAX_TOKEN_LEN] = { + {0x30C3, 0x30CF, 0x0000}, + {0x30C4, 0x30CF, 0x0000}, + {0x30C3, 0x30D0, 0x0000}, + {0x30C4, 0x30D0, 0x0000} +}; + +const UChar CollationKanaTest::testKatakanaHiraganaCases[][CollationKanaTest::MAX_TOKEN_LEN] = { + {0x3042, 0x30C3, 0x0000}, + {0x30A2, 0x30C3, 0x0000}, + {0x3042, 0x30C4, 0x0000}, + {0x30A2, 0x30C4, 0x0000} +}; + +const UChar CollationKanaTest::testChooonKigooCases[][CollationKanaTest::MAX_TOKEN_LEN] = { + /*0*/ {0x30AB, 0x30FC, 0x3042, 0x0000}, + /*1*/ {0x30AB, 0x30FC, 0x30A2, 0x0000}, + /*2*/ {0x30AB, 0x30A4, 0x3042, 0x0000}, + /*3*/ {0x30AB, 0x30A4, 0x30A2, 0x0000}, + /*4*/ {0x30AD, 0x30A4, 0x3042, 0x0000}, + /*5*/ {0x30AD, 0x30A4, 0x30A2, 0x0000}, + /*6*/ {0x30AD, 0x30FC, 0x3042, 0x0000}, + /*7*/ {0x30AD, 0x30FC, 0x30A2, 0x0000} +}; + void CollationKanaTest::doTest( UnicodeString source, UnicodeString target, Collator::EComparisonResult result) { Collator::EComparisonResult compareResult = myCollation->compare(source, target); @@ -105,11 +144,79 @@ void CollationKanaTest::TestTertiary(/* char* par */) } } +/* Testing base letters */ +void CollationKanaTest::TestBase() +{ + int32_t i; + UErrorCode status = U_ZERO_ERROR; + myCollation->setStrength(Collator::PRIMARY); + for (i = 0; i < 3 ; i++) + doTest(testBaseCases[i], testBaseCases[i + 1], Collator::LESS); +} + +/* Testing plain, Daku-ten, Handaku-ten letters */ +void CollationKanaTest::TestPlainDakutenHandakuten(void) +{ + int32_t i; + UErrorCode status = U_ZERO_ERROR; + myCollation->setStrength(Collator::SECONDARY); + for (i = 0; i < 3 ; i++) + doTest(testPlainDakutenHandakutenCases[i], testPlainDakutenHandakutenCases[i + 1], + Collator::LESS); +} + +/* +* Test Small, Large letters +*/ +void CollationKanaTest::TestSmallLarge(void) +{ + int32_t i; + UErrorCode status = U_ZERO_ERROR; + myCollation->setStrength(Collator::TERTIARY); + myCollation->setAttribute(UCOL_CASE_LEVEL, UCOL_ON, status); + for (i = 0; i < 3 ; i++) + doTest(testSmallLargeCases[i], testSmallLargeCases[i + 1], Collator::LESS); +} + +/* +* Test Katakana, Hiragana letters +*/ +void CollationKanaTest::TestKatakanaHiragana(void) +{ + int32_t i; + UErrorCode status = U_ZERO_ERROR; + myCollation->setStrength(Collator::QUATERNARY); + myCollation->setAttribute(UCOL_CASE_LEVEL, UCOL_ON, status); + for (i = 0; i < 3 ; i++) { + doTest(testKatakanaHiraganaCases[i], testKatakanaHiraganaCases[i + 1], + Collator::LESS); + } +} + +/* +* Test Choo-on kigoo +*/ +void CollationKanaTest::TestChooonKigoo(void) +{ + int32_t i; + UErrorCode status = U_ZERO_ERROR; + myCollation->setAttribute(UCOL_CASE_LEVEL, UCOL_ON, status); + for (i = 0; i < 7 ; i++) { + doTest(testChooonKigooCases[i], testChooonKigooCases[i + 1], Collator::LESS); + } +} + + void CollationKanaTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) { if (exec) logln("TestSuite CollationKanaTest: "); switch (index) { case 0: name = "TestTertiary"; if (exec) TestTertiary(/* par */); break; + case 1: name = "TestBase"; if (exec) TestBase(/* par */); break; + case 2: name = "TestSmallLarge"; if (exec) TestSmallLarge(/* par */); break; + case 3: name = "TestTestPlainDakutenHandakuten"; if (exec) TestPlainDakutenHandakuten(/* par */); break; + case 4: name = "TestKatakanaHiragana"; if (exec) TestKatakanaHiragana(/* par */); break; + case 5: name = "TestChooonKigoo"; if (exec) TestChooonKigoo(/* par */); break; default: name = ""; break; } } diff --git a/icu4c/source/test/intltest/jacoll.h b/icu4c/source/test/intltest/jacoll.h index f85c938aac..9c9b2bcb71 100644 --- a/icu4c/source/test/intltest/jacoll.h +++ b/icu4c/source/test/intltest/jacoll.h @@ -40,10 +40,30 @@ public: // performs test with strength TERIARY void TestTertiary(/* char* par */); + /* Testing base letters */ + void TestBase(); + + /* Testing plain, Daku-ten, Handaku-ten letters */ + void TestPlainDakutenHandakuten(); + + /* Test Small, Large letters */ + void TestSmallLarge(); + + /* Test Katakana, Hiragana letters */ + void TestKatakanaHiragana(); + + /* Test Choo-on kigoo */ + void TestChooonKigoo(); + private: static const UChar testSourceCases[][MAX_TOKEN_LEN]; static const UChar testTargetCases[][MAX_TOKEN_LEN]; static const Collator::EComparisonResult results[]; + static const UChar testBaseCases[][MAX_TOKEN_LEN]; + static const UChar testPlainDakutenHandakutenCases[][MAX_TOKEN_LEN]; + static const UChar testSmallLargeCases[][MAX_TOKEN_LEN]; + static const UChar testKatakanaHiraganaCases[][MAX_TOKEN_LEN]; + static const UChar testChooonKigooCases[][MAX_TOKEN_LEN]; Collator *myCollation; };