~ubuntu-branches/ubuntu/gutsy/icu/gutsy

« back to all changes in this revision

Viewing changes to source/test/cintltst/usrchdat.c

  • Committer: Package Import Robot
  • Author(s): Jay Berkenbilt
  • Date: 2005-11-19 11:29:31 UTC
  • mfrom: (1.1.2)
  • Revision ID: package-import@ubuntu.com-20051119112931-vcizkrp10tli4enw
Tags: 3.4-3
Explicitly build with g++ 3.4.  The current ICU fails its test suite
with 4.0 but not with 3.4.  Future versions should work properly with
4.0.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/********************************************************************
2
 
 * Copyright (c) 2001, 
3
 
 * International Business Machines Corporation and others. 
4
 
 * All Rights Reserved.
5
 
 ********************************************************************
6
 
 * File USRCHDAT.H
7
 
 * Modification History:
8
 
 * Name           date            Description            
9
 
 * synwee         July 31 2001    creation
10
 
 ********************************************************************/
11
 
 
12
 
#ifndef USRCHDAT_C
13
 
#define USRCHDAT_C
14
 
 
15
 
#include "unicode/ucol.h"
16
 
 
17
 
struct SearchData {
18
 
    const char               *text;
19
 
    const char               *pattern;
20
 
    const char               *collator;
21
 
          UCollationStrength  strength;
22
 
    const char               *breaker;
23
 
          int32_t         offset[32];
24
 
          uint32_t            size[32];
25
 
};
26
 
 
27
 
typedef struct SearchData SearchData;
28
 
 
29
 
static const char *TESTCOLLATORRULE = "& o,O ; p,P";
30
 
 
31
 
static const char *EXTRACOLLATIONRULE = " & ae ; \\u00e4 & AE ; \\u00c4 & oe ; \\u00f6 & OE ; \\u00d6 & ue ; \\u00fc & UE ; \\u00dc";
32
 
 
33
 
static const SearchData BASIC[] = {
34
 
    {"xxxxxxxxxxxxxxxxxxxx", "fisher", NULL, UCOL_TERTIARY, NULL, {-1}, {0}},
35
 
    {"silly spring string", "string", NULL, UCOL_TERTIARY, NULL, {13, -1}, 
36
 
    {6}},
37
 
    {"silly spring string string", "string", NULL, UCOL_TERTIARY, NULL,
38
 
    {13, 20, -1}, {6, 6}},
39
 
    {"silly string spring string", "string", NULL, UCOL_TERTIARY, NULL,
40
 
    {6, 20, -1}, {6, 6}},
41
 
    {"string spring string", "string", NULL, UCOL_TERTIARY, NULL, {0, 14, -1}, 
42
 
    {6, 6}},
43
 
    {"Scott Ganyo", "c", NULL, UCOL_TERTIARY, NULL, {1, -1}, {1}},
44
 
    {"Scott Ganyo", " ", NULL, UCOL_TERTIARY, NULL, {5, -1}, {1}},
45
 
    {"\\u0300\\u0325", "\\u0300", NULL, UCOL_TERTIARY, NULL, {-1}, {0}},
46
 
    {"a\\u0300\\u0325", "\\u0300", NULL, UCOL_TERTIARY, NULL, {-1}, {0}},
47
 
    {"a\\u0300\\u0325", "\\u0300\\u0325", NULL, UCOL_TERTIARY, NULL, {1, -1}, 
48
 
    {2}},
49
 
    {"a\\u0300b", "\\u0300", NULL, UCOL_TERTIARY, NULL, {1, -1}, {1}},
50
 
    {NULL, NULL, NULL, UCOL_TERTIARY, NULL, {-1}, {0}}
51
 
};
52
 
 
53
 
static const SearchData BREAKITERATOREXACT[] = {
54
 
    {"foxy fox", "fox", NULL, UCOL_TERTIARY, "characterbreaker", {0, 5, -1}, 
55
 
    {3, 3}},
56
 
    {"foxy fox", "fox", NULL, UCOL_TERTIARY, "wordbreaker", {5, -1}, {3}},
57
 
    {"This is a toe T\\u00F6ne", "toe", "de", UCOL_PRIMARY, 
58
 
    "characterbreaker", {10, 14, -1}, {3, 2}},
59
 
    {"This is a toe T\\u00F6ne", "toe", "de", UCOL_PRIMARY, "wordbreaker", 
60
 
    {10, -1}, {3}},
61
 
    {"Channel, another channel, more channels, and one last Channel",
62
 
    "Channel", "es", UCOL_TERTIARY, "wordbreaker", {0, 54, -1}, {7, 7}},
63
 
    /* jitterbug 1745 */
64
 
    {"testing that \\u00e9 does not match e", "e", NULL, UCOL_TERTIARY, 
65
 
     "characterbreaker", {1, 17, 30, -1}, {1, 1, 1}},
66
 
    {"testing that string ab\\u00e9cd does not match e", "e", NULL, 
67
 
     UCOL_TERTIARY, "characterbreaker", {1, 28, 41, -1}, {1, 1, 1}},
68
 
    {NULL, NULL, NULL, UCOL_TERTIARY, NULL, {-1}, {0}}
69
 
};
70
 
 
71
 
