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