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 "decoll.h"
12
13 #ifndef _COLL
14 #include "unicode/coll.h"
15 #endif
16
17 #ifndef _TBLCOLL
18 #include "unicode/tblcoll.h"
19 #endif
20
21 #ifndef _UNISTR
22 #include "unicode/unistr.h"
23 #endif
24
25 #ifndef _SORTKEY
26 #include "unicode/sortkey.h"
27 #endif
28
29 #ifndef _DECOLL
30 #include "decoll.h"
31 #endif
32
33 #include "sfwdchit.h"
34
CollationGermanTest()35 CollationGermanTest::CollationGermanTest()
36 : myCollation(0)
37 {
38 UErrorCode status = U_ZERO_ERROR;
39 myCollation = Collator::createInstance(Locale::getGermany(), status);
40 if(!myCollation || U_FAILURE(status)) {
41 errcheckln(status, __FILE__ "failed to create! err " + UnicodeString(u_errorName(status)));
42 /* if it wasn't already: */
43 delete myCollation;
44 myCollation = NULL;
45 }
46 }
47
~CollationGermanTest()48 CollationGermanTest::~CollationGermanTest()
49 {
50 delete myCollation;
51 }
52
53 const UChar CollationGermanTest::testSourceCases[][CollationGermanTest::MAX_TOKEN_LEN] =
54 {
55 {0x47, 0x72, 0x00F6, 0x00DF, 0x65, 0},
56 {0x61, 0x62, 0x63, 0},
57 {0x54, 0x00F6, 0x6e, 0x65, 0},
58 {0x54, 0x00F6, 0x6e, 0x65, 0},
59 {0x54, 0x00F6, 0x6e, 0x65, 0},
60 {0x61, 0x0308, 0x62, 0x63, 0},
61 {0x00E4, 0x62, 0x63, 0},
62 {0x00E4, 0x62, 0x63, 0},
63 {0x53, 0x74, 0x72, 0x61, 0x00DF, 0x65, 0},
64 {0x65, 0x66, 0x67, 0},
65 {0x00E4, 0x62, 0x63, 0},
66 {0x53, 0x74, 0x72, 0x61, 0x00DF, 0x65, 0}
67 };
68
69 const UChar CollationGermanTest::testTargetCases[][CollationGermanTest::MAX_TOKEN_LEN] =
70 {
71 {0x47, 0x72, 0x6f, 0x73, 0x73, 0x69, 0x73, 0x74, 0},
72 {0x61, 0x0308, 0x62, 0x63, 0},
73 {0x54, 0x6f, 0x6e, 0},
74 {0x54, 0x6f, 0x64, 0},
75 {0x54, 0x6f, 0x66, 0x75, 0},
76 {0x41, 0x0308, 0x62, 0x63, 0},
77 {0x61, 0x0308, 0x62, 0x63, 0},
78 {0x61, 0x65, 0x62, 0x63, 0},
79 {0x53, 0x74, 0x72, 0x61, 0x73, 0x73, 0x65, 0},
80 {0x65, 0x66, 0x67, 0},
81 {0x61, 0x65, 0x62, 0x63, 0},
82 {0x53, 0x74, 0x72, 0x61, 0x73, 0x73, 0x65, 0}
83 };
84
85 const Collator::EComparisonResult CollationGermanTest::results[][2] =
86 {
87 // Primary Tertiary
88 { Collator::LESS, Collator::LESS },
89 { Collator::EQUAL, Collator::LESS },
90 { Collator::GREATER, Collator::GREATER },
91 { Collator::GREATER, Collator::GREATER },
92 { Collator::GREATER, Collator::GREATER },
93 { Collator::EQUAL, Collator::LESS },
94 { Collator::EQUAL, Collator::EQUAL },
95 { Collator::LESS, Collator::LESS },
96 { Collator::EQUAL, Collator::GREATER },
97 { Collator::EQUAL, Collator::EQUAL },
98 { Collator::LESS, Collator::LESS },
99 { Collator::EQUAL, Collator::GREATER }
100 };
101
102
TestTertiary()103 void CollationGermanTest::TestTertiary(/* char* par */)
104 {
105 if(myCollation == NULL ) {
106 dataerrln("decoll: cannot start test, collator is null\n");
107 return;
108 }
109
110 int32_t i = 0;
111 UErrorCode status = U_ZERO_ERROR;
112 myCollation->setStrength(Collator::TERTIARY);
113 myCollation->setAttribute(UCOL_NORMALIZATION_MODE, UCOL_ON, status);
114 for (i = 0; i < 12 ; i++)
115 {
116 doTest(myCollation, testSourceCases[i], testTargetCases[i], results[i][1]);
117 }
118 }
TestPrimary()119 void CollationGermanTest::TestPrimary(/* char* par */)
120 {
121 if(myCollation == NULL ) {
122 dataerrln("decoll: cannot start test, collator is null\n");
123 return;
124 }
125 int32_t i;
126 UErrorCode status = U_ZERO_ERROR;
127 myCollation->setStrength(Collator::PRIMARY);
128 myCollation->setAttribute(UCOL_NORMALIZATION_MODE, UCOL_ON, status);
129 for (i = 0; i < 12 ; i++)
130 {
131 doTest(myCollation, testSourceCases[i], testTargetCases[i], results[i][0]);
132 }
133 }
134
runIndexedTest(int32_t index,UBool exec,const char * & name,char *)135 void CollationGermanTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ )
136 {
137 if (exec) logln("TestSuite CollationGermanTest: ");
138 switch (index)
139 {
140 case 0: name = "TestPrimary"; if (exec) TestPrimary(/* par */); break;
141 case 1: name = "TestTertiary"; if (exec) TestTertiary(/* par */); break;
142 default: name = ""; break;
143 }
144 }
145
146 #endif /* #if !UCONFIG_NO_COLLATION */
147