static const SearchData STRENGTH[] = {
72
 
    /*012345678901234567890123456789012345678901234567890123456789*/
73
 
    {"The quick brown fox jumps over the lazy foxes", "fox", "en", 
74
 
        UCOL_PRIMARY, NULL, {16, 40, -1}, {3, 3}},
75
 
    {"The quick brown fox jumps over the lazy foxes", "fox", "en", 
76
 
    UCOL_PRIMARY, "wordbreaker", {16, -1}, {3}},
77
 
    {"blackbirds Pat p\\u00E9ch\\u00E9 p\\u00EAche p\\u00E9cher p\\u00EAcher Tod T\\u00F6ne black Tofu blackbirds Ton PAT toehold blackbird black-bird pat toe big Toe",
78
 
    "peche", "fr", UCOL_PRIMARY, NULL, {15, 21, 27, 34, -1}, {5, 5, 5, 5}},
79
 
    {"This is a toe T\\u00F6ne", "toe", "de", UCOL_PRIMARY, NULL, 
80
 
    {10, 14, -1}, {3, 2}},
81
 
    {"A channel, another CHANNEL, more Channels, and one last channel...",
82
 
    "channel", "es", UCOL_PRIMARY, NULL, {2, 19, 33, 56, -1},
83
 
    {7, 7, 7, 7}},
84
 
    {NULL, NULL, NULL, UCOL_TERTIARY, NULL, {-1}, {0}}
85
 
};
86
 
 
87
 
