]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_4_2-src/main/tests/collate/src/com/ibm/icu/dev/test/collator/CollationEnglishTest.java
go
[Dictionary.git] / jars / icu4j-4_4_2-src / main / tests / collate / src / com / ibm / icu / dev / test / collator / CollationEnglishTest.java
1 /*\r
2  *******************************************************************************\r
3  * Copyright (C) 2002-2010, International Business Machines Corporation and    *\r
4  * others. All Rights Reserved.                                                *\r
5  *******************************************************************************\r
6  */\r
7 \r
8 /** \r
9  * Port From:   ICU4C v2.1 : Collate/CollationEnglishTest\r
10  * Source File: $ICU4CRoot/source/test/intltest/encoll.cpp\r
11  **/\r
12  \r
13 package com.ibm.icu.dev.test.collator;\r
14  \r
15 import java.util.Locale;\r
16 \r
17 import com.ibm.icu.dev.test.TestFmwk;\r
18 import com.ibm.icu.text.CollationKey;\r
19 import com.ibm.icu.text.Collator;\r
20  \r
21 public class CollationEnglishTest extends TestFmwk{\r
22     public static void main(String[] args) throws Exception{\r
23         new CollationEnglishTest().run(args);\r
24     }\r
25     \r
26     private static char[][] testSourceCases = {\r
27         {0x0061 /* 'a' */, 0x0062 /* 'b' */},\r
28         {0x0062 /* 'b' */, 0x006C /* 'l' */, 0x0061 /* 'a' */, 0x0063 /* 'c' */, 0x006B /* 'k' */, 0x002D /* '-' */, 0x0062 /* 'b' */, 0x0069 /* 'i' */, 0x0072 /* 'r' */, 0x0064 /* 'd' */},\r
29         {0x0062 /* 'b' */, 0x006C /* 'l' */, 0x0061 /* 'a' */, 0x0063 /* 'c' */, 0x006B /* 'k' */, 0x0020 /* ' ' */, 0x0062 /* 'b' */, 0x0069 /* 'i' */, 0x0072 /* 'r' */, 0x0064 /* 'd' */},\r
30         {0x0062 /* 'b' */, 0x006C /* 'l' */, 0x0061 /* 'a' */, 0x0063 /* 'c' */, 0x006B /* 'k' */, 0x002D /* '-' */, 0x0062 /* 'b' */, 0x0069 /* 'i' */, 0x0072 /* 'r' */, 0x0064 /* 'd' */},\r
31         {0x0048 /* 'H' */, 0x0065 /* 'e' */, 0x006C /* 'l' */, 0x006C /* 'l' */, 0x006F /* 'o' */},\r
32         {0x0041 /* 'A' */, 0x0042 /* 'B' */, 0x0043 /* 'C' */}, \r
33         {0x0061 /* 'a' */, 0x0062 /* 'b' */, 0x0063 /* 'c' */},\r
34         {0x0062 /* 'b' */, 0x006C /* 'l' */, 0x0061 /* 'a' */, 0x0063 /* 'c' */, 0x006B /* 'k' */, 0x0062 /* 'b' */, 0x0069 /* 'i' */, 0x0072 /* 'r' */, 0x0064 /* 'd' */},\r
35         {0x0062 /* 'b' */, 0x006C /* 'l' */, 0x0061 /* 'a' */, 0x0063 /* 'c' */, 0x006B /* 'k' */, 0x002D /* '-' */, 0x0062 /* 'b' */, 0x0069 /* 'i' */, 0x0072 /* 'r' */, 0x0064 /* 'd' */},\r
36         {0x0062 /* 'b' */, 0x006C /* 'l' */, 0x0061 /* 'a' */, 0x0063 /* 'c' */, 0x006B /* 'k' */, 0x002D /* '-' */, 0x0062 /* 'b' */, 0x0069 /* 'i' */, 0x0072 /* 'r' */, 0x0064 /* 'd' */},\r
37         {0x0070 /* 'p' */, 0x00EA, 0x0063 /* 'c' */, 0x0068 /* 'h' */, 0x0065 /* 'e' */},                                            \r
38         {0x0070 /* 'p' */, 0x00E9, 0x0063 /* 'c' */, 0x0068 /* 'h' */, 0x00E9},\r
39         {0x00C4, 0x0042 /* 'B' */, 0x0308, 0x0043 /* 'C' */, 0x0308},\r
40         {0x0061 /* 'a' */, 0x0308, 0x0062 /* 'b' */, 0x0063 /* 'c' */},\r
41         {0x0070 /* 'p' */, 0x00E9, 0x0063 /* 'c' */, 0x0068 /* 'h' */, 0x0065 /* 'e' */, 0x0072 /* 'r' */},\r
42         {0x0072 /* 'r' */, 0x006F /* 'o' */, 0x006C /* 'l' */, 0x0065 /* 'e' */, 0x0073 /* 's' */},\r
43         {0x0061 /* 'a' */, 0x0062 /* 'b' */, 0x0063 /* 'c' */},\r
44         {0x0041 /* 'A' */},\r
45         {0x0041 /* 'A' */},\r
46         {0x0061 /* 'a' */, 0x0062 /* 'b' */},                                                                \r
47         {0x0074 /* 't' */, 0x0063 /* 'c' */, 0x006F /* 'o' */, 0x006D /* 'm' */, 0x0070 /* 'p' */, 0x0061 /* 'a' */, 0x0072 /* 'r' */, 0x0065 /* 'e' */, 0x0070 /* 'p' */, 0x006C /* 'l' */, 0x0061 /* 'a' */, 0x0069 /* 'i' */, 0x006E /* 'n' */},\r
48         {0x0061 /* 'a' */, 0x0062 /* 'b' */}, \r
49         {0x0061 /* 'a' */, 0x0023 /* '#' */, 0x0062 /* 'b' */},\r
50         {0x0061 /* 'a' */, 0x0023 /* '#' */, 0x0062 /* 'b' */},\r
51         {0x0061 /* 'a' */, 0x0062 /* 'b' */, 0x0063 /* 'c' */},\r
52         {0x0041 /* 'A' */, 0x0062 /* 'b' */, 0x0063 /* 'c' */, 0x0064 /* 'd' */, 0x0061 /* 'a' */},\r
53         {0x0061 /* 'a' */, 0x0062 /* 'b' */, 0x0063 /* 'c' */, 0x0064 /* 'd' */, 0x0061 /* 'a' */},\r
54         {0x0061 /* 'a' */, 0x0062 /* 'b' */, 0x0063 /* 'c' */, 0x0064 /* 'd' */, 0x0061 /* 'a' */},\r
55         {0x00E6, 0x0062 /* 'b' */, 0x0063 /* 'c' */, 0x0064 /* 'd' */, 0x0061 /* 'a' */},\r
56         {0x00E4, 0x0062 /* 'b' */, 0x0063 /* 'c' */, 0x0064 /* 'd' */, 0x0061 /* 'a' */},                                            \r
57         {0x0061 /* 'a' */, 0x0062 /* 'b' */, 0x0063 /* 'c' */},\r
58         {0x0061 /* 'a' */, 0x0062 /* 'b' */, 0x0063 /* 'c' */},\r
59         {0x0061 /* 'a' */, 0x0062 /* 'b' */, 0x0063 /* 'c' */},\r
60         {0x0061 /* 'a' */, 0x0062 /* 'b' */, 0x0063 /* 'c' */},\r
61         {0x0061 /* 'a' */, 0x0062 /* 'b' */, 0x0063 /* 'c' */},\r
62         {0x0061 /* 'a' */, 0x0063 /* 'c' */, 0x0048 /* 'H' */, 0x0063 /* 'c' */},\r
63         {0x0061 /* 'a' */, 0x0308, 0x0062 /* 'b' */, 0x0063 /* 'c' */},\r
64         {0x0074 /* 't' */, 0x0068 /* 'h' */, 0x0069 /* 'i' */, 0x0302, 0x0073 /* 's' */},\r
65         {0x0070 /* 'p' */, 0x00EA, 0x0063 /* 'c' */, 0x0068 /* 'h' */, 0x0065 /* 'e' */},\r
66         {0x0061 /* 'a' */, 0x0062 /* 'b' */, 0x0063 /* 'c' */},                                                         \r
67         {0x0061 /* 'a' */, 0x0062 /* 'b' */, 0x0063 /* 'c' */},\r
68         {0x0061 /* 'a' */, 0x0062 /* 'b' */, 0x0063 /* 'c' */},\r
69         {0x0061 /* 'a' */, 0x00E6, 0x0063 /* 'c' */},\r
70         {0x0061 /* 'a' */, 0x0062 /* 'b' */, 0x0063 /* 'c' */},\r
71         {0x0061 /* 'a' */, 0x0062 /* 'b' */, 0x0063 /* 'c' */},\r
72         {0x0061 /* 'a' */, 0x00E6, 0x0063 /* 'c' */},\r
73         {0x0061 /* 'a' */, 0x0062 /* 'b' */, 0x0063 /* 'c' */},\r
74         {0x0061 /* 'a' */, 0x0062 /* 'b' */, 0x0063 /* 'c' */},               \r
75         {0x0070 /* 'p' */, 0x00E9, 0x0063 /* 'c' */, 0x0068 /* 'h' */, 0x00E9}                                            // 49\r
76     };\r
77     \r
78     private static char[][] testTargetCases = {\r
79         {0x0061 /* 'a' */, 0x0062 /* 'b' */, 0x0063 /* 'c' */},\r
80         {0x0062 /* 'b' */, 0x006C /* 'l' */, 0x0061 /* 'a' */, 0x0063 /* 'c' */, 0x006B /* 'k' */, 0x0062 /* 'b' */, 0x0069 /* 'i' */, 0x0072 /* 'r' */, 0x0064 /* 'd' */},\r
81         {0x0062 /* 'b' */, 0x006C /* 'l' */, 0x0061 /* 'a' */, 0x0063 /* 'c' */, 0x006B /* 'k' */, 0x002D /* '-' */, 0x0062 /* 'b' */, 0x0069 /* 'i' */, 0x0072 /* 'r' */, 0x0064 /* 'd' */},\r
82         {0x0062 /* 'b' */, 0x006C /* 'l' */, 0x0061 /* 'a' */, 0x0063 /* 'c' */, 0x006B /* 'k' */},\r
83         {0x0068 /* 'h' */, 0x0065 /* 'e' */, 0x006C /* 'l' */, 0x006C /* 'l' */, 0x006F /* 'o' */},\r
84         {0x0041 /* 'A' */, 0x0042 /* 'B' */, 0x0043 /* 'C' */},\r
85         {0x0041 /* 'A' */, 0x0042 /* 'B' */, 0x0043 /* 'C' */},\r
86         {0x0062 /* 'b' */, 0x006C /* 'l' */, 0x0061 /* 'a' */, 0x0063 /* 'c' */, 0x006B /* 'k' */, 0x0062 /* 'b' */, 0x0069 /* 'i' */, 0x0072 /* 'r' */, 0x0064 /* 'd' */, 0x0073 /* 's' */},\r
87         {0x0062 /* 'b' */, 0x006C /* 'l' */, 0x0061 /* 'a' */, 0x0063 /* 'c' */, 0x006B /* 'k' */, 0x0062 /* 'b' */, 0x0069 /* 'i' */, 0x0072 /* 'r' */, 0x0064 /* 'd' */, 0x0073 /* 's' */},\r
88         {0x0062 /* 'b' */, 0x006C /* 'l' */, 0x0061 /* 'a' */, 0x0063 /* 'c' */, 0x006B /* 'k' */, 0x0062 /* 'b' */, 0x0069 /* 'i' */, 0x0072 /* 'r' */, 0x0064 /* 'd' */},                             \r
89         {0x0070 /* 'p' */, 0x00E9, 0x0063 /* 'c' */, 0x0068 /* 'h' */, 0x00E9},\r
90         {0x0070 /* 'p' */, 0x00E9, 0x0063 /* 'c' */, 0x0068 /* 'h' */, 0x0065 /* 'e' */, 0x0072 /* 'r' */},\r
91         {0x00C4, 0x0042 /* 'B' */, 0x0308, 0x0043 /* 'C' */, 0x0308},\r
92         {0x0041 /* 'A' */, 0x0308, 0x0062 /* 'b' */, 0x0063 /* 'c' */},\r
93         {0x0070 /* 'p' */, 0x00E9, 0x0063 /* 'c' */, 0x0068 /* 'h' */, 0x0065 /* 'e' */},\r
94         {0x0072 /* 'r' */, 0x006F /* 'o' */, 0x0302, 0x006C /* 'l' */, 0x0065 /* 'e' */},\r
95         {0x0041 /* 'A' */, 0x00E1, 0x0063 /* 'c' */, 0x0064 /* 'd' */},\r
96         {0x0041 /* 'A' */, 0x00E1, 0x0063 /* 'c' */, 0x0064 /* 'd' */},\r
97         {0x0061 /* 'a' */, 0x0062 /* 'b' */, 0x0063 /* 'c' */},\r
98         {0x0061 /* 'a' */, 0x0062 /* 'b' */, 0x0063 /* 'c' */},                                                             \r
99         {0x0054 /* 'T' */, 0x0043 /* 'C' */, 0x006F /* 'o' */, 0x006D /* 'm' */, 0x0070 /* 'p' */, 0x0061 /* 'a' */, 0x0072 /* 'r' */, 0x0065 /* 'e' */, 0x0050 /* 'P' */, 0x006C /* 'l' */, 0x0061 /* 'a' */, 0x0069 /* 'i' */, 0x006E /* 'n' */},\r
100         {0x0061 /* 'a' */, 0x0042 /* 'B' */, 0x0063 /* 'c' */},\r
101         {0x0061 /* 'a' */, 0x0023 /* '#' */, 0x0042 /* 'B' */},\r
102         {0x0061 /* 'a' */, 0x0026 /* '&' */, 0x0062 /* 'b' */},\r
103         {0x0061 /* 'a' */, 0x0023 /* '#' */, 0x0063 /* 'c' */},\r
104         {0x0061 /* 'a' */, 0x0062 /* 'b' */, 0x0063 /* 'c' */, 0x0064 /* 'd' */, 0x0061 /* 'a' */},\r
105         {0x00C4, 0x0062 /* 'b' */, 0x0063 /* 'c' */, 0x0064 /* 'd' */, 0x0061 /* 'a' */},\r
106         {0x00E4, 0x0062 /* 'b' */, 0x0063 /* 'c' */, 0x0064 /* 'd' */, 0x0061 /* 'a' */},\r
107         {0x00C4, 0x0062 /* 'b' */, 0x0063 /* 'c' */, 0x0064 /* 'd' */, 0x0061 /* 'a' */},\r
108         {0x00C4, 0x0062 /* 'b' */, 0x0063 /* 'c' */, 0x0064 /* 'd' */, 0x0061 /* 'a' */},                                             \r
109         {0x0061 /* 'a' */, 0x0062 /* 'b' */, 0x0023 /* '#' */, 0x0063 /* 'c' */},\r
110         {0x0061 /* 'a' */, 0x0062 /* 'b' */, 0x0063 /* 'c' */},\r
111         {0x0061 /* 'a' */, 0x0062 /* 'b' */, 0x003D /* '=' */, 0x0063 /* 'c' */},\r
112         {0x0061 /* 'a' */, 0x0062 /* 'b' */, 0x0064 /* 'd' */},\r
113         {0x00E4, 0x0062 /* 'b' */, 0x0063 /* 'c' */},\r
114         {0x0061 /* 'a' */, 0x0043 /* 'C' */, 0x0048 /* 'H' */, 0x0063 /* 'c' */},\r
115         {0x00E4, 0x0062 /* 'b' */, 0x0063 /* 'c' */},\r
116         {0x0074 /* 't' */, 0x0068 /* 'h' */, 0x00EE, 0x0073 /* 's' */},\r
117         {0x0070 /* 'p' */, 0x00E9, 0x0063 /* 'c' */, 0x0068 /* 'h' */, 0x00E9},\r
118         {0x0061 /* 'a' */, 0x0042 /* 'B' */, 0x0043 /* 'C' */},                                                          \r
119         {0x0061 /* 'a' */, 0x0062 /* 'b' */, 0x0064 /* 'd' */},\r
120         {0x00E4, 0x0062 /* 'b' */, 0x0063 /* 'c' */},\r
121         {0x0061 /* 'a' */, 0x00C6, 0x0063 /* 'c' */},\r
122         {0x0061 /* 'a' */, 0x0042 /* 'B' */, 0x0064 /* 'd' */},\r
123         {0x00E4, 0x0062 /* 'b' */, 0x0063 /* 'c' */},\r
124         {0x0061 /* 'a' */, 0x00C6, 0x0063 /* 'c' */},\r
125         {0x0061 /* 'a' */, 0x0042 /* 'B' */, 0x0064 /* 'd' */},\r
126         {0x00E4, 0x0062 /* 'b' */, 0x0063 /* 'c' */},          \r
127         {0x0070 /* 'p' */, 0x00EA, 0x0063 /* 'c' */, 0x0068 /* 'h' */, 0x0065 /* 'e' */}\r
128     };                                           // 49\r
129 \r
130     private static int[] results = {\r
131     //-1:LESS; 0:EQUAL; 1:GREATER\r
132         -1, \r
133         -1, /*Collator::GREATER,*/\r
134         -1,\r
135         1,\r
136         1,\r
137         0,\r
138         -1,\r
139         -1,\r
140         -1,\r
141         -1, /*Collator::GREATER,*/                                                          /* 10 */\r
142         1,\r
143         -1,\r
144         0,\r
145         -1,\r
146         1,\r
147         1,\r
148         1,\r
149         -1,\r
150         -1,\r
151         -1,                                                             /* 20 */\r
152         -1,\r
153         -1,\r
154         -1,\r
155         1,\r
156         1,\r
157         1,\r
158         /* Test Tertiary  > 26 */\r
159         -1,\r
160         -1,\r
161         1,\r
162         -1,                                                             /* 30 */\r
163         1,\r
164         0,\r
165         1,\r
166         -1,\r
167         -1,\r
168         -1,\r
169         /* test identical > 36 */\r
170         0,\r
171         0,\r
172         /* test primary > 38 */\r
173         0,\r
174         0,                                                            /* 40 */\r
175         -1,\r
176         0,\r
177         0,\r
178         /* test secondary > 43 */\r
179         -1,\r
180         -1,\r
181         0,\r
182         -1,\r
183         -1, \r
184         -1                                                                  // 49\r
185     };\r
186 \r
187     private static char [][] testBugs = {\r
188         {0x61},\r
189         {0x41},\r
190         {0x65},\r
191         {0x45},\r
192         {0x00e9},\r
193         {0x00e8},\r
194         {0x00ea},\r
195         {0x00eb},\r
196         {0x65, 0x61},\r
197         {0x78}\r
198     };\r
199 \r
200     // 0x0300 is grave, 0x0301 is acute\r
201     // the order of elements in this array must be different than the order in CollationFrenchTest\r
202     private static char[][] testAcute = {\r
203         {0x65, 0x65},\r
204         {0x65, 0x65, 0x0301},\r
205         {0x65, 0x65, 0x0301, 0x0300},\r
206         {0x65, 0x65, 0x0300},\r
207         {0x65, 0x65, 0x0300, 0x0301},\r
208         {0x65, 0x0301, 0x65},\r
209         {0x65, 0x0301, 0x65, 0x0301},\r
210         {0x65, 0x0301, 0x65, 0x0301, 0x0300},\r
211         {0x65, 0x0301, 0x65, 0x0300},\r
212         {0x65, 0x0301, 0x65, 0x0300, 0x0301},\r
213         {0x65, 0x0301, 0x0300, 0x65},\r
214         {0x65, 0x0301, 0x0300, 0x65, 0x0301},\r
215         {0x65, 0x0301, 0x0300, 0x65, 0x0301, 0x0300},\r
216         {0x65, 0x0301, 0x0300, 0x65, 0x0300},\r
217         {0x65, 0x0301, 0x0300, 0x65, 0x0300, 0x0301},\r
218         {0x65, 0x0300, 0x65},\r
219         {0x65, 0x0300, 0x65, 0x0301},\r
220         {0x65, 0x0300, 0x65, 0x0301, 0x0300},\r
221         {0x65, 0x0300, 0x65, 0x0300},\r
222         {0x65, 0x0300, 0x65, 0x0300, 0x0301},\r
223         {0x65, 0x0300, 0x0301, 0x65},\r
224         {0x65, 0x0300, 0x0301, 0x65, 0x0301},\r
225         {0x65, 0x0300, 0x0301, 0x65, 0x0301, 0x0300},\r
226         {0x65, 0x0300, 0x0301, 0x65, 0x0300},\r
227         {0x65, 0x0300, 0x0301, 0x65, 0x0300, 0x0301}\r
228     };\r
229 \r
230     private static char[][] testMore = {\r
231         {0x0061 /* 'a' */, 0x0065 /* 'e' */},\r
232         { 0x00E6},\r
233         { 0x00C6},\r
234         {0x0061 /* 'a' */, 0x0066 /* 'f' */},\r
235         {0x006F /* 'o' */, 0x0065 /* 'e' */},\r
236         { 0x0153},\r
237         { 0x0152},\r
238         {0x006F /* 'o' */, 0x0066 /* 'f' */},\r
239     };\r
240     \r
241     private Collator myCollation = null;\r
242     \r
243     public CollationEnglishTest() {\r
244     }\r
245     protected void init()throws Exception{\r
246         myCollation = Collator.getInstance(Locale.ENGLISH);\r
247     }\r
248     \r
249     //performs test with strength PRIMARY\r
250     public void TestPrimary() {\r
251         int i;\r
252         myCollation.setStrength(Collator.PRIMARY);\r
253         for (i = 38; i < 43 ; i++) {\r
254             doTest(testSourceCases[i], testTargetCases[i], results[i]);\r
255         }  \r
256     }\r
257     \r
258     //perform test with strength SECONDARY\r
259     public void TestSecondary() {\r
260         int i;\r
261         myCollation.setStrength(Collator.SECONDARY);\r
262         for (i = 43; i < 49 ; i++) {\r
263             doTest(testSourceCases[i], testTargetCases[i], results[i]);\r
264         }\r
265 \r
266         //test acute and grave ordering (compare to french collation)\r
267         int j;\r
268         int expected;\r
269         for (i = 0; i < testAcute.length; i++) {\r
270             for (j = 0; j < testAcute.length; j++) {\r
271                 logln("i = " + i + "; j = " + j);\r
272                 if (i <  j)\r
273                     expected = -1;\r
274                 else if (i == j)\r
275                     expected = 0;\r
276                 else // (i >  j)\r
277                     expected = 1;\r
278                 doTest(testAcute[i], testAcute[j], expected );\r
279             }\r
280         }\r
281     }\r
282     \r
283     //perform test with strength TERTIARY\r
284     public void TestTertiary() {\r
285         int i = 0;\r
286         myCollation.setStrength(Collator.TERTIARY);\r
287         //for (i = 0; i < 38 ; i++)  //attention: there is something wrong with 36, 37.\r
288         for (i = 0; i < 38 ; i++)\r
289         {\r
290             doTest(testSourceCases[i], testTargetCases[i], results[i]);\r
291         } \r
292 \r
293         int j = 0;\r
294         for (i = 0; i < 10; i++)\r
295         {\r
296             for (j = i+1; j < 10; j++)\r
297             {\r
298                 doTest(testBugs[i], testBugs[j], -1);\r
299             }\r
300         }\r
301 \r
302         //test more interesting cases\r
303         int expected;\r
304         for (i = 0; i < testMore.length; i++)\r
305         {\r
306             for (j = 0; j < testMore.length; j++)\r
307             {\r
308                 if (i <  j)\r
309                     expected = -1;\r
310                 else if (i == j)\r
311                     expected = 0;\r
312                 else // (i >  j)\r
313                     expected = 1;\r
314                 doTest(testMore[i], testMore[j], expected );\r
315             }\r
316         }\r
317     }\r
318     \r
319    // main test routine, tests rules defined by the "en" locale\r
320     private void doTest(char[] source, char[] target, int result){\r
321         \r
322         String s = new String(source);\r
323         String t = new String(target);\r
324         int compareResult = myCollation.compare(s, t);\r
325         CollationKey sortKey1, sortKey2;\r
326         sortKey1 = myCollation.getCollationKey(s);\r
327         sortKey2 = myCollation.getCollationKey(t);\r
328         int keyResult = sortKey1.compareTo(sortKey2);\r
329         reportCResult(s, t, sortKey1, sortKey2, compareResult, keyResult, compareResult, result);\r
330         \r
331     }\r
332     \r
333     private void reportCResult( String source, String target, CollationKey sourceKey, CollationKey targetKey,\r
334                                 int compareResult, int keyResult, int incResult, int expectedResult ){\r
335         if (expectedResult < -1 || expectedResult > 1)\r
336         {\r
337             errln("***** invalid call to reportCResult ****");\r
338             return;\r
339         }\r
340 \r
341         boolean ok1 = (compareResult == expectedResult);\r
342         boolean ok2 = (keyResult == expectedResult);\r
343         boolean ok3 = (incResult == expectedResult);\r
344 \r
345         if (ok1 && ok2 && ok3 && !isVerbose()){\r
346             return;    \r
347         }else{\r
348             String msg1 = ok1? "Ok: compare(\"" : "FAIL: compare(\"";\r
349             String msg2 = "\", \"";\r
350             String msg3 = "\") returned ";\r
351             String msg4 = "; expected ";\r
352             \r
353             String sExpect = new String("");\r
354             String sResult = new String("");\r
355             sResult = appendCompareResult(compareResult, sResult);\r
356             sExpect = appendCompareResult(expectedResult, sExpect);\r
357             if (ok1) {\r
358                 logln(msg1 + source + msg2 + target + msg3 + sResult);\r
359             } else {\r
360                 errln(msg1 + source + msg2 + target + msg3 + sResult + msg4 + sExpect);\r
361             }\r
362             \r
363             msg1 = ok2 ? "Ok: key(\"" : "FAIL: key(\"";\r
364             msg2 = "\").compareTo(key(\"";\r
365             msg3 = "\")) returned ";\r
366             sResult = appendCompareResult(keyResult, sResult);\r
367             if (ok2) {\r
368                 logln(msg1 + source + msg2 + target + msg3 + sResult);\r
369             } else {\r
370                 errln(msg1 + source + msg2 + target + msg3 + sResult + msg4 + sExpect);\r
371                 msg1 = "  ";\r
372                 msg2 = " vs. ";\r
373                 errln(msg1 + prettify(sourceKey) + msg2 + prettify(targetKey));\r
374             }\r
375             \r
376             msg1 = ok3 ? "Ok: incCompare(\"" : "FAIL: incCompare(\"";\r
377             msg2 = "\", \"";\r
378             msg3 = "\") returned ";\r
379 \r
380             sResult = appendCompareResult(incResult, sResult);\r
381 \r
382             if (ok3) {\r
383                 logln(msg1 + source + msg2 + target + msg3 + sResult);\r
384             } else {\r
385                 errln(msg1 + source + msg2 + target + msg3 + sResult + msg4 + sExpect);\r
386             }                \r
387         }\r
388     }\r
389     \r
390     private String appendCompareResult(int result, String target){\r
391         if (result == -1)   //LESS\r
392         {\r
393             target += "LESS";\r
394         }\r
395         else if (result == 0)   //EQUAL\r
396         {\r
397             target += "EQUAL";\r
398         }\r
399         else if (result == 1)   //GREATER\r
400         {\r
401             target += "GREATER";\r
402         }\r
403         else\r
404         {\r
405             String huh = "?";\r
406 \r
407             target += huh + result;\r
408         }\r
409         return target;\r
410     }\r
411     \r
412     String prettify(CollationKey sourceKey) {\r
413         int i;\r
414         byte[] bytes= sourceKey.toByteArray();\r
415         String target = "[";\r
416     \r
417         for (i = 0; i < bytes.length; i++) {\r
418             target += Integer.toHexString(bytes[i]);\r
419             target += " ";\r
420         }\r
421         target += "]";\r
422         return target;\r
423     }\r
424  }