]>
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 | * | |
8 | * File encoll.C | |
9 | * | |
10 | * Modification History: | |
11 | * Name Description | |
12 | * Madhu Katragadda Ported for C API | |
13 | *********************************************************************************/ | |
14 | /** | |
15 | * CollationEnglishTest is a third level test class. This tests the locale | |
16 | * specific primary, secondary and tertiary rules. For example, the ignorable | |
17 | * character '-' in string "black-bird". The en_US locale uses the default | |
18 | * collation rules as its sorting sequence. | |
19 | */ | |
20 | ||
21 | #include <stdlib.h> | |
22 | #include <string.h> | |
23 | ||
24 | #include "unicode/utypes.h" | |
25 | ||
26 | #if !UCONFIG_NO_COLLATION | |
27 | ||
28 | #include "unicode/ucol.h" | |
29 | #include "unicode/uloc.h" | |
30 | #include "cintltst.h" | |
31 | #include "encoll.h" | |
32 | #include "ccolltst.h" | |
33 | #include "callcoll.h" | |
34 | #include "unicode/ustring.h" | |
35 | ||
36 | static UCollator *myCollation = NULL; | |
37 | const static UChar testSourceCases[][MAX_TOKEN_LEN] = { | |
38 | {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, 0}, | |
39 | {(UChar)0x0062 /* 'b' */, (UChar)0x006C /* 'l' */, (UChar)0x0061 /* 'a' */, (UChar)0x0063 /* 'c' */, (UChar)0x006B /* 'k' */, (UChar)0x002D /* '-' */, (UChar)0x0062 /* 'b' */, (UChar)0x0069 /* 'i' */, (UChar)0x0072 /* 'r' */, (UChar)0x0064 /* 'd' */, 0}, | |
40 | {(UChar)0x0062 /* 'b' */, (UChar)0x006C /* 'l' */, (UChar)0x0061 /* 'a' */, (UChar)0x0063 /* 'c' */, (UChar)0x006B /* 'k' */, (UChar)0x0020 /* ' ' */, (UChar)0x0062 /* 'b' */, (UChar)0x0069 /* 'i' */, (UChar)0x0072 /* 'r' */, (UChar)0x0064 /* 'd' */, 0}, | |
41 | {(UChar)0x0062 /* 'b' */, (UChar)0x006C /* 'l' */, (UChar)0x0061 /* 'a' */, (UChar)0x0063 /* 'c' */, (UChar)0x006B /* 'k' */, (UChar)0x002D /* '-' */, (UChar)0x0062 /* 'b' */, (UChar)0x0069 /* 'i' */, (UChar)0x0072 /* 'r' */, (UChar)0x0064 /* 'd' */, 0}, | |
42 | {(UChar)0x0048 /* 'H' */, (UChar)0x0065 /* 'e' */, (UChar)0x006C /* 'l' */, (UChar)0x006C /* 'l' */, (UChar)0x006F /* 'o' */, 0}, | |
43 | {(UChar)0x0041 /* 'A' */, (UChar)0x0042 /* 'B' */, (UChar)0x0043 /* 'C' */, 0}, | |
44 | {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, | |
45 | {(UChar)0x0062 /* 'b' */, (UChar)0x006C /* 'l' */, (UChar)0x0061 /* 'a' */, (UChar)0x0063 /* 'c' */, (UChar)0x006B /* 'k' */, (UChar)0x0062 /* 'b' */, (UChar)0x0069 /* 'i' */, (UChar)0x0072 /* 'r' */, (UChar)0x0064 /* 'd' */, 0}, | |
46 | {(UChar)0x0062 /* 'b' */, (UChar)0x006C /* 'l' */, (UChar)0x0061 /* 'a' */, (UChar)0x0063 /* 'c' */, (UChar)0x006B /* 'k' */, (UChar)0x002D /* '-' */, (UChar)0x0062 /* 'b' */, (UChar)0x0069 /* 'i' */, (UChar)0x0072 /* 'r' */, (UChar)0x0064 /* 'd' */, 0}, | |
47 | {(UChar)0x0062 /* 'b' */, (UChar)0x006C /* 'l' */, (UChar)0x0061 /* 'a' */, (UChar)0x0063 /* 'c' */, (UChar)0x006B /* 'k' */, (UChar)0x002D /* '-' */, (UChar)0x0062 /* 'b' */, (UChar)0x0069 /* 'i' */, (UChar)0x0072 /* 'r' */, (UChar)0x0064 /* 'd' */, 0}, | |
48 | {(UChar)0x0070 /* 'p' */, 0x00EA, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, (UChar)0x0065 /* 'e' */, 0}, | |
49 | {(UChar)0x0070 /* 'p' */, 0x00E9, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, 0x00E9, 0}, | |
50 | {0x00C4, (UChar)0x0042 /* 'B' */, 0x0308, (UChar)0x0043 /* 'C' */, 0x0308, 0}, | |
51 | {(UChar)0x0061 /* 'a' */, 0x0308, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, | |
52 | {(UChar)0x0070 /* 'p' */, 0x00E9, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, (UChar)0x0065 /* 'e' */, (UChar)0x0072 /* 'r' */, 0}, | |
53 | {(UChar)0x0072 /* 'r' */, (UChar)0x006F /* 'o' */, (UChar)0x006C /* 'l' */, (UChar)0x0065 /* 'e' */, (UChar)0x0073 /* 's' */, 0}, | |
54 | {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, | |
55 | {(UChar)0x0041 /* 'A' */, 0}, | |
56 | {(UChar)0x0041 /* 'A' */, 0}, | |
57 | {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, 0}, | |
58 | {(UChar)0x0074 /* 't' */, (UChar)0x0063 /* 'c' */, (UChar)0x006F /* 'o' */, (UChar)0x006D /* 'm' */, (UChar)0x0070 /* 'p' */, (UChar)0x0061 /* 'a' */, (UChar)0x0072 /* 'r' */, (UChar)0x0065 /* 'e' */, (UChar)0x0070 /* 'p' */, (UChar)0x006C /* 'l' */, (UChar)0x0061 /* 'a' */, (UChar)0x0069 /* 'i' */, (UChar)0x006E /* 'n' */, 0}, | |
59 | {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, 0}, | |
60 | {(UChar)0x0061 /* 'a' */, (UChar)0x0023 /* '#' */, (UChar)0x0062 /* 'b' */, 0}, | |
61 | {(UChar)0x0061 /* 'a' */, (UChar)0x0023 /* '#' */, (UChar)0x0062 /* 'b' */, 0}, | |
62 | {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, | |
63 | {(UChar)0x0041 /* 'A' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, (UChar)0x0064 /* 'd' */, (UChar)0x0061 /* 'a' */, 0}, | |
64 | {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, (UChar)0x0064 /* 'd' */, (UChar)0x0061 /* 'a' */, 0}, | |
65 | {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, (UChar)0x0064 /* 'd' */, (UChar)0x0061 /* 'a' */, 0}, | |
66 | {0x00E6, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, (UChar)0x0064 /* 'd' */, (UChar)0x0061 /* 'a' */, 0}, | |
67 | {0x00E4, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, (UChar)0x0064 /* 'd' */, (UChar)0x0061 /* 'a' */, 0}, | |
68 | {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, | |
69 | {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, | |
70 | {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, | |
71 | {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, | |
72 | {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, | |
73 | {(UChar)0x0061 /* 'a' */, (UChar)0x0063 /* 'c' */, (UChar)0x0048 /* 'H' */, (UChar)0x0063 /* 'c' */, 0}, | |
74 | {(UChar)0x0061 /* 'a' */, 0x0308, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, | |
75 | {(UChar)0x0074 /* 't' */, (UChar)0x0068 /* 'h' */, (UChar)0x0069 /* 'i' */, 0x0302, (UChar)0x0073 /* 's' */, 0}, | |
76 | {(UChar)0x0070 /* 'p' */, 0x00EA, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, (UChar)0x0065 /* 'e' */}, | |
77 | {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, | |
78 | {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, | |
79 | {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, | |
80 | {(UChar)0x0061 /* 'a' */, 0x00E6, (UChar)0x0063 /* 'c' */, 0}, | |
81 | {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, | |
82 | {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, | |
83 | {(UChar)0x0061 /* 'a' */, 0x00E6, (UChar)0x0063 /* 'c' */, 0}, | |
84 | {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, | |
85 | {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, | |
86 | {(UChar)0x0070 /* 'p' */, 0x00E9, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, 0x00E9, 0} | |
87 | }; | |
88 | ||
89 | const static UChar testTargetCases[][MAX_TOKEN_LEN] = { | |
90 | {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, | |
91 | {(UChar)0x0062 /* 'b' */, (UChar)0x006C /* 'l' */, (UChar)0x0061 /* 'a' */, (UChar)0x0063 /* 'c' */, (UChar)0x006B /* 'k' */, (UChar)0x0062 /* 'b' */, (UChar)0x0069 /* 'i' */, (UChar)0x0072 /* 'r' */, (UChar)0x0064 /* 'd' */, 0}, | |
92 | {(UChar)0x0062 /* 'b' */, (UChar)0x006C /* 'l' */, (UChar)0x0061 /* 'a' */, (UChar)0x0063 /* 'c' */, (UChar)0x006B /* 'k' */, (UChar)0x002D /* '-' */, (UChar)0x0062 /* 'b' */, (UChar)0x0069 /* 'i' */, (UChar)0x0072 /* 'r' */, (UChar)0x0064 /* 'd' */, 0}, | |
93 | {(UChar)0x0062 /* 'b' */, (UChar)0x006C /* 'l' */, (UChar)0x0061 /* 'a' */, (UChar)0x0063 /* 'c' */, (UChar)0x006B /* 'k' */, 0}, | |
94 | {(UChar)0x0068 /* 'h' */, (UChar)0x0065 /* 'e' */, (UChar)0x006C /* 'l' */, (UChar)0x006C /* 'l' */, (UChar)0x006F /* 'o' */, 0}, | |
95 | {(UChar)0x0041 /* 'A' */, (UChar)0x0042 /* 'B' */, (UChar)0x0043 /* 'C' */, 0}, | |
96 | {(UChar)0x0041 /* 'A' */, (UChar)0x0042 /* 'B' */, (UChar)0x0043 /* 'C' */, 0}, | |
97 | {(UChar)0x0062 /* 'b' */, (UChar)0x006C /* 'l' */, (UChar)0x0061 /* 'a' */, (UChar)0x0063 /* 'c' */, (UChar)0x006B /* 'k' */, (UChar)0x0062 /* 'b' */, (UChar)0x0069 /* 'i' */, (UChar)0x0072 /* 'r' */, (UChar)0x0064 /* 'd' */, (UChar)0x0073 /* 's' */, 0}, | |
98 | {(UChar)0x0062 /* 'b' */, (UChar)0x006C /* 'l' */, (UChar)0x0061 /* 'a' */, (UChar)0x0063 /* 'c' */, (UChar)0x006B /* 'k' */, (UChar)0x0062 /* 'b' */, (UChar)0x0069 /* 'i' */, (UChar)0x0072 /* 'r' */, (UChar)0x0064 /* 'd' */, (UChar)0x0073 /* 's' */, 0}, | |
99 | {(UChar)0x0062 /* 'b' */, (UChar)0x006C /* 'l' */, (UChar)0x0061 /* 'a' */, (UChar)0x0063 /* 'c' */, (UChar)0x006B /* 'k' */, (UChar)0x0062 /* 'b' */, (UChar)0x0069 /* 'i' */, (UChar)0x0072 /* 'r' */, (UChar)0x0064 /* 'd' */, 0}, | |
100 | {(UChar)0x0070 /* 'p' */, 0x00E9, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, 0x00E9, 0}, | |
101 | {(UChar)0x0070 /* 'p' */, 0x00E9, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, (UChar)0x0065 /* 'e' */, (UChar)0x0072 /* 'r' */, 0}, | |
102 | {0x00C4, (UChar)0x0042 /* 'B' */, 0x0308, (UChar)0x0043 /* 'C' */, 0x0308, 0}, | |
103 | {(UChar)0x0041 /* 'A' */, 0x0308, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, | |
104 | {(UChar)0x0070 /* 'p' */, 0x00E9, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, (UChar)0x0065 /* 'e' */, 0}, | |
105 | {(UChar)0x0072 /* 'r' */, (UChar)0x006F /* 'o' */, 0x0302, (UChar)0x006C /* 'l' */, (UChar)0x0065 /* 'e' */, 0}, | |
106 | {(UChar)0x0041 /* 'A' */, 0x00E1, (UChar)0x0063 /* 'c' */, (UChar)0x0064 /* 'd' */, 0}, | |
107 | {(UChar)0x0041 /* 'A' */, 0x00E1, (UChar)0x0063 /* 'c' */, (UChar)0x0064 /* 'd' */, 0}, | |
108 | {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, | |
109 | {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, | |
110 | {(UChar)0x0054 /* 'T' */, (UChar)0x0043 /* 'C' */, (UChar)0x006F /* 'o' */, (UChar)0x006D /* 'm' */, (UChar)0x0070 /* 'p' */, (UChar)0x0061 /* 'a' */, (UChar)0x0072 /* 'r' */, (UChar)0x0065 /* 'e' */, (UChar)0x0050 /* 'P' */, (UChar)0x006C /* 'l' */, (UChar)0x0061 /* 'a' */, (UChar)0x0069 /* 'i' */, (UChar)0x006E /* 'n' */, 0}, | |
111 | {(UChar)0x0061 /* 'a' */, (UChar)0x0042 /* 'B' */, (UChar)0x0063 /* 'c' */, 0}, | |
112 | {(UChar)0x0061 /* 'a' */, (UChar)0x0023 /* '#' */, (UChar)0x0042 /* 'B' */, 0}, | |
113 | {(UChar)0x0061 /* 'a' */, (UChar)0x0026 /* '&' */, (UChar)0x0062 /* 'b' */, 0}, | |
114 | {(UChar)0x0061 /* 'a' */, (UChar)0x0023 /* '#' */, (UChar)0x0063 /* 'c' */, 0}, | |
115 | {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, (UChar)0x0064 /* 'd' */, (UChar)0x0061 /* 'a' */, 0}, | |
116 | {0x00C4, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, (UChar)0x0064 /* 'd' */, (UChar)0x0061 /* 'a' */, 0}, | |
117 | {0x00E4, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, (UChar)0x0064 /* 'd' */, (UChar)0x0061 /* 'a' */, 0}, | |
118 | {0x00C4, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, (UChar)0x0064 /* 'd' */, (UChar)0x0061 /* 'a' */, 0}, | |
119 | {0x00C4, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, (UChar)0x0064 /* 'd' */, (UChar)0x0061 /* 'a' */, 0}, | |
120 | {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0023 /* '#' */, (UChar)0x0063 /* 'c' */, 0}, | |
121 | {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, | |
122 | {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x003D /* '=' */, (UChar)0x0063 /* 'c' */, 0}, | |
123 | {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0064 /* 'd' */, 0}, | |
124 | {0x00E4, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, | |
125 | {(UChar)0x0061 /* 'a' */, (UChar)0x0043 /* 'C' */, (UChar)0x0048 /* 'H' */, (UChar)0x0063 /* 'c' */, 0}, | |
126 | {0x00E4, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, | |
127 | {(UChar)0x0074 /* 't' */, (UChar)0x0068 /* 'h' */, 0x00EE, (UChar)0x0073 /* 's' */, 0}, | |
128 | {(UChar)0x0070 /* 'p' */, 0x00E9, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, 0x00E9, 0}, | |
129 | {(UChar)0x0061 /* 'a' */, (UChar)0x0042 /* 'B' */, (UChar)0x0043 /* 'C' */, 0}, | |
130 | {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0064 /* 'd' */, 0}, | |
131 | {0x00E4, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, | |
132 | {(UChar)0x0061 /* 'a' */, 0x00C6, (UChar)0x0063 /* 'c' */, 0}, | |
133 | {(UChar)0x0061 /* 'a' */, (UChar)0x0042 /* 'B' */, (UChar)0x0064 /* 'd' */, 0}, | |
134 | {0x00E4, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, | |
135 | {(UChar)0x0061 /* 'a' */, 0x00C6, (UChar)0x0063 /* 'c' */, 0}, | |
136 | {(UChar)0x0061 /* 'a' */, (UChar)0x0042 /* 'B' */, (UChar)0x0064 /* 'd' */, 0}, | |
137 | {0x00E4, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, | |
138 | {(UChar)0x0070 /* 'p' */, 0x00EA, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, (UChar)0x0065 /* 'e' */, 0} | |
139 | }; | |
140 | ||
141 | const static UCollationResult results[] = { | |
142 | UCOL_LESS, | |
143 | UCOL_LESS, /*UCOL_GREATER,*/ | |
144 | UCOL_LESS, | |
145 | UCOL_GREATER, | |
146 | UCOL_GREATER, | |
147 | UCOL_EQUAL, | |
148 | UCOL_LESS, | |
149 | UCOL_LESS, | |
150 | UCOL_LESS, | |
151 | UCOL_LESS, /*UCOL_GREATER,*/ /* 10 */ | |
152 | UCOL_GREATER, | |
153 | UCOL_LESS, | |
154 | UCOL_EQUAL, | |
155 | UCOL_LESS, | |
156 | UCOL_GREATER, | |
157 | UCOL_GREATER, | |
158 | UCOL_GREATER, | |
159 | UCOL_LESS, | |
160 | UCOL_LESS, | |
161 | UCOL_LESS, /* 20 */ | |
162 | UCOL_LESS, | |
163 | UCOL_LESS, | |
164 | UCOL_LESS, | |
165 | UCOL_GREATER, | |
166 | UCOL_GREATER, | |
167 | UCOL_GREATER, | |
168 | /* Test Tertiary > 26 */ | |
169 | UCOL_LESS, | |
170 | UCOL_LESS, | |
171 | UCOL_GREATER, | |
172 | UCOL_LESS, /* 30 */ | |
173 | UCOL_GREATER, | |
174 | UCOL_EQUAL, | |
175 | UCOL_GREATER, | |
176 | UCOL_LESS, | |
177 | UCOL_LESS, | |
178 | UCOL_LESS, | |
179 | /* test identical > 36 */ | |
180 | UCOL_EQUAL, | |
181 | UCOL_EQUAL, | |
182 | /* test primary > 38 */ | |
183 | UCOL_EQUAL, | |
184 | UCOL_EQUAL, /* 40 */ | |
185 | UCOL_LESS, | |
186 | UCOL_EQUAL, | |
187 | UCOL_EQUAL, | |
188 | /* test secondary > 43 */ | |
189 | UCOL_LESS, | |
190 | UCOL_LESS, | |
191 | UCOL_EQUAL, | |
192 | UCOL_LESS, | |
193 | UCOL_LESS, | |
194 | UCOL_LESS /* 49 */ | |
195 | }; | |
196 | ||
197 | const static UChar testBugs[][MAX_TOKEN_LEN] = { | |
198 | {(UChar)0x0061 /* 'a' */, 0}, | |
199 | {(UChar)0x0041 /* 'A' */, 0}, | |
200 | {(UChar)0x0065 /* 'e' */, 0}, | |
201 | {(UChar)0x0045 /* 'E' */, 0}, | |
202 | {0x00e9, 0}, | |
203 | {0x00e8, 0}, | |
204 | {0x00ea, 0}, | |
205 | {0x00eb, 0}, | |
206 | {(UChar)0x0065 /* 'e' */, (UChar)0x0061 /* 'a' */, 0}, | |
207 | {(UChar)0x0078 /* 'x' */, 0} | |
208 | ||
209 | }; | |
210 | ||
211 | /* 0x0300 is grave, 0x0301 is acute | |
212 | the order of elements in this array must be different than the order in CollationFrenchTest */ | |
213 | const static UChar testAcute[][MAX_TOKEN_LEN] = { | |
214 | {(UChar)0x0065 /* 'e' */, (UChar)0x0065 /* 'e' */, 0}, | |
215 | {(UChar)0x0065 /* 'e' */, (UChar)0x0065 /* 'e' */, 0x0301, 0}, | |
216 | {(UChar)0x0065 /* 'e' */, (UChar)0x0065 /* 'e' */, 0x0301, 0x0300, 0}, | |
217 | {(UChar)0x0065 /* 'e' */, (UChar)0x0065 /* 'e' */, 0x0300, 0}, | |
218 | {(UChar)0x0065 /* 'e' */, (UChar)0x0065 /* 'e' */, 0x0300, 0x0301, 0}, | |
219 | {(UChar)0x0065 /* 'e' */, 0x0301, (UChar)0x0065 /* 'e' */, 0}, | |
220 | {(UChar)0x0065 /* 'e' */, 0x0301, (UChar)0x0065 /* 'e' */, 0x0301, 0}, | |
221 | {(UChar)0x0065 /* 'e' */, 0x0301, (UChar)0x0065 /* 'e' */, 0x0301, 0x0300, 0}, | |
222 | {(UChar)0x0065 /* 'e' */, 0x0301, (UChar)0x0065 /* 'e' */, 0x0300, 0}, | |
223 | {(UChar)0x0065 /* 'e' */, 0x0301, (UChar)0x0065 /* 'e' */, 0x0300, 0x0301, 0}, | |
224 | {(UChar)0x0065 /* 'e' */, 0x0301, 0x0300, (UChar)0x0065 /* 'e' */, 0}, | |
225 | {(UChar)0x0065 /* 'e' */, 0x0301, 0x0300, (UChar)0x0065 /* 'e' */, 0x0301, 0}, | |
226 | {(UChar)0x0065 /* 'e' */, 0x0301, 0x0300, (UChar)0x0065 /* 'e' */, 0x0301, 0x0300, 0}, | |
227 | {(UChar)0x0065 /* 'e' */, 0x0301, 0x0300, (UChar)0x0065 /* 'e' */, 0x0300, 0}, | |
228 | {(UChar)0x0065 /* 'e' */, 0x0301, 0x0300, (UChar)0x0065 /* 'e' */, 0x0300, 0x0301, 0}, | |
229 | {(UChar)0x0065 /* 'e' */, 0x0300, (UChar)0x0065 /* 'e' */, 0}, | |
230 | {(UChar)0x0065 /* 'e' */, 0x0300, (UChar)0x0065 /* 'e' */, 0x0301, 0}, | |
231 | {(UChar)0x0065 /* 'e' */, 0x0300, (UChar)0x0065 /* 'e' */, 0x0301, 0x0300, 0}, | |
232 | {(UChar)0x0065 /* 'e' */, 0x0300, (UChar)0x0065 /* 'e' */, 0x0300, 0}, | |
233 | {(UChar)0x0065 /* 'e' */, 0x0300, (UChar)0x0065 /* 'e' */, 0x0300, 0x0301, 0}, | |
234 | {(UChar)0x0065 /* 'e' */, 0x0300, 0x0301, (UChar)0x0065 /* 'e' */, 0}, | |
235 | {(UChar)0x0065 /* 'e' */, 0x0300, 0x0301, (UChar)0x0065 /* 'e' */, 0x0301, 0}, | |
236 | {(UChar)0x0065 /* 'e' */, 0x0300, 0x0301, (UChar)0x0065 /* 'e' */, 0x0301, 0x0300, 0}, | |
237 | {(UChar)0x0065 /* 'e' */, 0x0300, 0x0301, (UChar)0x0065 /* 'e' */, 0x0300, 0}, | |
238 | {(UChar)0x0065 /* 'e' */, 0x0300, 0x0301, (UChar)0x0065 /* 'e' */, 0x0300, 0x0301, 0} | |
239 | }; | |
240 | ||
241 | static const UChar testMore[][MAX_TOKEN_LEN] = { | |
242 | {(UChar)0x0061 /* 'a' */, (UChar)0x0065 /* 'e' */, 0}, | |
b75a7d8f A |
243 | { 0x00E6, 0}, |
244 | { 0x00C6, 0}, | |
374ca955 | 245 | {(UChar)0x0061 /* 'a' */, (UChar)0x0066 /* 'f' */, 0}, |
b75a7d8f A |
246 | {(UChar)0x006F /* 'o' */, (UChar)0x0065 /* 'e' */, 0}, |
247 | { 0x0153, 0}, | |
248 | { 0x0152, 0}, | |
249 | {(UChar)0x006F /* 'o' */, (UChar)0x0066 /* 'f' */, 0}, | |
250 | }; | |
251 | ||
252 | ||
253 | void addEnglishCollTest(TestNode** root) | |
254 | { | |
255 | ||
256 | addTest(root, &TestPrimary, "tscoll/encoll/TestPrimary"); | |
257 | addTest(root, &TestSecondary, "tscoll/encoll/TestSecondary"); | |
258 | addTest(root, &TestTertiary, "tscoll/encoll/TestTertiary"); | |
259 | ||
260 | } | |
261 | ||
262 | static void TestTertiary( ) | |
263 | { | |
264 | int32_t testMoreSize; | |
265 | UCollationResult expected=UCOL_EQUAL; | |
266 | int32_t i,j; | |
267 | UErrorCode status = U_ZERO_ERROR; | |
268 | myCollation = ucol_open("en_US", &status); | |
269 | if(U_FAILURE(status)){ | |
729e4ab9 | 270 | log_err_status(status, "ERROR: in creation of rule based collator: %s\n", myErrorName(status)); |
b75a7d8f A |
271 | return; |
272 | } | |
273 | log_verbose("Testing English Collation with Tertiary strength\n"); | |
274 | ||
275 | ucol_setStrength(myCollation, UCOL_TERTIARY); | |
276 | for (i = 0; i < 38 ; i++) | |
277 | { | |
278 | doTest(myCollation, testSourceCases[i], testTargetCases[i], results[i]); | |
279 | } | |
280 | ||
281 | ||
282 | j = 0; | |
283 | for (i = 0; i < 10; i++) | |
284 | { | |
285 | for (j = i+1; j < 10; j++) | |
286 | { | |
287 | doTest(myCollation, testBugs[i], testBugs[j], UCOL_LESS); | |
288 | } | |
289 | } | |
290 | /*test more interesting cases */ | |
291 | testMoreSize = sizeof(testMore) / sizeof(testMore[0]); | |
292 | for (i = 0; i < testMoreSize; i++) | |
293 | { | |
294 | for (j = 0; j < testMoreSize; j++) | |
295 | { | |
296 | if (i < j) expected = UCOL_LESS; | |
297 | if (i == j) expected = UCOL_EQUAL; | |
298 | if (i > j) expected = UCOL_GREATER; | |
299 | doTest(myCollation, testMore[i], testMore[j], expected ); | |
300 | } | |
301 | } | |
302 | ucol_close(myCollation); | |
303 | } | |
304 | ||
305 | static void TestPrimary() | |
306 | { | |
307 | ||
308 | int32_t i; | |
309 | UErrorCode status = U_ZERO_ERROR; | |
310 | myCollation = ucol_open("en_US", &status); | |
311 | if(U_FAILURE(status)){ | |
729e4ab9 | 312 | log_err_status(status, "ERROR: in creation of rule based collator: %s\n", myErrorName(status)); |
b75a7d8f A |
313 | return; |
314 | } | |
315 | ucol_setStrength(myCollation, UCOL_PRIMARY); | |
316 | log_verbose("Testing English Collation with Primary strength\n"); | |
317 | for (i = 38; i < 43 ; i++) | |
318 | { | |
319 | doTest(myCollation, testSourceCases[i], testTargetCases[i], results[i]); | |
320 | } | |
321 | ucol_close(myCollation); | |
322 | } | |
323 | ||
324 | static void TestSecondary() | |
325 | { | |
326 | UCollationResult expected=UCOL_EQUAL; | |
327 | int32_t i,j, testAcuteSize; | |
328 | UErrorCode status = U_ZERO_ERROR; | |
329 | myCollation = ucol_open("en_US", &status); | |
330 | if(U_FAILURE(status)){ | |
729e4ab9 | 331 | log_err_status(status, "ERROR: in creation of rule based collator: %s\n", myErrorName(status)); |
b75a7d8f A |
332 | return; |
333 | } | |
334 | ucol_setStrength(myCollation, UCOL_SECONDARY); | |
335 | log_verbose("Testing English Collation with Secondary strength\n"); | |
336 | for (i = 43; i < 49 ; i++) | |
337 | { | |
338 | doTest(myCollation, testSourceCases[i], testTargetCases[i], results[i]); | |
339 | } | |
340 | ||
341 | ||
342 | /*test acute and grave ordering (compare to french collation) */ | |
343 | testAcuteSize = sizeof(testAcute) / sizeof(testAcute[0]); | |
344 | for (i = 0; i < testAcuteSize; i++) | |
345 | { | |
346 | for (j = 0; j < testAcuteSize; j++) | |
347 | { | |
348 | if (i < j) expected = UCOL_LESS; | |
349 | if (i == j) expected = UCOL_EQUAL; | |
350 | if (i > j) expected = UCOL_GREATER; | |
351 | doTest(myCollation, testAcute[i], testAcute[j], expected ); | |
352 | } | |
353 | } | |
354 | ucol_close(myCollation); | |
355 | } | |
356 | ||
357 | #endif /* #if !UCONFIG_NO_COLLATION */ |