static const SearchData VARIABLE[] = {
88
 
    /*012345678901234567890123456789012345678901234567890123456789*/
89
 
    {"blackbirds black blackbirds blackbird black-bird",
90
 
    "blackbird", NULL, UCOL_TERTIARY, NULL, {0, 17, 28, 38, -1}, 
91
 
    {9, 9, 9, 10}},
92
 
    /* to see that it doesn't go into an infinite loop if the start of text
93
 
    is a ignorable character */
94
 
    {" on", "go", NULL, UCOL_TERTIARY, NULL, {-1}, {0}},
95
 
    {"abcdefghijklmnopqrstuvwxyz", "   ", NULL, UCOL_PRIMARY, NULL, 
96
 
    {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
97
 
    20, 21, 22, 23, 24, 25, -1}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
98
 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
99
 
    /* testing tightest match */ 
100
 
    {" abc  a bc   ab c    a  bc     ab  c", "abc", NULL, UCOL_QUATERNARY, 
101
 
    NULL, {1, -1}, {3}},
102
 
    /*012345678901234567890123456789012345678901234567890123456789 */
103
 
    {" abc  a bc   ab c    a  bc     ab  c", "abc", NULL, UCOL_SECONDARY, 
104
 
    NULL, {1, 6, 13, 21, 31, -1}, {3, 4, 4, 5, 5}},
105
 
    /* totally ignorable text */
106
 
    {"           ---------------", "abc", NULL, UCOL_SECONDARY, 
107
 
    NULL, {-1}, {0}},
108
 
    {NULL, NULL, NULL, UCOL_TERTIARY, NULL, {-1}, {0}}
109
 
};
110
 
 
111
 
static const SearchData NORMEXACT[] = {
112
 
    {"a\\u0300\\u0325", "\\u0325\\u0300", NULL, UCOL_TERTIARY, NULL, {1, -1}, 
113
 
    {2}},
114
 
    {NULL, NULL, NULL, UCOL_TERTIARY, NULL, {-1}, {0}}
115
 
};
116
 
 
117
 
static const SearchData NONNORMEXACT[] = {
118
 
    {"a\\u0300\\u0325", "\\u0325\\u0300", NULL, UCOL_TERTIARY, NULL, {-1}, 
119
 
    {0}},
120
 
    {NULL, NULL, NULL, UCOL_TERTIARY, NULL, {-1}, {0}}
121
 
};
122
 
 
123
 
static const SearchData OVERLAP[] = {
124
 
    {"abababab", "abab", NULL, UCOL_TERTIARY, NULL, {0, 2, 4, -1}, 
125
 
    {4, 4, 4}},
126
 
    {NULL, NULL, NULL, UCOL_TERTIARY, NULL, {-1}, {0}}
127
 
};
128
 
 
129
 
static const SearchData NONOVERLAP[] = {
130
 
    {"abababab", "abab", NULL, UCOL_TERTIARY, NULL, {0, 4, -1}, {4, 4}},
131
 
    {NULL, NULL, NULL, UCOL_TERTIARY, NULL, {-1}, {0}}
132
 
};
133
 
 
134
 
static const SearchData COLLATOR[] = {
135
 
    /* english */
136
 
    {"fox fpx", "fox", NULL, UCOL_TERTIARY, NULL, {0, -1}, {3}}, 
137
 
    /* tailored */
138
 
    {"fox fpx", "fox", NULL, UCOL_PRIMARY, NULL, {0, 4, -1}, {3, 3}}, 
139
 
    {NULL, NULL, NULL, UCOL_TERTIARY, NULL, {-1}, {0}}
140
 
};
141
 
 
142
 
static const SearchData PATTERN[] = {
143
 
    {"The quick brown fox jumps over the lazy foxes", "the", NULL, 
144
 
        UCOL_PRIMARY, NULL, {0, 31, -1}, {3, 3}},
145
 
    {"The quick brown fox jumps over the lazy foxes", "fox", NULL, 
146
 
        UCOL_PRIMARY, NULL, {16, 40, -1}, {3, 3}},
147
 
    {NULL, NULL, NULL, UCOL_TERTIARY, NULL, {-1}, {0}}
148
 
};
149
 
 
150
 
static const SearchData TEXT[] = {
151
 
    {"the foxy brown fox", "fox", NULL, UCOL_TERTIARY, NULL, {4, 15, -1}, 
152
 
    {3, 3}},
153
 
    {"the quick brown fox", "fox", NULL, UCOL_TERTIARY, NULL, {16, -1},
154
 
    {3}},
155
 
    {NULL, NULL, NULL, UCOL_TERTIARY, NULL, {-1}, {0}}
156
 
};
157
 
 
158
 
static const SearchData COMPOSITEBOUNDARIES[] = {
159
 
    {"\\u00C0", "A", NULL, UCOL_TERTIARY, NULL, {0, -1}, {1}},
160
 
    {"A\\u00C0C", "A", NULL, UCOL_TERTIARY, NULL, {0, 1, -1}, {1, 1}},
161
 
    {"\\u00C0A", "A", NULL, UCOL_TERTIARY, NULL, {0, 1, -1}, {1, 1}},
162
 
    {"B\\u00C0", "A", NULL, UCOL_TERTIARY, NULL, {1, -1}, {1}},
163
 
    {"\\u00C0B", "A", NULL, UCOL_TERTIARY, NULL, {0, -1}, {1}},
164
 
    {"\\u00C0", "\\u0300", NULL, UCOL_TERTIARY, NULL, {0, -1}, {1}},
165
 
    {"\\u0300\\u00C0", "\\u0300", NULL, UCOL_TERTIARY, NULL, {0, 1, -1}, 
166
 
    {1, 1}},
167
 
    {"\\u00C0\\u0300", "\\u0300", NULL, UCOL_TERTIARY, NULL, {-1}, {0}},
168
 
    /* A + 030A + 0301 */
169
 
    {"\\u01FA", "\\u01FA", NULL, UCOL_TERTIARY, NULL, {0, -1}, {1}},
170
 
    {"\\u01FA", "\\u030A", NULL, UCOL_TERTIARY, NULL, {-1}, {0}},
171
 
    {"\\u01FA", "A\\u030A", NULL, UCOL_TERTIARY, NULL, {-1}, {0}},
172
 
    {"\\u01FA", "\\u030AA", NULL, UCOL_TERTIARY, NULL, {-1}, {0}},
173
 
    {"\\u01FA", "\\u0301", NULL, UCOL_TERTIARY, NULL, {-1}, {0}},
174
 
    {"\\u01FA", "A\\u0301", NULL, UCOL_TERTIARY, NULL, {-1}, {0}},
175
 
    {"\\u01FA", "\\u0301A", NULL, UCOL_TERTIARY, NULL, {-1}, {0}},
176
 
    {"\\u01FA", "\\u030A\\u0301", NULL, UCOL_TERTIARY, NULL, {0, -1}, {1}},
177
 
    {"A\\u01FA", "A\\u030A", NULL, UCOL_TERTIARY, NULL, {-1}, {0}},
178
 
    {"\\u01FAA", "\\u0301A", NULL, UCOL_TERTIARY, NULL, {-1}, {0}},
179
 
    {"\\u0F73", "\\u0F73", NULL, UCOL_TERTIARY, NULL, {0, -1}, {1}},
180
 
    {"\\u0F73", "\\u0F71", NULL, UCOL_TERTIARY, NULL, {-1}, {0}},
181
 
    {"\\u0F73", "\\u0F72", NULL, UCOL_TERTIARY, NULL, {-1}, {0}},
182
 
    {"\\u0F73", "\\u0F71\\u0F72", NULL, UCOL_TERTIARY, NULL, {0, -1}, {1}},
183
 
    {"A\\u0F73", "A\\u0F71", NULL, UCOL_TERTIARY, NULL, {-1}, {0}},
184
 
    {"\\u0F73A", "\\u0F72A", NULL, UCOL_TERTIARY, NULL, {-1}, {0}},
185
 
    {NULL, NULL, NULL, UCOL_TERTIARY, NULL, {-1}, {0}}
186
 
};
187
 
 
188
 
static const SearchData MATCH[] = {
189
 
    {"a busy bee is a very busy beeee", "bee", NULL, UCOL_TERTIARY, NULL, 
190
 
    {7, 26, -1}, {3, 3}},
191
 
    /* 012345678901234567890123456789012345678901234567890 */
192
 
    {"a busy bee is a very busy beeee with no bee life", "bee", NULL, 
193
 
    UCOL_TERTIARY, NULL, {7, 26, 40, -1}, {3, 3, 3}},
194
 
    {NULL, NULL, NULL, UCOL_TERTIARY, NULL, {-1}, {0}}
195
 
};
196
 
 
197
 
static const SearchData SUPPLEMENTARY[] = {
198
 
    /* 012345678901234567890123456789012345678901234567890012345678901234567890123456789012345678901234567890012345678901234567890123456789 */
199
 
    {"abc \\uD800\\uDC00 \\uD800\\uDC01 \\uD801\\uDC00 \\uD800\\uDC00abc abc\\uD800\\uDC00 \\uD800\\uD800\\uDC00 \\uD800\\uDC00\\uDC00", 
200
 
     "\\uD800\\uDC00", NULL, UCOL_TERTIARY, NULL, {4, 13, 22, 26, 29, -1}, 
201
 
    {2, 2, 2, 2, 2}},
202
 
    {NULL, NULL, NULL, UCOL_TERTIARY, NULL, {-1}, {0}}
203
 
};
204
 
 
205
 
static const char *CONTRACTIONRULE = 
206
 
    "&z = ab/c < AB < X\\u0300 < ABC < X\\u0300\\u0315";
207
 
 
208
 
static const SearchData CONTRACTION[] = {
209
 
    /* common discontiguous */
210
 
    {"A\\u0300\\u0315", "\\u0300", NULL, UCOL_TERTIARY, NULL, {-1}, {0}},
211
 
    {"A\\u0300\\u0315", "\\u0300\\u0315", NULL, UCOL_TERTIARY, NULL, {1, -1}, 
212
 
    {2}},
213
 
    /* contraction prefix */
214
 
    {"AB\\u0315C", "A", NULL, UCOL_TERTIARY, NULL, {-1}, {0}},
215
 
    {"AB\\u0315C", "AB", NULL, UCOL_TERTIARY, NULL, {0, -1}, {2}},
216
 
    {"AB\\u0315C", "\\u0315", NULL, UCOL_TERTIARY, NULL, {2, -1}, {1}},
217
 
    /* discontiguous problem here for backwards iteration. 
218
 
    accents not found because discontiguous stores all information */
219
 
    {"X\\u0300\\u0319\\u0315", "\\u0319", NULL, UCOL_TERTIARY, NULL, {-1}, 
220
 
    {0}},
221
 
     /* ends not with a contraction character */
222
 
    {"X\\u0315\\u0300D", "\\u0300\\u0315", NULL, UCOL_TERTIARY, NULL, {-1}, 
223
 
    {0}},
224
 
    {"X\\u0315\\u0300D", "X\\u0300\\u0315", NULL, UCOL_TERTIARY, NULL, 
225
 
    {0, -1}, {3}},
226
 
    {"X\\u0300\\u031A\\u0315D", "X\\u0300", NULL, UCOL_TERTIARY, NULL, {-1}, 
227
 
    {0}},
228
 
    /* blocked discontiguous */
229
 
    {"X\\u0300\\u031A\\u0315D", "\\u031A\\u0315D", NULL, UCOL_TERTIARY, NULL, 
230
 
    {-1}, {0}},
231
 
    {"ab", "z", NULL, UCOL_TERTIARY, NULL, {0, -1}, {2}},
232
 
    {NULL, NULL, NULL, UCOL_TERTIARY, NULL, {-1}, {0}}
233
 
};
234
 
 
235
 
static const char *IGNORABLERULE = "&a = \\u0300";
236
 
 
237
 
static const SearchData IGNORABLE[] = {
238
 
    {"\\u0315\\u0300 \\u0315\\u0300\\u0315 ", "\\u0300", NULL, UCOL_PRIMARY, NULL, 
239
 
    {0, 3, -1}, {2, 3}},
240
 
    {NULL, NULL, NULL, UCOL_TERTIARY, NULL, {-1}, {0}}
241
 
};
242
 
 
243
 
static const SearchData BASICCANONICAL[] = {
244
 
    {"xxxxxxxxxxxxxxxxxxxx", "fisher", NULL, UCOL_TERTIARY, NULL, {-1}, {0}},
245
 
    {"silly spring string", "string", NULL, UCOL_TERTIARY, NULL, {13, -1}, 
246
 
    {6}},
247
 
    {"silly spring string string", "string", NULL, UCOL_TERTIARY, NULL,
248
 
    {13, 20, -1}, {6, 6}},
249
 
    {"silly string spring string", "string", NULL, UCOL_TERTIARY, NULL,
250
 
    {6, 20, -1}, {6, 6}},
251
 
    {"string spring string", "string", NULL, UCOL_TERTIARY, NULL, {0, 14, -1}, 
252
 
    {6, 6}},
253
 
    {"Scott Ganyo", "c", NULL, UCOL_TERTIARY, NULL, {1, -1}, {1}},
254
 
    {"Scott Ganyo", " ", NULL, UCOL_TERTIARY, NULL, {5, -1}, {1}},
255
 
    {"\\u0300\\u0325", "\\u0300", NULL, UCOL_TERTIARY, NULL, {0, -1}, {2}},
256
 
    {"a\\u0300\\u0325", "\\u0300", NULL, UCOL_TERTIARY, NULL, {1, -1}, {2}},
257
 
    {"a\\u0300\\u0325", "\\u0300\\u0325", NULL, UCOL_TERTIARY, NULL, {1, -1}, 
258
 
    {2}},
259
 
    {"a\\u0300b", "\\u0300", NULL, UCOL_TERTIARY, NULL, {1, -1}, {1}},
260
 
    {"a\\u0300\\u0325b", "\\u0300b", NULL, UCOL_TERTIARY, NULL, {1, -1}, {3}},
261
 
    {"\\u0325\\u0300A\\u0325\\u0300", "\\u0300A\\u0300", NULL, UCOL_TERTIARY, 
262
 
    NULL, {0, -1}, {5}},
263
 
    {"\\u0325\\u0300A\\u0325\\u0300", "\\u0325A\\u0325", NULL, UCOL_TERTIARY, 
264
 
    NULL, {0, -1}, {5}},
265
 
    {"a\\u0300\\u0325b\\u0300\\u0325c \\u0325b\\u0300 \\u0300b\\u0325", 
266
 
    "\\u0300b\\u0325", NULL, UCOL_TERTIARY, NULL, {1, 12, -1}, {5, 3}},
267
 
    {NULL, NULL, NULL, UCOL_TERTIARY, NULL, {-1}, {0}}
268
 
};
269
 
 
270
 
static const SearchData NORMCANONICAL[] = {
271
 
    {"\\u0300\\u0325", "\\u0300", NULL, UCOL_TERTIARY, NULL, {0, -1}, {2}},
272
 
    {"\\u0300\\u0325", "\\u0325", NULL, UCOL_TERTIARY, NULL, {0, -1}, {2}},
273
 
    {"a\\u0300\\u0325", "\\u0325\\u0300", NULL, UCOL_TERTIARY, NULL, {1, -1}, 
274
 
    {2}},
275
 
    {"a\\u0300\\u0325", "\\u0300\\u0325", NULL, UCOL_TERTIARY, NULL, {1, -1}, 
276
 
    {2}},
277
 
    {"a\\u0300\\u0325", "\\u0325", NULL, UCOL_TERTIARY, NULL, {1, -1}, {2}},
278
 
    {"a\\u0300\\u0325", "\\u0300", NULL, UCOL_TERTIARY, NULL, {1, -1}, {2}},
279
 
    {NULL, NULL, NULL, UCOL_TERTIARY, NULL, {-1}, {0}}
280
 
};
281
 
 
282
 
static const SearchData BREAKITERATORCANONICAL[] = {
283
 
    {"foxy fox", "fox", NULL, UCOL_TERTIARY, "characterbreaker", {0, 5, -1}, 
284
 
    {3, 3}},
285
 
    {"foxy fox", "fox", NULL, UCOL_TERTIARY, "wordbreaker", {5, -1}, {3}},
286
 
    {"This is a toe T\\u00F6ne", "toe", "de", UCOL_PRIMARY, 
287
 
    "characterbreaker", {10, 14, -1}, {3, 2}},
288
 
    {"This is a toe T\\u00F6ne", "toe", "de", UCOL_PRIMARY, "wordbreaker", 
289
 
    {10, -1}, {3}},
290
 
    {"Channel, another channel, more channels, and one last Channel",
291
 
    "Channel", "es", UCOL_TERTIARY, "wordbreaker", {0, 54, -1}, {7, 7}},
292
 
    /* jitterbug 1745 */
293
 
    {"testing that \\u00e9 does not match e", "e", NULL, UCOL_TERTIARY, 
294
 
     "characterbreaker", {1, 17, 30, -1}, {1, 1, 1}},
295
 
    {"testing that string ab\\u00e9cd does not match e", "e", NULL, 
296
 
     UCOL_TERTIARY, "characterbreaker", {1, 28, 41, -1}, {1, 1, 1}},
297
 
    {NULL, NULL, NULL, UCOL_TERTIARY, NULL, {-1}, {0}}
298
 
};
299
 
 
300
 
static const SearchData STRENGTHCANONICAL[] = {
301
 
    /*012345678901234567890123456789012345678901234567890123456789 */
302
 
    {"The quick brown fox jumps over the lazy foxes", "fox", "en", 
303
 
        UCOL_PRIMARY, NULL, {16, 40, -1}, {3, 3}},
304
 
    {"The quick brown fox jumps over the lazy foxes", "fox", "en", 
305
 
    UCOL_PRIMARY, "wordbreaker", {16, -1}, {3}},
306
 
    {"blackbirds Pat p\\u00E9ch\\u00E9 p\\u00EAche p\\u00E9cher p\\u00EAcher Tod T\\u00F6ne black Tofu blackbirds Ton PAT toehold blackbird black-bird pat toe big Toe",
307
 
    "peche", "fr", UCOL_PRIMARY, NULL, {15, 21, 27, 34, -1}, {5, 5, 5, 5}},
308
 
    {"This is a toe T\\u00F6ne", "toe", "de", UCOL_PRIMARY, NULL, 
309
 
    {10, 14, -1}, {3, 2}},
310
 
    {"A channel, another CHANNEL, more Channels, and one last channel...",
311
 
    "channel", "es", UCOL_PRIMARY, NULL, {2, 19, 33, 56, -1},
312
 
    {7, 7, 7, 7}},
313
 
    {NULL, NULL, NULL, UCOL_TERTIARY, NULL, {-1}, {0}}
314
 
};
315
 
 
316
 
static const SearchData VARIABLECANONICAL[] = {
317
 
    /*012345678901234567890123456789012345678901234567890123456789 */
318
 
    {"blackbirds black blackbirds blackbird black-bird",
319
 
    "blackbird", NULL, UCOL_TERTIARY, NULL, {0, 17, 28, 38, -1}, 
320
 
    {9, 9, 9, 10}},
321
 
    /* to see that it doesn't go into an infinite loop if the start of text 
322
 
    is a ignorable character */
323
 
    {" on", "go", NULL, UCOL_TERTIARY, NULL, {-1}, {0}},
324
 
    {"abcdefghijklmnopqrstuvwxyz", "   ", NULL, UCOL_PRIMARY, NULL, 
325
 
    {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
326
 
    20, 21, 22, 23, 24, 25, -1}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
327
 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
328
 
    /* testing tightest match */
329
 
    {" abc  a bc   ab c    a  bc     ab  c", "abc", NULL, UCOL_QUATERNARY, 
330
 
    NULL, {1, -1}, {3}},
331
 
    /*012345678901234567890123456789012345678901234567890123456789 */
332
 
    {" abc  a bc   ab c    a  bc     ab  c", "abc", NULL, UCOL_SECONDARY, 
333
 
    NULL, {1, 6, 13, 21, 31, -1}, {3, 4, 4, 5, 5}},
334
 
    /* totally ignorable text */
335
 
    {"           ---------------", "abc", NULL, UCOL_SECONDARY, 
336
 
    NULL, {-1}, {0}},
337
 
    {NULL, NULL, NULL, UCOL_TERTIARY, NULL, {-1}, {0}}
338
 
};
339
 
 
340
 
static const SearchData OVERLAPCANONICAL[] = {
341
 
    {"abababab", "abab", NULL, UCOL_TERTIARY, NULL, {0, 2, 4, -1}, 
342
 
    {4, 4, 4}},
343
 
    {NULL, NULL, NULL, UCOL_TERTIARY, NULL, {-1}, {0}}
344
 
};
345
 
 
346
 
static const SearchData NONOVERLAPCANONICAL[] = {
347
 
    {"abababab", "abab", NULL, UCOL_TERTIARY, NULL, {0, 4, -1}, {4, 4}},
348
 
    {NULL, NULL, NULL, UCOL_TERTIARY, NULL, {-1}, {0}}
349
 
};
350
 
 
351
 
static const SearchData COLLATORCANONICAL[] = {
352
 
    /* english */
353
 
    {"fox fpx", "fox", NULL, UCOL_TERTIARY, NULL, {0, -1}, {3}}, 
354
 
    /* tailored */
355
 
    {"fox fpx", "fox", NULL, UCOL_PRIMARY, NULL, {0, 4, -1}, {3, 3}}, 
356
 
    {NULL, NULL, NULL, UCOL_TERTIARY, NULL, {-1}, {0}}
357
 
};
358
 
 
359
 
static const SearchData PATTERNCANONICAL[] = {
360
 
    {"The quick brown fox jumps over the lazy foxes", "the", NULL, 
361
 
        UCOL_PRIMARY, NULL, {0, 31, -1}, {3, 3}},
362
 
    {"The quick brown fox jumps over the lazy foxes", "fox", NULL, 
363
 
        UCOL_PRIMARY, NULL, {16, 40, -1}, {3, 3}},
364
 
    {NULL, NULL, NULL, UCOL_TERTIARY, NULL, {-1}, {0}}
365
 
};
366
 
 
367
 
static const SearchData TEXTCANONICAL[] = {
368
 
    {"the foxy brown fox", "fox", NULL, UCOL_TERTIARY, NULL, {4, 15, -1}, 
369
 
    {3, 3}},
370
 
    {"the quick brown fox", "fox", NULL, UCOL_TERTIARY, NULL, {16, -1},
371
 
    {3}},
372
 
    {NULL, NULL, NULL, UCOL_TERTIARY, NULL, {-1}, {0}}
373
 
};
374
 
 
375
 
static const SearchData COMPOSITEBOUNDARIESCANONICAL[] = {
376
 
    {"\\u00C0", "A", NULL, UCOL_TERTIARY, NULL, {0, -1}, {1}},
377
 
    {"A\\u00C0C", "A", NULL, UCOL_TERTIARY, NULL, {0, 1, -1}, {1, 1}},
378
 
    {"\\u00C0A", "A", NULL, UCOL_TERTIARY, NULL, {0, 1, -1}, {1, 1}},
379
 
    {"B\\u00C0", "A", NULL, UCOL_TERTIARY, NULL, {1, -1}, {1}},
380
 
    {"\\u00C0B", "A", NULL, UCOL_TERTIARY, NULL, {0, -1}, {1}},
381
 
    {"\\u00C0", "\\u0300", NULL, UCOL_TERTIARY, NULL, {0, -1}, {1}},
382
 
    {"\\u0300\\u00C0", "\\u0300", NULL, UCOL_TERTIARY, NULL, {0, 1, -1}, 
383
 
    {1, 1}},
384
 
    /* \\u0300 blocked by \\u0300 */
385
 
    {"\\u00C0\\u0300", "\\u0300", NULL, UCOL_TERTIARY, NULL, {0, -1}, {2}},
386
 
    /* A + 030A + 0301 */
387
 
    {"\\u01FA", "\\u01FA", NULL, UCOL_TERTIARY, NULL, {0, -1}, {1}},
388
 
    {"\\u01FA", "\\u030A", NULL, UCOL_TERTIARY, NULL, {0, -1}, {1}},
389
 
    {"\\u01FA", "A\\u030A", NULL, UCOL_TERTIARY, NULL, {0, -1}, {1}},
390
 
    {"\\u01FA", "\\u030AA", NULL, UCOL_TERTIARY, NULL, {-1}, {0}},
391
 
    {"\\u01FA", "\\u0301", NULL, UCOL_TERTIARY, NULL, {0, -1}, {1}},
392
 
    /* blocked accent */
393
 
    {"\\u01FA", "A\\u0301", NULL, UCOL_TERTIARY, NULL, {-1}, {0}},
394
 
    {"\\u01FA", "\\u0301A", NULL, UCOL_TERTIARY, NULL, {-1}, {0}},
395
 
    {"\\u01FA", "\\u030A\\u0301", NULL, UCOL_TERTIARY, NULL, {0, -1}, {1}},
396
 
    {"A\\u01FA", "A\\u030A", NULL, UCOL_TERTIARY, NULL, {1, -1}, {1}},
397
 
    {"\\u01FAA", "\\u0301A", NULL, UCOL_TERTIARY, NULL, {0, -1}, {2}},
398
 
    {"\\u0F73", "\\u0F73", NULL, UCOL_TERTIARY, NULL, {0, -1}, {1}},
399
 
    {"\\u0F73", "\\u0F71", NULL, UCOL_TERTIARY, NULL, {0, -1}, {1}},
400
 
    {"\\u0F73", "\\u0F72", NULL, UCOL_TERTIARY, NULL, {0, -1}, {1}},
401
 
    {"\\u0F73", "\\u0F71\\u0F72", NULL, UCOL_TERTIARY, NULL, {0, -1}, {1}},
402
 
    {"A\\u0F73", "A\\u0F71", NULL, UCOL_TERTIARY, NULL, {0, -1}, {2}},
403
 
    {"\\u0F73A", "\\u0F72A", NULL, UCOL_TERTIARY, NULL, {0, -1}, {2}},
404
 
    {"\\u01FA A\\u0301\\u030A A\\u030A\\u0301 A\\u030A \\u01FA", "A\\u030A", 
405
 
    NULL, UCOL_TERTIARY, NULL, {0, 6, 10, 13, -1}, {1, 3, 2, 1}},
406
 
    {NULL, NULL, NULL, UCOL_TERTIARY, NULL, {-1}, {0}}
407
 
};
408
 
 
409
 
static const SearchData MATCHCANONICAL[] = {
410
 
    {"a busy bee is a very busy beeee", "bee", NULL, UCOL_TERTIARY, NULL, 
411
 
    {7, 26, -1}, {3, 3}},
412
 
    /*012345678901234567890123456789012345678901234567890 */
413
 
    {"a busy bee is a very busy beeee with no bee life", "bee", NULL, 
414
 
    UCOL_TERTIARY, NULL, {7, 26, 40, -1}, {3, 3, 3}},
415
 
    {NULL, NULL, NULL, UCOL_TERTIARY, NULL, {-1}, {0}}
416
 
};
417
 
 
418
 
static const SearchData SUPPLEMENTARYCANONICAL[] = {
419
 
    /*012345678901234567890123456789012345678901234567890012345678901234567890123456789012345678901234567890012345678901234567890123456789 */
420
 
    {"abc \\uD800\\uDC00 \\uD800\\uDC01 \\uD801\\uDC00 \\uD800\\uDC00abc abc\\uD800\\uDC00 \\uD800\\uD800\\uDC00 \\uD800\\uDC00\\uDC00", 
421
 
     "\\uD800\\uDC00", NULL, UCOL_TERTIARY, NULL, {4, 13, 22, 26, 29, -1}, 
422
 
    {2, 2, 2, 2, 2}},
423
 
    {NULL, NULL, NULL, UCOL_TERTIARY, NULL, {-1}, {0}}
424
 
};
425
 
 
426
 
static const SearchData CONTRACTIONCANONICAL[] = {
427
 
    /* common discontiguous */
428
 
    {"A\\u0300\\u0315", "\\u0300", NULL, UCOL_TERTIARY, NULL, {1, -1}, {2}},
429
 
    {"A\\u0300\\u0315", "\\u0300\\u0315", NULL, UCOL_TERTIARY, NULL, {1, -1}, 
430
 
    {2}},
431
 
    /* contraction prefix */
432
 
    {"AB\\u0315C", "A", NULL, UCOL_TERTIARY, NULL, {-1}, {0}},
433
 
    {"AB\\u0315C", "AB", NULL, UCOL_TERTIARY, NULL, {0, -1}, {2}},
434
 
    {"AB\\u0315C", "\\u0315", NULL, UCOL_TERTIARY, NULL, {2, -1}, {1}},
435
 
    /* discontiguous problem here for backwards iteration. 
436
 
    forwards gives 0, 4 but backwards give 1, 3 */
437
 
    /* {"X\\u0300\\u0319\\u0315", "\\u0319", NULL, UCOL_TERTIARY, NULL, {0, -1}, 
438
 
    {4}}, */
439
 
    
440
 
     /* ends not with a contraction character */
441
 
    {"X\\u0315\\u0300D", "\\u0300\\u0315", NULL, UCOL_TERTIARY, NULL, {-1}, 
442
 
    {0}},
443
 
    {"X\\u0315\\u0300D", "X\\u0300\\u0315", NULL, UCOL_TERTIARY, NULL, 
444
 
    {0, -1}, {3}},
445
 
    {"X\\u0300\\u031A\\u0315D", "X\\u0300", NULL, UCOL_TERTIARY, NULL, 
446
 
    {0, -1}, {4}},
447
 
    /* blocked discontiguous */
448
 
    {"X\\u0300\\u031A\\u0315D", "\\u031A\\u0315D", NULL, UCOL_TERTIARY, NULL, 
449
 
    {1, -1}, {4}},
450
 
    {"ab", "z", NULL, UCOL_TERTIARY, NULL, {0, -1}, {2}},
451
 
    {NULL, NULL, NULL, UCOL_TERTIARY, NULL, {-1}, {0}}
452
 
};
453
 
 
454
 
#endif