Home | History | Annotate | Download | only in intltest
      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