OLD | NEW |
| (Empty) |
1 /******************************************************************** | |
2 * COPYRIGHT: | |
3 * Copyright (c) 1997-2009, International Business Machines Corporation and | |
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)) { | |
25 errcheckln(status, __FILE__ "failed to create! err " + UnicodeString(u_e
rrorName(status))); | |
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_LE
N] = { | |
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_LE
N] = { | |
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 e
quivalent 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[][CollationKanaTe
st::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_TOKE
N_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::MA
X_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_TOK
EN_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 e
quivalent vowel (ICU 2.0)*/ | |
99 /*7*/ {0x30AD, 0x30FC, 0x30A2, 0x0000}, /* Prolonged sound mark sorts BEFORE e
quivalent 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 co
ntractions*/ | |
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::LE
SS); | |
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], testPlainDakuten
HandakutenCases[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], Coll
ator::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], Co
llator::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 */); b
reak; | |
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) TestPlai
nDakutenHandakuten(/* par */); break; | |
189 case 4: name = "TestKatakanaHiragana"; if (exec) TestKatakanaHiraga
na(/* par */); break; | |
190 case 5: name = "TestChooonKigoo"; if (exec) TestChooonKigoo(/* par
*/); break; | |
191 default: name = ""; break; | |
192 } | |
193 } else { | |
194 dataerrln("Collator couldn't be instantiated!"); | |
195 name = ""; | |
196 } | |
197 } | |
198 | |
199 #endif /* #if !UCONFIG_NO_COLLATION */ | |
OLD | NEW |