]>
Commit | Line | Data |
---|---|---|
b75a7d8f A |
1 | /******************************************************************** |
2 | * COPYRIGHT: | |
729e4ab9 | 3 | * Copyright (c) 1997-2009, International Business Machines Corporation and |
b75a7d8f A |
4 | * others. All Rights Reserved. |
5 | ********************************************************************/ | |
6 | ||
7 | #include "unicode/utypes.h" | |
8 | ||
9 | #if !UCONFIG_NO_COLLATION | |
10 | ||
11 | #include "unicode/coll.h" | |
12 | #include "unicode/tblcoll.h" | |
13 | #include "unicode/unistr.h" | |
14 | #include "unicode/sortkey.h" | |
15 | #include "jacoll.h" | |
16 | ||
17 | #include "sfwdchit.h" | |
18 | ||
19 | CollationKanaTest::CollationKanaTest() | |
20 | : myCollation(0) | |
21 | { | |
22 | UErrorCode status = U_ZERO_ERROR; | |
23 | myCollation = Collator::createInstance(Locale::getJapan(), status); | |
24 | if(!myCollation || U_FAILURE(status)) { | |
729e4ab9 | 25 | errcheckln(status, __FILE__ "failed to create! err " + UnicodeString(u_errorName(status))); |
b75a7d8f A |
26 | /* if it wasn't already: */ |
27 | delete myCollation; | |
28 | myCollation = NULL; | |
29 | return; | |
30 | } | |
31 | } | |
32 | ||
33 | CollationKanaTest::~CollationKanaTest() | |
34 | { | |
35 | delete myCollation; | |
36 | } | |
37 | ||
38 | const UChar CollationKanaTest::testSourceCases[][CollationKanaTest::MAX_TOKEN_LEN] = { | |
39 | {0xff9E, 0x0000}, | |
40 | {0x3042, 0x0000}, | |
41 | {0x30A2, 0x0000}, | |
42 | {0x3042, 0x3042, 0x0000}, | |
43 | {0x30A2, 0x30FC, 0x0000}, | |
44 | {0x30A2, 0x30FC, 0x30C8, 0x0000} /* 6 */ | |
45 | }; | |
46 | ||
47 | const UChar CollationKanaTest::testTargetCases[][CollationKanaTest::MAX_TOKEN_LEN] = { | |
48 | {0xFF9F, 0x0000}, | |
49 | {0x30A2, 0x0000}, | |
50 | {0x3042, 0x3042, 0x0000}, | |
51 | {0x30A2, 0x30FC, 0x0000}, | |
52 | {0x30A2, 0x30FC, 0x30C8, 0x0000}, | |
53 | {0x3042, 0x3042, 0x3068, 0x0000} /* 6 */ | |
54 | }; | |
55 | ||
56 | const Collator::EComparisonResult CollationKanaTest::results[] = { | |
57 | Collator::LESS, | |
58 | Collator::EQUAL, //Collator::LESS, /* Katakanas and Hiraganas are equal on tertiary level(ICU 2.0)*/ | |
59 | Collator::LESS, | |
60 | Collator::GREATER, // Collator::LESS, /* Prolonged sound mark sorts BEFORE equivalent vowel (ICU 2.0)*/ | |
61 | Collator::LESS, | |
62 | Collator::LESS, //Collator::GREATER /* Prolonged sound mark sorts BEFORE equivalent vowel (ICU 2.0)*//* 6 */ | |
63 | }; | |
64 | ||
65 | const UChar CollationKanaTest::testBaseCases[][CollationKanaTest::MAX_TOKEN_LEN] = { | |
66 | {0x30AB, 0x0000}, | |
67 | {0x30AB, 0x30AD, 0x0000}, | |
68 | {0x30AD, 0x0000}, | |
69 | {0x30AD, 0x30AD, 0x0000} | |
70 | }; | |
71 | ||
72 | const UChar CollationKanaTest::testPlainDakutenHandakutenCases[][CollationKanaTest::MAX_TOKEN_LEN] = { | |
73 | {0x30CF, 0x30AB, 0x0000}, | |
74 | {0x30D0, 0x30AB, 0x0000}, | |
75 | {0x30CF, 0x30AD, 0x0000}, | |
76 | {0x30D0, 0x30AD, 0x0000} | |
77 | }; | |
78 | ||
79 | const UChar CollationKanaTest::testSmallLargeCases[][CollationKanaTest::MAX_TOKEN_LEN] = { | |
80 | {0x30C3, 0x30CF, 0x0000}, | |
81 | {0x30C4, 0x30CF, 0x0000}, | |
82 | {0x30C3, 0x30D0, 0x0000}, | |
83 | {0x30C4, 0x30D0, 0x0000} | |
84 | }; | |
85 | ||
86 | const UChar CollationKanaTest::testKatakanaHiraganaCases[][CollationKanaTest::MAX_TOKEN_LEN] = { | |
87 | {0x3042, 0x30C3, 0x0000}, | |
88 | {0x30A2, 0x30C3, 0x0000}, | |
89 | {0x3042, 0x30C4, 0x0000}, | |
90 | {0x30A2, 0x30C4, 0x0000} | |
91 | }; | |
92 | ||
93 | const UChar CollationKanaTest::testChooonKigooCases[][CollationKanaTest::MAX_TOKEN_LEN] = { | |
94 | /*0*/ {0x30AB, 0x30FC, 0x3042, 0x0000}, | |
95 | /*1*/ {0x30AB, 0x30FC, 0x30A2, 0x0000}, | |
96 | /*2*/ {0x30AB, 0x30A4, 0x3042, 0x0000}, | |
97 | /*3*/ {0x30AB, 0x30A4, 0x30A2, 0x0000}, | |
98 | /*6*/ {0x30AD, 0x30FC, 0x3042, 0x0000}, /* Prolonged sound mark sorts BEFORE equivalent vowel (ICU 2.0)*/ | |
99 | /*7*/ {0x30AD, 0x30FC, 0x30A2, 0x0000}, /* Prolonged sound mark sorts BEFORE equivalent vowel (ICU 2.0)*/ | |
100 | /*4*/ {0x30AD, 0x30A4, 0x3042, 0x0000}, | |
101 | /*5*/ {0x30AD, 0x30A4, 0x30A2, 0x0000}, | |
102 | }; | |
103 | ||
104 | void CollationKanaTest::TestTertiary(/* char* par */) | |
105 | { | |
106 | int32_t i = 0; | |
107 | UErrorCode status = U_ZERO_ERROR; | |
108 | myCollation->setStrength(Collator::TERTIARY); | |
109 | /* for one case, strcollinc fails, since it doesn't have good handling of contractions*/ | |
110 | /* normalization is turned off to stop strcollinc from executing */ | |
111 | myCollation->setAttribute(UCOL_NORMALIZATION_MODE, UCOL_ON, status); | |
112 | myCollation->setAttribute(UCOL_CASE_LEVEL, UCOL_ON, status); | |
113 | for (i = 0; i < 6; i++) { | |
114 | doTest(myCollation, testSourceCases[i], testTargetCases[i], results[i]); | |
115 | } | |
116 | } | |
117 | ||
118 | /* Testing base letters */ | |
119 | void CollationKanaTest::TestBase() | |
120 | { | |
121 | int32_t i; | |
122 | myCollation->setStrength(Collator::PRIMARY); | |
123 | for (i = 0; i < 3 ; i++) | |
124 | doTest(myCollation, testBaseCases[i], testBaseCases[i + 1], Collator::LESS); | |
125 | } | |
126 | ||
127 | /* Testing plain, Daku-ten, Handaku-ten letters */ | |
128 | void CollationKanaTest::TestPlainDakutenHandakuten(void) | |
129 | { | |
130 | int32_t i; | |
131 | myCollation->setStrength(Collator::SECONDARY); | |
132 | for (i = 0; i < 3 ; i++) | |
133 | doTest(myCollation, testPlainDakutenHandakutenCases[i], testPlainDakutenHandakutenCases[i + 1], | |
134 | Collator::LESS); | |
135 | } | |
136 | ||
137 | /* | |
138 | * Test Small, Large letters | |
139 | */ | |
140 | void CollationKanaTest::TestSmallLarge(void) | |
141 | { | |
142 | int32_t i; | |
143 | UErrorCode status = U_ZERO_ERROR; | |
144 | myCollation->setStrength(Collator::TERTIARY); | |
145 | myCollation->setAttribute(UCOL_CASE_LEVEL, UCOL_ON, status); | |
146 | for (i = 0; i < 3 ; i++) | |
147 | doTest(myCollation, testSmallLargeCases[i], testSmallLargeCases[i + 1], Collator::LESS); | |
148 | } | |
149 | ||
150 | /* | |
151 | * Test Katakana, Hiragana letters | |
152 | */ | |
153 | void CollationKanaTest::TestKatakanaHiragana(void) | |
154 | { | |
155 | int32_t i; | |
156 | UErrorCode status = U_ZERO_ERROR; | |
157 | myCollation->setStrength(Collator::QUATERNARY); | |
158 | myCollation->setAttribute(UCOL_CASE_LEVEL, UCOL_ON, status); | |
159 | for (i = 0; i < 3 ; i++) { | |
160 | doTest(myCollation, testKatakanaHiraganaCases[i], testKatakanaHiraganaCases[i + 1], | |
161 | Collator::LESS); | |
162 | } | |
163 | } | |
164 | ||
165 | /* | |
166 | * Test Choo-on kigoo | |
167 | */ | |
168 | void CollationKanaTest::TestChooonKigoo(void) | |
169 | { | |
170 | int32_t i; | |
171 | UErrorCode status = U_ZERO_ERROR; | |
172 | myCollation->setStrength(Collator::QUATERNARY); | |
173 | myCollation->setAttribute(UCOL_CASE_LEVEL, UCOL_ON, status); | |
174 | for (i = 0; i < 7 ; i++) { | |
175 | doTest(myCollation, testChooonKigooCases[i], testChooonKigooCases[i + 1], Collator::LESS); | |
176 | } | |
177 | } | |
178 | ||
179 | ||
180 | void CollationKanaTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) | |
181 | { | |
182 | if (exec) logln("TestSuite CollationKanaTest: "); | |
183 | if(myCollation) { | |
184 | switch (index) { | |
185 | case 0: name = "TestTertiary"; if (exec) TestTertiary(/* par */); break; | |
186 | case 1: name = "TestBase"; if (exec) TestBase(/* par */); break; | |
187 | case 2: name = "TestSmallLarge"; if (exec) TestSmallLarge(/* par */); break; | |
188 | case 3: name = "TestTestPlainDakutenHandakuten"; if (exec) TestPlainDakutenHandakuten(/* par */); break; | |
189 | case 4: name = "TestKatakanaHiragana"; if (exec) TestKatakanaHiragana(/* par */); break; | |
190 | case 5: name = "TestChooonKigoo"; if (exec) TestChooonKigoo(/* par */); break; | |
191 | default: name = ""; break; | |
192 | } | |
193 | } else { | |
729e4ab9 | 194 | dataerrln("Collator couldn't be instantiated!"); |
b75a7d8f A |
195 | name = ""; |
196 | } | |
197 | } | |
198 | ||
199 | #endif /* #if !UCONFIG_NO_COLLATION */ |