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