Home | History | Annotate | Download | only in cintltst
      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);
    449