Imported Upstream version 58.2
[platform/upstream/icu.git] / source / test / cintltst / cbididat.c
1 // Copyright (C) 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:   US-ASCII
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);