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