Home | History | Annotate | Download | only in cintltst
      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 */
    361