]> git.saurik.com Git - apple/icu.git/blob - icuSources/test/cintltst/cbididat.c
ICU-531.30.tar.gz
[apple/icu.git] / icuSources / test / cintltst / cbididat.c
1 /********************************************************************
2 * COPYRIGHT:
3 * Copyright (c) 1997-2013, International Business Machines Corporation and
4 * others. All Rights Reserved.
5 ********************************************************************/
6 /* file name: cbididat.c
7 * encoding: US-ASCII
8 * tab size: 8 (not used)
9 * indentation:4
10 *
11 * created on: 1999sep22
12 * created by: Markus W. Scherer
13 */
14
15 #include "unicode/utypes.h"
16 #include "unicode/uchar.h"
17 #include "unicode/ubidi.h"
18 #include "cbiditst.h"
19
20 const char * const
21 dirPropNames[U_CHAR_DIRECTION_COUNT]={
22 "L", "R", "EN", "ES", "ET", "AN", "CS", "B", "S", "WS", "ON",
23 "LRE", "LRO", "AL", "RLE", "RLO", "PDF", "NSM", "BN",
24 "FSI", "LRI", "RLI", "PDI" /* new in Unicode 6.3/ICU 52 */
25 };
26
27 UChar
28 charFromDirProp[U_CHAR_DIRECTION_COUNT]={
29 /* L R EN ES ET AN CS B S WS ON */
30 0x61, 0x5d0, 0x30, 0x2f, 0x25, 0x660, 0x2c, 0xa, 0x9, 0x20, 0x26,
31 /* LRE LRO AL RLE RLO PDF NSM BN */
32 0x202a, 0x202d, 0x627, 0x202b, 0x202e, 0x202c, 0x308, 0x200c,
33 /* FSI LRI RLI PDI */
34 0x2068, 0x2066, 0x2067, 0x2069 /* new in Unicode 6.3/ICU 52 */
35 };
36
37 static const uint8_t
38 testText1[]={
39 L, L, WS, L, WS, EN, L, B
40 };
41
42 static const UBiDiLevel
43 testLevels1[]={
44 0, 0, 0, 0, 0, 0, 0, 0
45 };
46
47 static const uint8_t
48 testVisualMap1[]={
49 0, 1, 2, 3, 4, 5, 6, 7
50 };
51
52 static const uint8_t
53 testText2[]={
54 R, AL, WS, R, AL, WS, R
55 };
56
57 static const UBiDiLevel
58 testLevels2[]={
59 1, 1, 1, 1, 1, 1, 1
60 };
61
62 static const uint8_t
63 testVisualMap2[]={
64 6, 5, 4, 3, 2, 1, 0
65 };
66
67 static const uint8_t
68 testText3[]={
69 L, L, WS, EN, CS, WS, EN, CS, EN, WS, L, L
70 };
71
72 static const UBiDiLevel
73 testLevels3[]={
74 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
75 };
76
77 static const uint8_t
78 testVisualMap3[]={
79 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
80 };
81
82 static const uint8_t
83 testText4[]={
84 L, AL, AL, AL, L, AL, AL, L, WS, EN, CS, WS, EN, CS, EN, WS, L, L
85 };
86
87 static const UBiDiLevel
88 testLevels4[]={
89 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
90 };
91
92 static const uint8_t
93 testVisualMap4[]={
94 0, 3, 2, 1, 4, 6, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
95 };
96
97 static const uint8_t
98 testText5[]={
99 AL, R, AL, WS, EN, CS, WS, EN, CS, EN, WS, R, R, WS, L, L
100 };
101
102 static const UBiDiLevel
103 testLevels5[]={
104 1, 1, 1, 1, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2
105 };
106
107 static const uint8_t
108 testVisualMap5[]={
109 15, 14, 13, 12, 11, 10, 9, 6, 7, 8, 5, 4, 3, 2, 0, 1
110 };
111
112 static const uint8_t
113 testText6[]={
114 R, EN, NSM, ET
115 };
116
117 static const UBiDiLevel
118 testLevels6[]={
119 1, 2, 2, 2
120 };
121
122 static const uint8_t
123 testVisualMap6[]={
124 3, 0, 1, 2
125 };
126
127 #if 0
128 static const uint8_t
129 testText7[]={
130 /* empty */
131 };
132
133 static const UBiDiLevel
134 testLevels7[]={
135 };
136
137 static const uint8_t
138 testVisualMap7[]={
139 };
140
141 #endif
142
143 static const uint8_t
144 testText8[]={
145 RLE, WS, R, R, R, WS, PDF, WS, B
146 };
147
148 static const UBiDiLevel
149 testLevels8[]={
150 1, 1, 1, 1, 1, 1, 1, 1, 1
151 };
152
153 static const uint8_t
154 testVisualMap8[]={
155 8, 7, 6, 5, 4, 3, 2, 1, 0
156 };
157
158 static const uint8_t
159 testText9[]={
160 LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, /* 15 entries */
161 LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, /* 15 entries */
162 AN, RLO, NSM, LRE, PDF, RLE, ES, EN, ON /* 9 entries */
163 };
164
165 static const UBiDiLevel
166 testLevels9[]={
167 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, /* 15 entries */
168 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, /* 15 entries */
169 126, 125, 125, 125, 125, 125, 125, 125, 125 /* 9 entries */
170 };
171
172 static const uint8_t
173 testVisualMap9[]={
174 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, /* 15 entries */
175 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, /* 15 entries */
176 38, 7, 6, 5, 4, 3, 2, 1, 0 /* 9 entries */
177 };
178
179 static const uint8_t
180 testText10[]={
181 LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, /* 15 entries */
182 LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, /* 15 entries */
183 LRE, BN, CS, RLO, S, PDF, EN, LRO, AN, ES /* 10 entries */
184 };
185
186 static const UBiDiLevel
187 testLevels10[]={
188 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, /* 15 entries */
189 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, /* 15 entries */
190 124, 124, 124, 64, 64, 124, 124, 126, 126, 124 /* 10 entries */
191 };
192
193 static const uint8_t
194 testVisualMap10[]={
195 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, /* 15 entries */
196 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, /* 15 entries */
197 30, 31, 32, 33, 34, 35, 36, 37, 38, 39 /* 10 entries */
198 };
199
200 static const uint8_t
201 testText11[]={
202 S, WS, NSM, RLE, WS, L, L, L, WS, LRO, WS, R, R, R, WS, RLO, WS, L, L, L, /* 20 entries */
203 WS, LRE, WS, R, R, R, WS, PDF, WS, L, L, L, WS, PDF, WS, AL, AL, AL, WS, PDF, /* 20 entries */
204 WS, L, L, L, WS, PDF, WS, L, L, L, WS, PDF, ON, PDF, BN, BN, ON, PDF /* 18 entries */
205 };
206
207 static const UBiDiLevel
208 testLevels11[]={
209 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, /* 20 entries */
210 3, 4, 4, 5, 5, 5, 4, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, /* 20 entries */
211 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /* 18 entries */
212 };
213
214 static const uint8_t
215 testVisualMap11[]={
216 0, 1, 2, 44, 43, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 31, 30, 29, 28, 27, /* 20 entries */
217 26, 20, 21, 24, 23, 22, 25, 19, 18, 17, 16, 15, 14, 32, 33, 34, 35, 36, 37, 38, /* 20 entries */
218 39, 40, 41, 42, 3, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 /* 18 entries */
219 };
220
221 static const uint8_t
222 testText12[]={
223 NSM, WS, L, L, L, L, L, L, L, WS, L, L, L, L, WS,
224 R, R, R, R, R, WS, L, L, L, L, L, L, L, WS, WS, AL,
225 AL, AL, AL, WS, EN, EN, ES, EN, EN, CS, S, EN, EN, CS, WS,
226 EN, EN, WS, AL, AL, AL, AL, AL, B, L, L, L, L, L, L,
227 L, L, WS, AN, AN, CS, AN, AN, WS
228 };
229
230 static const UBiDiLevel
231 testLevels12[]={
232 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 1, 0, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0
233 };
234
235 static const uint8_t
236 testVisualMap12[]={
237 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 19, 18, 17, 16, 15, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 40, 39, 38, 37, 36, 34, 35, 33, 31, 32, 30, 41, 52, 53, 51, 50, 48, 49, 47, 46, 45, 44, 43, 42, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69
238 };
239
240 static const UBiDiLevel
241 testLevels13[]={
242 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 1, 0, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0
243 };
244
245 static const uint8_t
246 testVisualMap13[]={
247 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 19, 18, 17, 16, 15, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 40, 39, 38, 37, 36, 34, 35, 33, 31, 32, 30, 41, 52, 53, 51, 50, 48, 49, 47, 46, 45, 44, 43, 42, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69
248 };
249
250 static const UBiDiLevel
251 testLevels14[]={
252 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 3, 4, 4, 3, 2, 4, 4, 3, 3, 4, 4, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 2
253 };
254
255 static const uint8_t
256 testVisualMap14[]={
257 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 19, 18, 17, 16, 15, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 40, 39, 38, 37, 36, 34, 35, 33, 31, 32, 30, 41, 52, 53, 51, 50, 48, 49, 47, 46, 45, 44, 43, 42, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69
258 };
259
260 static const UBiDiLevel
261 testLevels15[]={
262 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 6, 6, 5, 6, 6, 5, 5, 6, 6, 5, 5, 6, 6, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 6, 6, 6, 6, 5
263 };
264
265 static const uint8_t
266 testVisualMap15[]={
267 69, 68, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 55, 54, 53, 52, 51, 50, 49, 42, 43, 44, 45, 46, 47, 48, 41, 40, 39, 38, 37, 36, 35, 33, 34, 32, 30, 31, 29, 28, 26, 27, 25, 24, 22, 23, 21, 20, 19, 18, 17, 16, 15, 7, 8, 9, 10, 11, 12, 13, 14, 6, 1, 2, 3, 4, 5, 0
268 };
269
270 static const UBiDiLevel
271 testLevels16[]={
272 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 1, 0, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0
273 };
274
275 static const uint8_t
276 testVisualMap16[]={
277 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 19, 18, 17, 16, 15, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 40, 39, 38, 37, 36, 34, 35, 33, 31, 32, 30, 41, 52, 53, 51, 50, 48, 49, 47, 46, 45, 44, 43, 42, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69
278 };
279
280 static const uint8_t
281 testText13[]={
282 ON, L, RLO, CS, R, WS, AN, AN, PDF, LRE, R, L, LRO, WS, BN, ON, S, LRE, LRO, B
283 };
284
285 static const UBiDiLevel
286 testLevels17[]={
287 0, 0, 1, 1, 1, 1, 1, 1, 3, 3, 3, 2, 4, 4, 4, 4, 0, 0, 0, 0
288 };
289
290 static const uint8_t
291 testVisualMap17[]={
292 0, 1, 15, 14, 13, 12, 11, 10, 4, 3, 2, 5, 6, 7, 8, 9, 16, 17, 18, 19
293 };
294
295 static const UBiDiLevel
296 testLevels18[]={
297 0, 0, 1, 1, 1, 0
298 };
299
300 static const uint8_t
301 testVisualMap18[]={
302 0, 1, 4, 3, 2, 5
303 };
304
305 static const uint8_t
306 testText14[]={
307 RLO, RLO, AL, AL, WS, EN, ES, ON, WS, S, S, PDF, LRO, WS, AL, ET, RLE, ON, EN, B
308 };
309
310 static const UBiDiLevel
311 testLevels19[]={
312 1
313 };
314
315 static const uint8_t
316 testVisualMap19[]={
317 0
318 };
319
320 static const uint8_t
321 testText15[]={
322 R, L, CS, L
323 };
324
325 static const UBiDiLevel
326 testLevels20[]={
327 2
328 };
329
330 static const uint8_t
331 testText16[]={
332 L, L, L, WS, L, L, L, WS, L, L, L
333 };
334
335 static const UBiDiLevel
336 testLevels21[]={
337 2, 2, 2, 2, 2, 2, 2, 1
338 };
339
340 static const uint8_t
341 testVisualMap20[]={
342 1, 2, 3, 4, 5, 6, 7, 0
343 };
344
345 static const uint8_t
346 testText17[]={
347 R, R, R, WS, R, R, R, WS, R, R, R
348 };
349
350 static const UBiDiLevel
351 testLevels22[]={
352 1, 1, 1, 1, 1, 1, 1, 0
353 };
354
355 static const uint8_t
356 testVisualMap21[]={
357 6, 5, 4, 3, 2, 1, 0, 7
358 };
359
360 static const uint8_t
361 testTextXX[]={
362 L
363 };
364
365 static const UBiDiLevel
366 testLevelsXX[]={
367 2
368 };
369
370 static const uint8_t
371 testVisualMapXX[]={
372 0
373 };
374
375 const BiDiTestData
376 tests[]={
377 {testText1, ARRAY_LENGTH(testText1), UBIDI_DEFAULT_LTR, -1, -1,
378 UBIDI_LTR, 0,
379 testLevels1, testVisualMap1},
380 {testText2, ARRAY_LENGTH(testText2), UBIDI_DEFAULT_LTR, -1, -1,
381 UBIDI_RTL, 1,
382 testLevels2, testVisualMap2},
383 {testText3, ARRAY_LENGTH(testText3), UBIDI_DEFAULT_LTR, -1, -1,
384 UBIDI_LTR, 0,
385 testLevels3, testVisualMap3},
386 {testText4, ARRAY_LENGTH(testText4), UBIDI_DEFAULT_LTR, -1, -1,
387 UBIDI_MIXED, 0,
388 testLevels4, testVisualMap4},
389 {testText5, ARRAY_LENGTH(testText5), UBIDI_DEFAULT_LTR, -1, -1,
390 UBIDI_MIXED, 1,
391 testLevels5, testVisualMap5},
392 {testText6, ARRAY_LENGTH(testText6), UBIDI_DEFAULT_LTR, -1, -1,
393 UBIDI_MIXED, 1,
394 testLevels6, testVisualMap6},
395 {NULL, 0, UBIDI_DEFAULT_LTR, -1, -1,
396 UBIDI_LTR, 0,
397 NULL, NULL},
398 {testText8, ARRAY_LENGTH(testText8), UBIDI_DEFAULT_LTR, -1, -1,
399 UBIDI_RTL, 1,
400 testLevels8, testVisualMap8},
401 {testText9, ARRAY_LENGTH(testText9), 64, -1, -1,
402 UBIDI_MIXED, 64,
403 testLevels9, testVisualMap9},
404 {testText10, ARRAY_LENGTH(testText10), 64, -1, -1,
405 UBIDI_MIXED, 64,
406 testLevels10, testVisualMap10},
407 {testText11, ARRAY_LENGTH(testText11), UBIDI_DEFAULT_LTR, -1, -1,
408 UBIDI_MIXED, 0,
409 testLevels11, testVisualMap11},
410 {testText12, ARRAY_LENGTH(testText12), UBIDI_DEFAULT_LTR, -1, -1,
411 UBIDI_MIXED, 0,
412 testLevels12, testVisualMap12},
413 {testText12, ARRAY_LENGTH(testText12), UBIDI_DEFAULT_RTL, -1, -1,
414 UBIDI_MIXED, 0,
415 testLevels13, testVisualMap13},
416 {testText12, ARRAY_LENGTH(testText12), 2, -1, -1,
417 UBIDI_MIXED, 2,
418 testLevels14, testVisualMap14},
419 {testText12, ARRAY_LENGTH(testText12), 5, -1, -1,
420 UBIDI_MIXED, 5,
421 testLevels15, testVisualMap15},
422 {testText12, ARRAY_LENGTH(testText12), UBIDI_DEFAULT_LTR, -1, -1,
423 UBIDI_MIXED, 0,
424 testLevels16, testVisualMap16},
425 {testText13, ARRAY_LENGTH(testText13), UBIDI_DEFAULT_LTR, -1, -1,
426 UBIDI_MIXED, 0,
427 testLevels17, testVisualMap17},
428 {testText13, ARRAY_LENGTH(testText13), UBIDI_DEFAULT_LTR, 0, 6,
429 UBIDI_MIXED, 0,
430 testLevels18, testVisualMap18},
431 {testText14, ARRAY_LENGTH(testText14), UBIDI_DEFAULT_LTR, 13, 14,
432 UBIDI_RTL, 1,
433 testLevels19, testVisualMap19},
434 {testText15, ARRAY_LENGTH(testText15), UBIDI_DEFAULT_LTR, 2, 3,
435 UBIDI_LTR, 2,
436 testLevels20, testVisualMap19},
437 {testText16, ARRAY_LENGTH(testText16), UBIDI_RTL, 0, 8,
438 UBIDI_MIXED, 1,
439 testLevels21, testVisualMap20},
440 {testText17, ARRAY_LENGTH(testText17), UBIDI_LTR, 0, 8,
441 UBIDI_MIXED, 0,
442 testLevels22, testVisualMap21},
443 {testTextXX, ARRAY_LENGTH(testTextXX), UBIDI_RTL, -1, -1,
444 UBIDI_MIXED, 1, testLevelsXX, testVisualMapXX}
445 };
446
447 const int
448 bidiTestCount=ARRAY_LENGTH(tests);