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