Jean-Baptiste Queru | b13da9d | 2009-07-17 17:53:22 -0700 | [diff] [blame] | 1 | /******************************************************************** |
| 2 | * COPYRIGHT: |
Jean-Baptiste Queru | 6d5deb1 | 2009-07-20 15:14:11 -0700 | [diff] [blame^] | 3 | * Copyright (c) 1997-2009, International Business Machines Corporation and |
Jean-Baptiste Queru | b13da9d | 2009-07-17 17:53:22 -0700 | [diff] [blame] | 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)){ |
Jean-Baptiste Queru | 6d5deb1 | 2009-07-20 15:14:11 -0700 | [diff] [blame^] | 270 | log_err_status(status, "ERROR: in creation of rule based collator: %s\n", myErrorName(status)); |
Jean-Baptiste Queru | b13da9d | 2009-07-17 17:53:22 -0700 | [diff] [blame] | 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)){ |
Jean-Baptiste Queru | 6d5deb1 | 2009-07-20 15:14:11 -0700 | [diff] [blame^] | 312 | log_err_status(status, "ERROR: in creation of rule based collator: %s\n", myErrorName(status)); |
Jean-Baptiste Queru | b13da9d | 2009-07-17 17:53:22 -0700 | [diff] [blame] | 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)){ |
Jean-Baptiste Queru | 6d5deb1 | 2009-07-20 15:14:11 -0700 | [diff] [blame^] | 331 | log_err_status(status, "ERROR: in creation of rule based collator: %s\n", myErrorName(status)); |
Jean-Baptiste Queru | b13da9d | 2009-07-17 17:53:22 -0700 | [diff] [blame] | 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 */ |