Home | History | Annotate | Download | only in cintltst
      1 /********************************************************************
      2  * COPYRIGHT:
      3  * Copyright (c) 1997-2009, International Business Machines Corporation and
      4  * others. All Rights Reserved.
      5  ********************************************************************/
      6 /********************************************************************************
      7 *
      8 * File encoll.C
      9 *
     10 * Modification History:
     11 *        Name                     Description
     12 *     Madhu Katragadda            Ported for C API
     13 *********************************************************************************/
     14 /**
     15  * CollationEnglishTest is a third level test class.  This tests the locale
     16  * specific primary, secondary and tertiary rules.  For example, the ignorable
     17  * character '-' in string "black-bird".  The en_US locale uses the default
     18  * collation rules as its sorting sequence.
     19  */
     20 
     21 #include <stdlib.h>
     22 #include <string.h>
     23 
     24 #include "unicode/utypes.h"
     25 
     26 #if !UCONFIG_NO_COLLATION
     27 
     28 #include "unicode/ucol.h"
     29 #include "unicode/uloc.h"
     30 #include "cintltst.h"
     31 #include "encoll.h"
     32 #include "ccolltst.h"
     33 #include "callcoll.h"
     34 #include "unicode/ustring.h"
     35 
     36 static UCollator *myCollation = NULL;
     37 const static UChar testSourceCases[][MAX_TOKEN_LEN] = {
     38         {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, 0},
     39         {(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},
     40         {(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},
     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)0x0048 /* 'H' */, (UChar)0x0065 /* 'e' */, (UChar)0x006C /* 'l' */, (UChar)0x006C /* 'l' */, (UChar)0x006F /* 'o' */, 0},
     43         {(UChar)0x0041 /* 'A' */, (UChar)0x0042 /* 'B' */, (UChar)0x0043 /* 'C' */, 0},
     44         {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0},
     45         {(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},
     46         {(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},
     47         {(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},
     48         {(UChar)0x0070 /* 'p' */, 0x00EA, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, (UChar)0x0065 /* 'e' */, 0},
     49         {(UChar)0x0070 /* 'p' */, 0x00E9, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, 0x00E9, 0},
     50         {0x00C4, (UChar)0x0042 /* 'B' */, 0x0308, (UChar)0x0043 /* 'C' */, 0x0308, 0},
     51         {(UChar)0x0061 /* 'a' */, 0x0308, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0},
     52         {(UChar)0x0070 /* 'p' */, 0x00E9, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, (UChar)0x0065 /* 'e' */, (UChar)0x0072 /* 'r' */, 0},
     53         {(UChar)0x0072 /* 'r' */, (UChar)0x006F /* 'o' */, (UChar)0x006C /* 'l' */, (UChar)0x0065 /* 'e' */, (UChar)0x0073 /* 's' */, 0},
     54         {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0},
     55         {(UChar)0x0041 /* 'A' */, 0},
     56         {(UChar)0x0041 /* 'A' */, 0},
     57         {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, 0},
     58         {(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},
     59         {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, 0},
     60         {(UChar)0x0061 /* 'a' */, (UChar)0x0023 /* '#' */, (UChar)0x0062 /* 'b' */, 0},
     61         {(UChar)0x0061 /* 'a' */, (UChar)0x0023 /* '#' */, (UChar)0x0062 /* 'b' */, 0},
     62         {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0},
     63         {(UChar)0x0041 /* 'A' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, (UChar)0x0064 /* 'd' */, (UChar)0x0061 /* 'a' */, 0},
     64         {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, (UChar)0x0064 /* 'd' */, (UChar)0x0061 /* 'a' */, 0},
     65         {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, (UChar)0x0064 /* 'd' */, (UChar)0x0061 /* 'a' */, 0},
     66         {0x00E6, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, (UChar)0x0064 /* 'd' */, (UChar)0x0061 /* 'a' */, 0},
     67         {0x00E4, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, (UChar)0x0064 /* 'd' */, (UChar)0x0061 /* 'a' */, 0},
     68         {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0},
     69         {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0},
     70         {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 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)0x0063 /* 'c' */, (UChar)0x0048 /* 'H' */, (UChar)0x0063 /* 'c' */, 0},
     74         {(UChar)0x0061 /* 'a' */, 0x0308, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0},
     75         {(UChar)0x0074 /* 't' */, (UChar)0x0068 /* 'h' */, (UChar)0x0069 /* 'i' */, 0x0302, (UChar)0x0073 /* 's' */, 0},
     76         {(UChar)0x0070 /* 'p' */, 0x00EA, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, (UChar)0x0065 /* 'e' */},
     77         {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0},
     78         {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0},
     79         {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0},
     80         {(UChar)0x0061 /* 'a' */, 0x00E6, (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)0x0070 /* 'p' */, 0x00E9, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, 0x00E9, 0}
     87 };
     88 
     89 const static UChar testTargetCases[][MAX_TOKEN_LEN] = {
     90         {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0},
     91         {(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},
     92         {(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},
     93         {(UChar)0x0062 /* 'b' */, (UChar)0x006C /* 'l' */, (UChar)0x0061 /* 'a' */, (UChar)0x0063 /* 'c' */, (UChar)0x006B /* 'k' */, 0},
     94         {(UChar)0x0068 /* 'h' */, (UChar)0x0065 /* 'e' */, (UChar)0x006C /* 'l' */, (UChar)0x006C /* 'l' */, (UChar)0x006F /* 'o' */, 0},
     95         {(UChar)0x0041 /* 'A' */, (UChar)0x0042 /* 'B' */, (UChar)0x0043 /* 'C' */, 0},
     96         {(UChar)0x0041 /* 'A' */, (UChar)0x0042 /* 'B' */, (UChar)0x0043 /* 'C' */, 0},
     97         {(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},
     98         {(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},
     99         {(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},
    100         {(UChar)0x0070 /* 'p' */, 0x00E9, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, 0x00E9, 0},
    101         {(UChar)0x0070 /* 'p' */, 0x00E9, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, (UChar)0x0065 /* 'e' */, (UChar)0x0072 /* 'r' */, 0},
    102         {0x00C4, (UChar)0x0042 /* 'B' */, 0x0308, (UChar)0x0043 /* 'C' */, 0x0308, 0},
    103         {(UChar)0x0041 /* 'A' */, 0x0308, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0},
    104         {(UChar)0x0070 /* 'p' */, 0x00E9, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, (UChar)0x0065 /* 'e' */, 0},
    105         {(UChar)0x0072 /* 'r' */, (UChar)0x006F /* 'o' */, 0x0302, (UChar)0x006C /* 'l' */, (UChar)0x0065 /* 'e' */, 0},
    106         {(UChar)0x0041 /* 'A' */, 0x00E1, (UChar)0x0063 /* 'c' */, (UChar)0x0064 /* 'd' */, 0},
    107         {(UChar)0x0041 /* 'A' */, 0x00E1, (UChar)0x0063 /* 'c' */, (UChar)0x0064 /* 'd' */, 0},
    108         {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0},
    109         {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0},
    110         {(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},
    111         {(UChar)0x0061 /* 'a' */, (UChar)0x0042 /* 'B' */, (UChar)0x0063 /* 'c' */, 0},
    112         {(UChar)0x0061 /* 'a' */, (UChar)0x0023 /* '#' */, (UChar)0x0042 /* 'B' */, 0},
    113         {(UChar)0x0061 /* 'a' */, (UChar)0x0026 /* '&' */, (UChar)0x0062 /* 'b' */, 0},
    114         {(UChar)0x0061 /* 'a' */, (UChar)0x0023 /* '#' */, (UChar)0x0063 /* 'c' */, 0},
    115         {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, (UChar)0x0064 /* 'd' */, (UChar)0x0061 /* 'a' */, 0},
    116         {0x00C4, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, (UChar)0x0064 /* 'd' */, (UChar)0x0061 /* 'a' */, 0},
    117         {0x00E4, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, (UChar)0x0064 /* 'd' */, (UChar)0x0061 /* 'a' */, 0},
    118         {0x00C4, (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         {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0023 /* '#' */, (UChar)0x0063 /* 'c' */, 0},
    121         {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0},
    122         {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x003D /* '=' */, (UChar)0x0063 /* 'c' */, 0},
    123         {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0064 /* 'd' */, 0},
    124         {0x00E4, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0},
    125         {(UChar)0x0061 /* 'a' */, (UChar)0x0043 /* 'C' */, (UChar)0x0048 /* 'H' */, (UChar)0x0063 /* 'c' */, 0},
    126         {0x00E4, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0},
    127         {(UChar)0x0074 /* 't' */, (UChar)0x0068 /* 'h' */, 0x00EE, (UChar)0x0073 /* 's' */, 0},
    128         {(UChar)0x0070 /* 'p' */, 0x00E9, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, 0x00E9, 0},
    129         {(UChar)0x0061 /* 'a' */, (UChar)0x0042 /* 'B' */, (UChar)0x0043 /* 'C' */, 0},
    130         {(UChar)0x0061 /* 'a' */, (UChar)0x0062 /* 'b' */, (UChar)0x0064 /* 'd' */, 0},
    131         {0x00E4, (UChar)0x0062 /* 'b' */, (UChar)0x0063 /* 'c' */, 0},
    132         {(UChar)0x0061 /* 'a' */, 0x00C6, (UChar)0x0063 /* 'c' */, 0},
    133         {(UChar)0x0061 /* 'a' */, (UChar)0x0042 /* '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)0x0070 /* 'p' */, 0x00EA, (UChar)0x0063 /* 'c' */, (UChar)0x0068 /* 'h' */, (UChar)0x0065 /* 'e' */, 0}
    139 };
    140 
    141 const static UCollationResult results[] = {
    142         UCOL_LESS,
    143         UCOL_LESS, /*UCOL_GREATER,*/
    144         UCOL_LESS,
    145         UCOL_GREATER,
    146         UCOL_GREATER,
    147         UCOL_EQUAL,
    148         UCOL_LESS,
    149         UCOL_LESS,
    150         UCOL_LESS,
    151         UCOL_LESS, /*UCOL_GREATER,*/                                                          /* 10 */
    152         UCOL_GREATER,
    153         UCOL_LESS,
    154         UCOL_EQUAL,
    155         UCOL_LESS,
    156         UCOL_GREATER,
    157         UCOL_GREATER,
    158         UCOL_GREATER,
    159         UCOL_LESS,
    160         UCOL_LESS,
    161         UCOL_LESS,                                                             /* 20 */
    162         UCOL_LESS,
    163         UCOL_LESS,
    164         UCOL_LESS,
    165         UCOL_GREATER,
    166         UCOL_GREATER,
    167         UCOL_GREATER,
    168         /* Test Tertiary  > 26 */
    169         UCOL_LESS,
    170         UCOL_LESS,
    171         UCOL_GREATER,
    172         UCOL_LESS,                                                             /* 30 */
    173         UCOL_GREATER,
    174         UCOL_EQUAL,
    175         UCOL_GREATER,
    176         UCOL_LESS,
    177         UCOL_LESS,
    178         UCOL_LESS,
    179         /* test identical > 36 */
    180         UCOL_EQUAL,
    181         UCOL_EQUAL,
    182         /* test primary > 38 */
    183         UCOL_EQUAL,
    184         UCOL_EQUAL,                                                            /* 40 */
    185         UCOL_LESS,
    186         UCOL_EQUAL,
    187         UCOL_EQUAL,
    188         /* test secondary > 43 */
    189         UCOL_LESS,
    190         UCOL_LESS,
    191         UCOL_EQUAL,
    192         UCOL_LESS,
    193         UCOL_LESS,
    194         UCOL_LESS                                                                         /* 49 */
    195 };
    196 
    197 const static UChar testBugs[][MAX_TOKEN_LEN] = {
    198     {(UChar)0x0061 /* 'a' */, 0},
    199     {(UChar)0x0041 /* 'A' */, 0},
    200     {(UChar)0x0065 /* 'e' */, 0},
    201     {(UChar)0x0045 /* 'E' */, 0},
    202     {0x00e9, 0},
    203     {0x00e8, 0},
    204     {0x00ea, 0},
    205     {0x00eb, 0},
    206     {(UChar)0x0065 /* 'e' */, (UChar)0x0061 /* 'a' */, 0},
    207     {(UChar)0x0078 /* 'x' */, 0}
    208 
    209 };
    210 
    211 /* 0x0300 is grave, 0x0301 is acute
    212    the order of elements in this array must be different than the order in CollationFrenchTest */
    213 const static UChar testAcute[][MAX_TOKEN_LEN] = {
    214     {(UChar)0x0065 /* 'e' */, (UChar)0x0065 /* 'e' */, 0},
    215     {(UChar)0x0065 /* 'e' */, (UChar)0x0065 /* 'e' */, 0x0301, 0},
    216     {(UChar)0x0065 /* 'e' */, (UChar)0x0065 /* 'e' */, 0x0301, 0x0300, 0},
    217     {(UChar)0x0065 /* 'e' */, (UChar)0x0065 /* 'e' */, 0x0300, 0},
    218     {(UChar)0x0065 /* 'e' */, (UChar)0x0065 /* 'e' */, 0x0300, 0x0301, 0},
    219     {(UChar)0x0065 /* 'e' */, 0x0301, (UChar)0x0065 /* 'e' */, 0},
    220     {(UChar)0x0065 /* 'e' */, 0x0301, (UChar)0x0065 /* 'e' */, 0x0301, 0},
    221     {(UChar)0x0065 /* 'e' */, 0x0301, (UChar)0x0065 /* 'e' */, 0x0301, 0x0300, 0},
    222     {(UChar)0x0065 /* 'e' */, 0x0301, (UChar)0x0065 /* 'e' */, 0x0300, 0},
    223     {(UChar)0x0065 /* 'e' */, 0x0301, (UChar)0x0065 /* 'e' */, 0x0300, 0x0301, 0},
    224     {(UChar)0x0065 /* 'e' */, 0x0301, 0x0300, (UChar)0x0065 /* 'e' */, 0},
    225     {(UChar)0x0065 /* 'e' */, 0x0301, 0x0300, (UChar)0x0065 /* 'e' */, 0x0301, 0},
    226     {(UChar)0x0065 /* 'e' */, 0x0301, 0x0300, (UChar)0x0065 /* 'e' */, 0x0301, 0x0300, 0},
    227     {(UChar)0x0065 /* 'e' */, 0x0301, 0x0300, (UChar)0x0065 /* 'e' */, 0x0300, 0},
    228     {(UChar)0x0065 /* 'e' */, 0x0301, 0x0300, (UChar)0x0065 /* 'e' */, 0x0300, 0x0301, 0},
    229     {(UChar)0x0065 /* 'e' */, 0x0300, (UChar)0x0065 /* 'e' */, 0},
    230     {(UChar)0x0065 /* 'e' */, 0x0300, (UChar)0x0065 /* 'e' */, 0x0301, 0},
    231     {(UChar)0x0065 /* 'e' */, 0x0300, (UChar)0x0065 /* 'e' */, 0x0301, 0x0300, 0},
    232     {(UChar)0x0065 /* 'e' */, 0x0300, (UChar)0x0065 /* 'e' */, 0x0300, 0},
    233     {(UChar)0x0065 /* 'e' */, 0x0300, (UChar)0x0065 /* 'e' */, 0x0300, 0x0301, 0},
    234     {(UChar)0x0065 /* 'e' */, 0x0300, 0x0301, (UChar)0x0065 /* 'e' */, 0},
    235     {(UChar)0x0065 /* 'e' */, 0x0300, 0x0301, (UChar)0x0065 /* 'e' */, 0x0301, 0},
    236     {(UChar)0x0065 /* 'e' */, 0x0300, 0x0301, (UChar)0x0065 /* 'e' */, 0x0301, 0x0300, 0},
    237     {(UChar)0x0065 /* 'e' */, 0x0300, 0x0301, (UChar)0x0065 /* 'e' */, 0x0300, 0},
    238     {(UChar)0x0065 /* 'e' */, 0x0300, 0x0301, (UChar)0x0065 /* 'e' */, 0x0300, 0x0301, 0}
    239 };
    240 
    241 static const UChar testMore[][MAX_TOKEN_LEN] = {
    242     {(UChar)0x0061 /* 'a' */, (UChar)0x0065 /* 'e' */, 0},
    243     { 0x00E6, 0},
    244     { 0x00C6, 0},
    245     {(UChar)0x0061 /* 'a' */, (UChar)0x0066 /* 'f' */, 0},
    246     {(UChar)0x006F /* 'o' */, (UChar)0x0065 /* 'e' */, 0},
    247     { 0x0153, 0},
    248     { 0x0152, 0},
    249     {(UChar)0x006F /* 'o' */, (UChar)0x0066 /* 'f' */, 0},
    250 };
    251 
    252 
    253 void addEnglishCollTest(TestNode** root)
    254 {
    255 
    256     addTest(root, &TestPrimary, "tscoll/encoll/TestPrimary");
    257     addTest(root, &TestSecondary, "tscoll/encoll/TestSecondary");
    258     addTest(root, &TestTertiary, "tscoll/encoll/TestTertiary");
    259 
    260 }
    261 
    262 static void TestTertiary( )
    263 {
    264     int32_t testMoreSize;
    265     UCollationResult expected=UCOL_EQUAL;
    266     int32_t i,j;
    267     UErrorCode status = U_ZERO_ERROR;
    268     myCollation = ucol_open("en_US", &status);
    269     if(U_FAILURE(status)){
    270         log_err_status(status, "ERROR: in creation of rule based collator: %s\n", myErrorName(status));
    271         return;
    272     }
    273     log_verbose("Testing English Collation with Tertiary strength\n");
    274 
    275     ucol_setStrength(myCollation, UCOL_TERTIARY);
    276     for (i = 0; i < 38 ; i++)
    277     {
    278         doTest(myCollation, testSourceCases[i], testTargetCases[i], results[i]);
    279     }
    280 
    281 
    282     j = 0;
    283    for (i = 0; i < 10; i++)
    284     {
    285         for (j = i+1; j < 10; j++)
    286         {
    287             doTest(myCollation, testBugs[i], testBugs[j], UCOL_LESS);
    288         }
    289    }
    290     /*test more interesting cases */
    291     testMoreSize = sizeof(testMore) / sizeof(testMore[0]);
    292     for (i = 0; i < testMoreSize; i++)
    293     {
    294         for (j = 0; j < testMoreSize; j++)
    295         {
    296             if (i <  j) expected = UCOL_LESS;
    297             if (i == j) expected = UCOL_EQUAL;
    298             if (i >  j) expected = UCOL_GREATER;
    299             doTest(myCollation, testMore[i], testMore[j], expected );
    300         }
    301     }
    302     ucol_close(myCollation);
    303 }
    304 
    305 static void TestPrimary()
    306 {
    307 
    308     int32_t i;
    309     UErrorCode status = U_ZERO_ERROR;
    310     myCollation = ucol_open("en_US", &status);
    311     if(U_FAILURE(status)){
    312         log_err_status(status, "ERROR: in creation of rule based collator: %s\n", myErrorName(status));
    313         return;
    314     }
    315     ucol_setStrength(myCollation, UCOL_PRIMARY);
    316     log_verbose("Testing English Collation with Primary strength\n");
    317     for (i = 38; i < 43 ; i++)
    318     {
    319         doTest(myCollation, testSourceCases[i], testTargetCases[i], results[i]);
    320     }
    321     ucol_close(myCollation);
    322 }
    323 
    324 static void TestSecondary()
    325 {
    326     UCollationResult expected=UCOL_EQUAL;
    327     int32_t i,j, testAcuteSize;
    328     UErrorCode status = U_ZERO_ERROR;
    329     myCollation = ucol_open("en_US", &status);
    330     if(U_FAILURE(status)){
    331         log_err_status(status, "ERROR: in creation of rule based collator: %s\n", myErrorName(status));
    332         return;
    333     }
    334     ucol_setStrength(myCollation, UCOL_SECONDARY);
    335     log_verbose("Testing English Collation with Secondary strength\n");
    336     for (i = 43; i < 49 ; i++)
    337     {
    338         doTest(myCollation, testSourceCases[i], testTargetCases[i], results[i]);
    339     }
    340 
    341 
    342     /*test acute and grave ordering (compare to french collation) */
    343     testAcuteSize = sizeof(testAcute) / sizeof(testAcute[0]);
    344     for (i = 0; i < testAcuteSize; i++)
    345     {
    346         for (j = 0; j < testAcuteSize; j++)
    347         {
    348             if (i <  j) expected = UCOL_LESS;
    349             if (i == j) expected = UCOL_EQUAL;
    350             if (i >  j) expected = UCOL_GREATER;
    351             doTest(myCollation, testAcute[i], testAcute[j], expected );
    352         }
    353     }
    354 ucol_close(myCollation);
    355 }
    356 
    357 #endif /* #if !UCONFIG_NO_COLLATION */
    358