• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #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 "encoll.h"
18 #include "cmemory.h"
19 
CollationEnglishTest()20 CollationEnglishTest::CollationEnglishTest()
21 : myCollation(nullptr)
22 {
23     UErrorCode status = U_ZERO_ERROR;
24     myCollation = Collator::createInstance(Locale::getEnglish(), status);
25 }
26 
~CollationEnglishTest()27 CollationEnglishTest::~CollationEnglishTest()
28 {
29     delete myCollation;
30 }
31 
32 static const char16_t testSourceCases[][CollationEnglishTest::MAX_TOKEN_LEN] = {
33     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0062) /* 'b' */, 0},
34     {static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x006C) /* 'l' */, static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x006B) /* 'k' */, static_cast<char16_t>(0x002D) /* '-' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0069) /* 'i' */, static_cast<char16_t>(0x0072) /* 'r' */, static_cast<char16_t>(0x0064) /* 'd' */, 0},
35     {static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x006C) /* 'l' */, static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x006B) /* 'k' */, static_cast<char16_t>(0x0020) /* ' ' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0069) /* 'i' */, static_cast<char16_t>(0x0072) /* 'r' */, static_cast<char16_t>(0x0064) /* 'd' */, 0},
36     {static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x006C) /* 'l' */, static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x006B) /* 'k' */, static_cast<char16_t>(0x002D) /* '-' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0069) /* 'i' */, static_cast<char16_t>(0x0072) /* 'r' */, static_cast<char16_t>(0x0064) /* 'd' */, 0},
37     {static_cast<char16_t>(0x0048) /* 'H' */, static_cast<char16_t>(0x0065) /* 'e' */, static_cast<char16_t>(0x006C) /* 'l' */, static_cast<char16_t>(0x006C) /* 'l' */, static_cast<char16_t>(0x006F) /* 'o' */, 0},
38     {static_cast<char16_t>(0x0041) /* 'A' */, static_cast<char16_t>(0x0042) /* 'B' */, static_cast<char16_t>(0x0043) /* 'C' */, 0},
39     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, 0},
40     {static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x006C) /* 'l' */, static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x006B) /* 'k' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0069) /* 'i' */, static_cast<char16_t>(0x0072) /* 'r' */, static_cast<char16_t>(0x0064) /* 'd' */, 0},
41     {static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x006C) /* 'l' */, static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x006B) /* 'k' */, static_cast<char16_t>(0x002D) /* '-' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0069) /* 'i' */, static_cast<char16_t>(0x0072) /* 'r' */, static_cast<char16_t>(0x0064) /* 'd' */, 0},
42     {static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x006C) /* 'l' */, static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x006B) /* 'k' */, static_cast<char16_t>(0x002D) /* '-' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0069) /* 'i' */, static_cast<char16_t>(0x0072) /* 'r' */, static_cast<char16_t>(0x0064) /* 'd' */, 0},
43     {static_cast<char16_t>(0x0070) /* 'p' */, 0x00EA, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x0068) /* 'h' */, static_cast<char16_t>(0x0065) /* 'e' */, 0},
44     {static_cast<char16_t>(0x0070) /* 'p' */, 0x00E9, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x0068) /* 'h' */, 0x00E9, 0},
45     {0x00C4, static_cast<char16_t>(0x0042) /* 'B' */, 0x0308, static_cast<char16_t>(0x0043) /* 'C' */, 0x0308, 0},
46     {static_cast<char16_t>(0x0061) /* 'a' */, 0x0308, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, 0},
47     {static_cast<char16_t>(0x0070) /* 'p' */, 0x00E9, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x0068) /* 'h' */, static_cast<char16_t>(0x0065) /* 'e' */, static_cast<char16_t>(0x0072) /* 'r' */, 0},
48     {static_cast<char16_t>(0x0072) /* 'r' */, static_cast<char16_t>(0x006F) /* 'o' */, static_cast<char16_t>(0x006C) /* 'l' */, static_cast<char16_t>(0x0065) /* 'e' */, static_cast<char16_t>(0x0073) /* 's' */, 0},
49     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, 0},
50     {static_cast<char16_t>(0x0041) /* 'A' */, 0},
51     {static_cast<char16_t>(0x0041) /* 'A' */, 0},
52     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0062) /* 'b' */, 0},
53     {static_cast<char16_t>(0x0074) /* 't' */, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x006F) /* 'o' */, static_cast<char16_t>(0x006D) /* 'm' */, static_cast<char16_t>(0x0070) /* 'p' */, static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0072) /* 'r' */, static_cast<char16_t>(0x0065) /* 'e' */, static_cast<char16_t>(0x0070) /* 'p' */, static_cast<char16_t>(0x006C) /* 'l' */, static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0069) /* 'i' */, static_cast<char16_t>(0x006E) /* 'n' */, 0},
54     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0062) /* 'b' */, 0},
55     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0023) /* '#' */, static_cast<char16_t>(0x0062) /* 'b' */, 0},
56     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0023) /* '#' */, static_cast<char16_t>(0x0062) /* 'b' */, 0},
57     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, 0},
58     {static_cast<char16_t>(0x0041) /* 'A' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x0064) /* 'd' */, static_cast<char16_t>(0x0061) /* 'a' */, 0},
59     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x0064) /* 'd' */, static_cast<char16_t>(0x0061) /* 'a' */, 0},
60     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x0064) /* 'd' */, static_cast<char16_t>(0x0061) /* 'a' */, 0},
61     {0x00E6, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x0064) /* 'd' */, static_cast<char16_t>(0x0061) /* 'a' */, 0},
62     {0x00E4, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x0064) /* 'd' */, static_cast<char16_t>(0x0061) /* 'a' */, 0},
63     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, 0},
64     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, 0},
65     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, 0},
66     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, 0},
67     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, 0},
68     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x0048) /* 'H' */, static_cast<char16_t>(0x0063) /* 'c' */, 0},
69     {static_cast<char16_t>(0x0061) /* 'a' */, 0x0308, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, 0},
70     {static_cast<char16_t>(0x0074) /* 't' */, static_cast<char16_t>(0x0068) /* 'h' */, static_cast<char16_t>(0x0069) /* 'i' */, 0x0302, static_cast<char16_t>(0x0073) /* 's' */, 0},
71     {static_cast<char16_t>(0x0070) /* 'p' */, 0x00EA, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x0068) /* 'h' */, static_cast<char16_t>(0x0065) /* 'e' */},
72     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, 0},
73     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, 0},
74     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, 0},
75     {static_cast<char16_t>(0x0061) /* 'a' */, 0x00E6, static_cast<char16_t>(0x0063) /* 'c' */, 0},
76     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, 0},
77     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, 0},
78     {static_cast<char16_t>(0x0061) /* 'a' */, 0x00E6, static_cast<char16_t>(0x0063) /* 'c' */, 0},
79     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, 0},
80     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, 0},
81     {static_cast<char16_t>(0x0070) /* 'p' */, 0x00E9, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x0068) /* 'h' */, 0x00E9, 0} // 49
82 };
83 
84 static const char16_t testTargetCases[][CollationEnglishTest::MAX_TOKEN_LEN] = {
85     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, 0},
86     {static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x006C) /* 'l' */, static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x006B) /* 'k' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0069) /* 'i' */, static_cast<char16_t>(0x0072) /* 'r' */, static_cast<char16_t>(0x0064) /* 'd' */, 0},
87     {static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x006C) /* 'l' */, static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x006B) /* 'k' */, static_cast<char16_t>(0x002D) /* '-' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0069) /* 'i' */, static_cast<char16_t>(0x0072) /* 'r' */, static_cast<char16_t>(0x0064) /* 'd' */, 0},
88     {static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x006C) /* 'l' */, static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x006B) /* 'k' */, 0},
89     {static_cast<char16_t>(0x0068) /* 'h' */, static_cast<char16_t>(0x0065) /* 'e' */, static_cast<char16_t>(0x006C) /* 'l' */, static_cast<char16_t>(0x006C) /* 'l' */, static_cast<char16_t>(0x006F) /* 'o' */, 0},
90     {static_cast<char16_t>(0x0041) /* 'A' */, static_cast<char16_t>(0x0042) /* 'B' */, static_cast<char16_t>(0x0043) /* 'C' */, 0},
91     {static_cast<char16_t>(0x0041) /* 'A' */, static_cast<char16_t>(0x0042) /* 'B' */, static_cast<char16_t>(0x0043) /* 'C' */, 0},
92     {static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x006C) /* 'l' */, static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x006B) /* 'k' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0069) /* 'i' */, static_cast<char16_t>(0x0072) /* 'r' */, static_cast<char16_t>(0x0064) /* 'd' */, static_cast<char16_t>(0x0073) /* 's' */, 0},
93     {static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x006C) /* 'l' */, static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x006B) /* 'k' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0069) /* 'i' */, static_cast<char16_t>(0x0072) /* 'r' */, static_cast<char16_t>(0x0064) /* 'd' */, static_cast<char16_t>(0x0073) /* 's' */, 0},
94     {static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x006C) /* 'l' */, static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x006B) /* 'k' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0069) /* 'i' */, static_cast<char16_t>(0x0072) /* 'r' */, static_cast<char16_t>(0x0064) /* 'd' */, 0},
95     {static_cast<char16_t>(0x0070) /* 'p' */, 0x00E9, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x0068) /* 'h' */, 0x00E9, 0},
96     {static_cast<char16_t>(0x0070) /* 'p' */, 0x00E9, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x0068) /* 'h' */, static_cast<char16_t>(0x0065) /* 'e' */, static_cast<char16_t>(0x0072) /* 'r' */, 0},
97     {0x00C4, static_cast<char16_t>(0x0042) /* 'B' */, 0x0308, static_cast<char16_t>(0x0043) /* 'C' */, 0x0308, 0},
98     {static_cast<char16_t>(0x0041) /* 'A' */, 0x0308, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, 0},
99     {static_cast<char16_t>(0x0070) /* 'p' */, 0x00E9, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x0068) /* 'h' */, static_cast<char16_t>(0x0065) /* 'e' */, 0},
100     {static_cast<char16_t>(0x0072) /* 'r' */, static_cast<char16_t>(0x006F) /* 'o' */, 0x0302, static_cast<char16_t>(0x006C) /* 'l' */, static_cast<char16_t>(0x0065) /* 'e' */, 0},
101     {static_cast<char16_t>(0x0041) /* 'A' */, 0x00E1, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x0064) /* 'd' */, 0},
102     {static_cast<char16_t>(0x0041) /* 'A' */, 0x00E1, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x0064) /* 'd' */, 0},
103     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, 0},
104     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, 0},
105     {static_cast<char16_t>(0x0054) /* 'T' */, static_cast<char16_t>(0x0043) /* 'C' */, static_cast<char16_t>(0x006F) /* 'o' */, static_cast<char16_t>(0x006D) /* 'm' */, static_cast<char16_t>(0x0070) /* 'p' */, static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0072) /* 'r' */, static_cast<char16_t>(0x0065) /* 'e' */, static_cast<char16_t>(0x0050) /* 'P' */, static_cast<char16_t>(0x006C) /* 'l' */, static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0069) /* 'i' */, static_cast<char16_t>(0x006E) /* 'n' */, 0},
106     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0042) /* 'B' */, static_cast<char16_t>(0x0063) /* 'c' */, 0},
107     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0023) /* '#' */, static_cast<char16_t>(0x0042) /* 'B' */, 0},
108     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0026) /* '&' */, static_cast<char16_t>(0x0062) /* 'b' */, 0},
109     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0023) /* '#' */, static_cast<char16_t>(0x0063) /* 'c' */, 0},
110     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x0064) /* 'd' */, static_cast<char16_t>(0x0061) /* 'a' */, 0},
111     {0x00C4, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x0064) /* 'd' */, static_cast<char16_t>(0x0061) /* 'a' */, 0},
112     {0x00E4, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x0064) /* 'd' */, static_cast<char16_t>(0x0061) /* 'a' */, 0},
113     {0x00C4, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x0064) /* 'd' */, static_cast<char16_t>(0x0061) /* 'a' */, 0},
114     {0x00C4, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x0064) /* 'd' */, static_cast<char16_t>(0x0061) /* 'a' */, 0},
115     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0023) /* '#' */, static_cast<char16_t>(0x0063) /* 'c' */, 0},
116     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, 0},
117     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x003D) /* '=' */, static_cast<char16_t>(0x0063) /* 'c' */, 0},
118     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0064) /* 'd' */, 0},
119     {0x00E4, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, 0},
120     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0043) /* 'C' */, static_cast<char16_t>(0x0048) /* 'H' */, static_cast<char16_t>(0x0063) /* 'c' */, 0},
121     {0x00E4, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, 0},
122     {static_cast<char16_t>(0x0074) /* 't' */, static_cast<char16_t>(0x0068) /* 'h' */, 0x00EE, static_cast<char16_t>(0x0073) /* 's' */, 0},
123     {static_cast<char16_t>(0x0070) /* 'p' */, 0x00E9, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x0068) /* 'h' */, 0x00E9, 0},
124     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0042) /* 'B' */, static_cast<char16_t>(0x0043) /* 'C' */, 0},
125     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0064) /* 'd' */, 0},
126     {0x00E4, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, 0},
127     {static_cast<char16_t>(0x0061) /* 'a' */, 0x00C6, static_cast<char16_t>(0x0063) /* 'c' */, 0},
128     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0042) /* 'B' */, static_cast<char16_t>(0x0064) /* 'd' */, 0},
129     {0x00E4, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, 0},
130     {static_cast<char16_t>(0x0061) /* 'a' */, 0x00C6, static_cast<char16_t>(0x0063) /* 'c' */, 0},
131     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0042) /* 'B' */, static_cast<char16_t>(0x0064) /* 'd' */, 0},
132     {0x00E4, static_cast<char16_t>(0x0062) /* 'b' */, static_cast<char16_t>(0x0063) /* 'c' */, 0},
133     {static_cast<char16_t>(0x0070) /* 'p' */, 0x00EA, static_cast<char16_t>(0x0063) /* 'c' */, static_cast<char16_t>(0x0068) /* 'h' */, static_cast<char16_t>(0x0065) /* 'e' */, 0} // 49
134 };
135 
136 static const Collator::EComparisonResult results[] = {
137         Collator::LESS,
138         Collator::LESS, /*Collator::GREATER,*/
139         Collator::LESS,
140         Collator::GREATER,
141         Collator::GREATER,
142         Collator::EQUAL,
143         Collator::LESS,
144         Collator::LESS,
145         Collator::LESS,
146         Collator::LESS, /*Collator::GREATER,*/                                                          /* 10 */
147         Collator::GREATER,
148         Collator::LESS,
149         Collator::EQUAL,
150         Collator::LESS,
151         Collator::GREATER,
152         Collator::GREATER,
153         Collator::GREATER,
154         Collator::LESS,
155         Collator::LESS,
156         Collator::LESS,                                                             /* 20 */
157         Collator::LESS,
158         Collator::LESS,
159         Collator::LESS,
160         Collator::GREATER,
161         Collator::GREATER,
162         Collator::GREATER,
163         /* Test Tertiary  > 26 */
164         Collator::LESS,
165         Collator::LESS,
166         Collator::GREATER,
167         Collator::LESS,                                                             /* 30 */
168         Collator::GREATER,
169         Collator::EQUAL,
170         Collator::GREATER,
171         Collator::LESS,
172         Collator::LESS,
173         Collator::LESS,
174         /* test identical > 36 */
175         Collator::EQUAL,
176         Collator::EQUAL,
177         /* test primary > 38 */
178         Collator::EQUAL,
179         Collator::EQUAL,                                                            /* 40 */
180         Collator::LESS,
181         Collator::EQUAL,
182         Collator::EQUAL,
183         /* test secondary > 43 */
184         Collator::LESS,
185         Collator::LESS,
186         Collator::EQUAL,
187         Collator::LESS,
188         Collator::LESS,
189         Collator::LESS                                                                  // 49
190 };
191 
192 static const char16_t testBugs[][CollationEnglishTest::MAX_TOKEN_LEN] = {
193     {0x61, 0},
194     {0x41, 0},
195     {0x65, 0},
196     {0x45, 0},
197     {0x00e9, 0},
198     {0x00e8, 0},
199     {0x00ea, 0},
200     {0x00eb, 0},
201     {0x65, 0x61, 0},
202     {0x78, 0}
203 };
204 
205 // 0x0300 is grave, 0x0301 is acute
206 // the order of elements in this array must be different than the order in CollationFrenchTest
207 static const char16_t testAcute[][CollationEnglishTest::MAX_TOKEN_LEN] = {
208     {0x65, 0x65, 0},
209     {0x65, 0x65, 0x0301, 0},
210     {0x65, 0x65, 0x0301, 0x0300, 0},
211     {0x65, 0x65, 0x0300, 0},
212     {0x65, 0x65, 0x0300, 0x0301, 0},
213     {0x65, 0x0301, 0x65, 0},
214     {0x65, 0x0301, 0x65, 0x0301, 0},
215     {0x65, 0x0301, 0x65, 0x0301, 0x0300, 0},
216     {0x65, 0x0301, 0x65, 0x0300, 0},
217     {0x65, 0x0301, 0x65, 0x0300, 0x0301, 0},
218     {0x65, 0x0301, 0x0300, 0x65, 0},
219     {0x65, 0x0301, 0x0300, 0x65, 0x0301, 0},
220     {0x65, 0x0301, 0x0300, 0x65, 0x0301, 0x0300, 0},
221     {0x65, 0x0301, 0x0300, 0x65, 0x0300, 0},
222     {0x65, 0x0301, 0x0300, 0x65, 0x0300, 0x0301, 0},
223     {0x65, 0x0300, 0x65, 0},
224     {0x65, 0x0300, 0x65, 0x0301, 0},
225     {0x65, 0x0300, 0x65, 0x0301, 0x0300, 0},
226     {0x65, 0x0300, 0x65, 0x0300, 0},
227     {0x65, 0x0300, 0x65, 0x0300, 0x0301, 0},
228     {0x65, 0x0300, 0x0301, 0x65, 0},
229     {0x65, 0x0300, 0x0301, 0x65, 0x0301, 0},
230     {0x65, 0x0300, 0x0301, 0x65, 0x0301, 0x0300, 0},
231     {0x65, 0x0300, 0x0301, 0x65, 0x0300, 0},
232     {0x65, 0x0300, 0x0301, 0x65, 0x0300, 0x0301, 0}
233 };
234 
235 static const char16_t testMore[][CollationEnglishTest::MAX_TOKEN_LEN] = {
236     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0065) /* 'e' */, 0},
237     {0x00E6, 0},
238     {0x00C6, 0},
239     {static_cast<char16_t>(0x0061) /* 'a' */, static_cast<char16_t>(0x0066) /* 'f' */, 0},
240     {static_cast<char16_t>(0x006F) /* 'o' */, static_cast<char16_t>(0x0065) /* 'e' */, 0},
241     {0x0153, 0},
242     {0x0152, 0},
243     {static_cast<char16_t>(0x006F) /* 'o' */, static_cast<char16_t>(0x0066) /* 'f' */, 0},
244 };
245 
TestTertiary()246 void CollationEnglishTest::TestTertiary(/* char* par */)
247 {
248     int32_t i = 0;
249     myCollation->setStrength(Collator::TERTIARY);
250     for (i = 0; i < 38 ; i++)
251     {
252         doTest(myCollation, testSourceCases[i], testTargetCases[i], results[i]);
253     }
254 
255     int32_t j = 0;
256     for (i = 0; i < 10; i++)
257     {
258         for (j = i+1; j < 10; j++)
259         {
260             doTest(myCollation, testBugs[i], testBugs[j], Collator::LESS);
261         }
262     }
263 
264     //test more interesting cases
265     Collator::EComparisonResult expected;
266     const int32_t testMoreSize = UPRV_LENGTHOF(testMore);
267     for (i = 0; i < testMoreSize; i++)
268     {
269         for (j = 0; j < testMoreSize; j++)
270         {
271             if (i <  j)
272                 expected = Collator::LESS;
273             else if (i == j)
274                 expected = Collator::EQUAL;
275             else // (i >  j)
276                 expected = Collator::GREATER;
277             doTest(myCollation, testMore[i], testMore[j], expected );
278         }
279     }
280 
281 }
282 
TestPrimary()283 void CollationEnglishTest::TestPrimary(/* char* par */)
284 {
285     int32_t i;
286     myCollation->setStrength(Collator::PRIMARY);
287     for (i = 38; i < 43 ; i++)
288     {
289         doTest(myCollation, testSourceCases[i], testTargetCases[i], results[i]);
290     }
291 }
292 
TestSecondary()293 void CollationEnglishTest::TestSecondary(/* char* par */)
294 {
295     int32_t i;
296     myCollation->setStrength(Collator::SECONDARY);
297     for (i = 43; i < 49 ; i++)
298     {
299         doTest(myCollation, testSourceCases[i], testTargetCases[i], results[i]);
300     }
301 
302     //test acute and grave ordering (compare to french collation)
303     int32_t j;
304     Collator::EComparisonResult expected;
305     const int32_t testAcuteSize = UPRV_LENGTHOF(testAcute);
306     for (i = 0; i < testAcuteSize; i++)
307     {
308         for (j = 0; j < testAcuteSize; j++)
309         {
310             if (i <  j)
311                 expected = Collator::LESS;
312             else if (i == j)
313                 expected = Collator::EQUAL;
314             else // (i >  j)
315                 expected = Collator::GREATER;
316             doTest(myCollation, testAcute[i], testAcute[j], expected );
317         }
318     }
319 }
320 
runIndexedTest(int32_t index,UBool exec,const char * & name,char *)321 void CollationEnglishTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ )
322 {
323     if (exec) logln("TestSuite CollationEnglishTest: ");
324     if(myCollation) {
325       switch (index) {
326           case 0: name = "TestPrimary";   if (exec)   TestPrimary(/* par */); break;
327           case 1: name = "TestSecondary"; if (exec)   TestSecondary(/* par */); break;
328           case 2: name = "TestTertiary";  if (exec)   TestTertiary(/* par */); break;
329           default: name = ""; break;
330       }
331     } else {
332       dataerrln("Collator couldn't be instantiated!");
333       name = "";
334     }
335 }
336 
337 #endif /* #if !UCONFIG_NO_COLLATION */
338