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