OLD | NEW |
(Empty) | |
| 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' */, 0x030
8, 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)0x00
6E /* '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' */, 0x030
8, 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)0x00
6E /* '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 Colla
tionFrenchTest */ |
| 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, 0
x0300, 0}, |
| 227 {(UChar)0x0065 /* 'e' */, 0x0301, 0x0300, (UChar)0x0065 /* 'e' */, 0x0300, 0
}, |
| 228 {(UChar)0x0065 /* 'e' */, 0x0301, 0x0300, (UChar)0x0065 /* 'e' */, 0x0300, 0
x0301, 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, 0
x0300, 0}, |
| 237 {(UChar)0x0065 /* 'e' */, 0x0300, 0x0301, (UChar)0x0065 /* 'e' */, 0x0300, 0
}, |
| 238 {(UChar)0x0065 /* 'e' */, 0x0300, 0x0301, (UChar)0x0065 /* 'e' */, 0x0300, 0
x0301, 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 */ |
OLD | NEW |