1 // Copyright (C) 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 20 CollationEnglishTest::CollationEnglishTest() 21 : myCollation(0) 22 { 23 UErrorCode status = U_ZERO_ERROR; 24 myCollation = Collator::createInstance(Locale::getEnglish(), status); 25 } 26 27 CollationEnglishTest::~CollationEnglishTest() 28 { 29 delete myCollation; 30 } 31 32 static const UChar testSourceCases[][CollationEnglishTest::MAX_TOKEN_LEN] = { 33 {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, 0}, 34 {(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}, 35 {(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}, 36 {(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}, 37 {(UChar)0x0048 /* 'H' */, (UChar)0x0065 /* 'e' */, (UChar)0x006C /* 'l' */, (UChar)0x006C /* 'l' */, (UChar)0x006F /* 'o' */, 0}, 38 {(UChar)0x0041 /* 'A' */, (UChar)0x0042 /* 'B' */, (UChar)0x0043 /* 'C' */, 0}, 39 {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, 40 {(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}, 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)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)0x0070 /* 'p' */, 0x00EA, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, (UChar)0x0065 /* 'e' */, 0}, 44 {(UChar)0x0070 /* 'p' */, 0x00E9, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, 0x00E9, 0}, 45 {0x00C4, (UChar)0x0042 /* 'B' */, 0x0308, (UChar)0x0043 /* 'C' */, 0x0308, 0}, 46 {(UChar)0x0061 /* 'a' */, 0x0308, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, 47 {(UChar)0x0070 /* 'p' */, 0x00E9, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, (UChar)0x0065 /* 'e' */, (UChar)0x0072 /* 'r' */, 0}, 48 {(UChar)0x0072 /* 'r' */, (UChar)0x006F /* 'o' */, (UChar)0x006C /* 'l' */, (UChar)0x0065 /* 'e' */, (UChar)0x0073 /* 's' */, 0}, 49 {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, 50 {(UChar)0x0041 /* 'A' */, 0}, 51 {(UChar)0x0041 /* 'A' */, 0}, 52 {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, 0}, 53 {(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}, 54 {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, 0}, 55 {(UChar)0x0061 /* 'a' */, (UChar)0x0023 /* '#' */, (UChar)0x0062 /* 'b' */, 0}, 56 {(UChar)0x0061 /* 'a' */, (UChar)0x0023 /* '#' */, (UChar)0x0062 /* 'b' */, 0}, 57 {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, 58 {(UChar)0x0041 /* 'A' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, (UChar)0x0064 /* 'd' */, (UChar)0x0061 /* 'a' */, 0}, 59 {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, (UChar)0x0064 /* 'd' */, (UChar)0x0061 /* 'a' */, 0}, 60 {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, (UChar)0x0064 /* 'd' */, (UChar)0x0061 /* 'a' */, 0}, 61 {0x00E6, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, (UChar)0x0064 /* 'd' */, (UChar)0x0061 /* 'a' */, 0}, 62 {0x00E4, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, (UChar)0x0064 /* 'd' */, (UChar)0x0061 /* 'a' */, 0}, 63 {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, 64 {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, 65 {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, 66 {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, 67 {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, 68 {(UChar)0x0061 /* 'a' */, (UChar)0x0063 /* 'c' */, (UChar)0x0048 /* 'H' */, (UChar)0x0063 /* 'c' */, 0}, 69 {(UChar)0x0061 /* 'a' */, 0x0308, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, 70 {(UChar)0x0074 /* 't' */, (UChar)0x0068 /* 'h' */, (UChar)0x0069 /* 'i' */, 0x0302, (UChar)0x0073 /* 's' */, 0}, 71 {(UChar)0x0070 /* 'p' */, 0x00EA, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, (UChar)0x0065 /* 'e' */}, 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' */, 0x00E6, (UChar)0x0063 /* 'c' */, 0}, 76 {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, 77 {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, 78 {(UChar)0x0061 /* 'a' */, 0x00E6, (UChar)0x0063 /* 'c' */, 0}, 79 {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, 80 {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, 81 {(UChar)0x0070 /* 'p' */, 0x00E9, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, 0x00E9, 0} // 49 82 }; 83 84 static const UChar testTargetCases[][CollationEnglishTest::MAX_TOKEN_LEN] = { 85 {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, 86 {(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}, 87 {(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}, 88 {(UChar)0x0062 /* 'b' */, (UChar)0x006C /* 'l' */, (UChar)0x0061 /* 'a' */, (UChar)0x0063 /* 'c' */, (UChar)0x006B /* 'k' */, 0}, 89 {(UChar)0x0068 /* 'h' */, (UChar)0x0065 /* 'e' */, (UChar)0x006C /* 'l' */, (UChar)0x006C /* 'l' */, (UChar)0x006F /* 'o' */, 0}, 90 {(UChar)0x0041 /* 'A' */, (UChar)0x0042 /* 'B' */, (UChar)0x0043 /* 'C' */, 0}, 91 {(UChar)0x0041 /* 'A' */, (UChar)0x0042 /* 'B' */, (UChar)0x0043 /* 'C' */, 0}, 92 {(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}, 93 {(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}, 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)0x0070 /* 'p' */, 0x00E9, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, 0x00E9, 0}, 96 {(UChar)0x0070 /* 'p' */, 0x00E9, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, (UChar)0x0065 /* 'e' */, (UChar)0x0072 /* 'r' */, 0}, 97 {0x00C4, (UChar)0x0042 /* 'B' */, 0x0308, (UChar)0x0043 /* 'C' */, 0x0308, 0}, 98 {(UChar)0x0041 /* 'A' */, 0x0308, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, 99 {(UChar)0x0070 /* 'p' */, 0x00E9, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, (UChar)0x0065 /* 'e' */, 0}, 100 {(UChar)0x0072 /* 'r' */, (UChar)0x006F /* 'o' */, 0x0302, (UChar)0x006C /* 'l' */, (UChar)0x0065 /* 'e' */, 0}, 101 {(UChar)0x0041 /* 'A' */, 0x00E1, (UChar)0x0063 /* 'c' */, (UChar)0x0064 /* 'd' */, 0}, 102 {(UChar)0x0041 /* 'A' */, 0x00E1, (UChar)0x0063 /* 'c' */, (UChar)0x0064 /* 'd' */, 0}, 103 {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, 104 {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, 105 {(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}, 106 {(UChar)0x0061 /* 'a' */, (UChar)0x0042 /* 'B' */, (UChar)0x0063 /* 'c' */, 0}, 107 {(UChar)0x0061 /* 'a' */, (UChar)0x0023 /* '#' */, (UChar)0x0042 /* 'B' */, 0}, 108 {(UChar)0x0061 /* 'a' */, (UChar)0x0026 /* '&' */, (UChar)0x0062 /* 'b' */, 0}, 109 {(UChar)0x0061 /* 'a' */, (UChar)0x0023 /* '#' */, (UChar)0x0063 /* 'c' */, 0}, 110 {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, (UChar)0x0064 /* 'd' */, (UChar)0x0061 /* 'a' */, 0}, 111 {0x00C4, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, (UChar)0x0064 /* 'd' */, (UChar)0x0061 /* 'a' */, 0}, 112 {0x00E4, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, (UChar)0x0064 /* 'd' */, (UChar)0x0061 /* 'a' */, 0}, 113 {0x00C4, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, (UChar)0x0064 /* 'd' */, (UChar)0x0061 /* 'a' */, 0}, 114 {0x00C4, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, (UChar)0x0064 /* 'd' */, (UChar)0x0061 /* 'a' */, 0}, 115 {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0023 /* '#' */, (UChar)0x0063 /* 'c' */, 0}, 116 {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, 117 {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x003D /* '=' */, (UChar)0x0063 /* 'c' */, 0}, 118 {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0064 /* 'd' */, 0}, 119 {0x00E4, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, 120 {(UChar)0x0061 /* 'a' */, (UChar)0x0043 /* 'C' */, (UChar)0x0048 /* 'H' */, (UChar)0x0063 /* 'c' */, 0}, 121 {0x00E4, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, 122 {(UChar)0x0074 /* 't' */, (UChar)0x0068 /* 'h' */, 0x00EE, (UChar)0x0073 /* 's' */, 0}, 123 {(UChar)0x0070 /* 'p' */, 0x00E9, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, 0x00E9, 0}, 124 {(UChar)0x0061 /* 'a' */, (UChar)0x0042 /* 'B' */, (UChar)0x0043 /* 'C' */, 0}, 125 {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0064 /* 'd' */, 0}, 126 {0x00E4, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, 127 {(UChar)0x0061 /* 'a' */, 0x00C6, (UChar)0x0063 /* 'c' */, 0}, 128 {(UChar)0x0061 /* 'a' */, (UChar)0x0042 /* 'B' */, (UChar)0x0064 /* 'd' */, 0}, 129 {0x00E4, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, 130 {(UChar)0x0061 /* 'a' */, 0x00C6, (UChar)0x0063 /* 'c' */, 0}, 131 {(UChar)0x0061 /* 'a' */, (UChar)0x0042 /* 'B' */, (UChar)0x0064 /* 'd' */, 0}, 132 {0x00E4, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0}, 133 {(UChar)0x0070 /* 'p' */, 0x00EA, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, (UChar)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 UChar 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 UChar 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 UChar testMore[][CollationEnglishTest::MAX_TOKEN_LEN] = { 236 {(UChar)0x0061 /* 'a' */, (UChar)0x0065 /* 'e' */, 0}, 237 { 0x00E6, 0}, 238 { 0x00C6, 0}, 239 {(UChar)0x0061 /* 'a' */, (UChar)0x0066 /* 'f' */, 0}, 240 {(UChar)0x006F /* 'o' */, (UChar)0x0065 /* 'e' */, 0}, 241 { 0x0153, 0}, 242 { 0x0152, 0}, 243 {(UChar)0x006F /* 'o' */, (UChar)0x0066 /* 'f' */, 0}, 244 }; 245 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 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 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 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