1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/********************************************************************
2fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * Copyright (c) 1997-2014, International Business Machines
3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Corporation and others. All Rights Reserved.
4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************/
5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <string.h>
7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h"
8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uscript.h"
9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uchar.h"
10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cintltst.h"
11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cucdapi.h"
12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
13c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof(array[0]))
14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestUScriptCodeAPI(){
16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int i =0;
17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int numErrors =0;
18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* testNames[]={
20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /* test locale */
21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "en", "en_US", "sr", "ta" , "te_IN",
22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "hi", "he", "ar",
23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /* test abbr */
24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "Hani", "Hang","Hebr","Hira",
25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "Knda","Kana","Khmr","Lao",
26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "Latn",/*"Latf","Latg",*/
27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "Mlym", "Mong",
28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /* test names */
30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "CYRILLIC","DESERET","DEVANAGARI","ETHIOPIC","GEORGIAN",
31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "GOTHIC",  "GREEK",  "GUJARATI", "COMMON", "INHERITED",
32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /* test lower case names */
33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "malayalam", "mongolian", "myanmar", "ogham", "old-italic",
34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "oriya",     "runic",     "sinhala", "syriac","tamil",
35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "telugu",    "thaana",    "thai",    "tibetan",
36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /* test the bounds*/
37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "tagb", "arabic",
38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /* test bogus */
39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "asfdasd", "5464", "12235",
40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /* test the last index */
41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "zyyy", "YI",
42fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        NULL
43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        };
44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UScriptCode expected[] ={
45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            /* locales should return */
46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            USCRIPT_LATIN, USCRIPT_LATIN, USCRIPT_CYRILLIC, USCRIPT_TAMIL, USCRIPT_TELUGU,
47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            USCRIPT_DEVANAGARI, USCRIPT_HEBREW, USCRIPT_ARABIC,
48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            /* abbr should return */
49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            USCRIPT_HAN, USCRIPT_HANGUL, USCRIPT_HEBREW, USCRIPT_HIRAGANA,
50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            USCRIPT_KANNADA, USCRIPT_KATAKANA, USCRIPT_KHMER, USCRIPT_LAO,
51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            USCRIPT_LATIN,/* USCRIPT_LATIN, USCRIPT_LATIN,*/
52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            USCRIPT_MALAYALAM, USCRIPT_MONGOLIAN,
53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            /* names should return */
54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            USCRIPT_CYRILLIC, USCRIPT_DESERET, USCRIPT_DEVANAGARI, USCRIPT_ETHIOPIC, USCRIPT_GEORGIAN,
55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            USCRIPT_GOTHIC, USCRIPT_GREEK, USCRIPT_GUJARATI, USCRIPT_COMMON, USCRIPT_INHERITED,
56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            /* lower case names should return */
57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            USCRIPT_MALAYALAM, USCRIPT_MONGOLIAN, USCRIPT_MYANMAR, USCRIPT_OGHAM, USCRIPT_OLD_ITALIC,
58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            USCRIPT_ORIYA, USCRIPT_RUNIC, USCRIPT_SINHALA, USCRIPT_SYRIAC, USCRIPT_TAMIL,
59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            USCRIPT_TELUGU, USCRIPT_THAANA, USCRIPT_THAI, USCRIPT_TIBETAN,
60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            /* bounds */
61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            USCRIPT_TAGBANWA, USCRIPT_ARABIC,
62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            /* bogus names should return invalid code */
63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            USCRIPT_INVALID_CODE, USCRIPT_INVALID_CODE, USCRIPT_INVALID_CODE,
64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            USCRIPT_COMMON, USCRIPT_YI,
65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        };
66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UErrorCode err = U_ZERO_ERROR;
68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const int32_t capacity = 10;
70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
71fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        for( ; testNames[i]!=NULL; i++){
72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UScriptCode script[10]={USCRIPT_INVALID_CODE};
73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            uscript_getCode(testNames[i],script,capacity, &err);
74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if( script[0] != expected[i]){
756d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru                   log_data_err("Error getting script code Got: %i  Expected: %i for name %s (Error code does not propagate if data is not present. Are you missing data?)\n",
76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                       script[0],expected[i],testNames[i]);
77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                   numErrors++;
78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(numErrors >0 ){
81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            log_data_err("Errors uchar_getScriptCode() : %i \n",numErrors);
82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UErrorCode err = U_ZERO_ERROR;
87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t capacity=0;
88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t j;
89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UScriptCode jaCode[]={USCRIPT_KATAKANA, USCRIPT_HIRAGANA, USCRIPT_HAN };
90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UScriptCode script[10]={USCRIPT_INVALID_CODE};
91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t num = uscript_getCode("ja",script,capacity, &err);
92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /* preflight */
93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(err==U_BUFFER_OVERFLOW_ERROR){
94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            err = U_ZERO_ERROR;
95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            capacity = 10;
96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            num = uscript_getCode("ja",script,capacity, &err);
97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if(num!=(sizeof(jaCode)/sizeof(UScriptCode))){
98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                log_err("Errors uscript_getScriptCode() for Japanese locale: num=%d, expected %d \n",
99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        num, (sizeof(jaCode)/sizeof(UScriptCode)));
100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            for(j=0;j<sizeof(jaCode)/sizeof(UScriptCode);j++) {
102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if(script[j]!=jaCode[j]) {
103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    log_err("Japanese locale: code #%d was %d (%s) but expected %d (%s)\n", j,
104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            script[j], uscript_getName(script[j]),
105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            jaCode[j], uscript_getName(jaCode[j]));
106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }else{
110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            log_data_err("Errors in uscript_getScriptCode() expected error : %s got: %s \n",
111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                "U_BUFFER_OVERFLOW_ERROR",
112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                 u_errorName(err));
113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UScriptCode testAbbr[]={
119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            /* names should return */
120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            USCRIPT_CYRILLIC, USCRIPT_DESERET, USCRIPT_DEVANAGARI, USCRIPT_ETHIOPIC, USCRIPT_GEORGIAN,
121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            USCRIPT_GOTHIC, USCRIPT_GREEK, USCRIPT_GUJARATI,
122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        };
123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* expectedNames[]={
125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            /* test names */
127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "Cyrillic","Deseret","Devanagari","Ethiopic","Georgian",
128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "Gothic",  "Greek",  "Gujarati",
129fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius             NULL
130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        };
131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        i=0;
132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        while(i<sizeof(testAbbr)/sizeof(UScriptCode)){
133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const char* name = uscript_getName(testAbbr[i]);
134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru             if(name == NULL) {
135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru               log_data_err("Couldn't get script name\n");
136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru               return;
137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru             }
138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            numErrors=0;
139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if(strcmp(expectedNames[i],name)!=0){
140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                log_err("Error getting abbreviations Got: %s Expected: %s\n",name,expectedNames[i]);
141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                numErrors++;
142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if(numErrors > 0){
144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if(numErrors >0 ){
145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    log_err("Errors uchar_getScriptAbbr() : %i \n",numErrors);
146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            i++;
149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UScriptCode testAbbr[]={
155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            /* abbr should return */
156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            USCRIPT_HAN, USCRIPT_HANGUL, USCRIPT_HEBREW, USCRIPT_HIRAGANA,
157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            USCRIPT_KANNADA, USCRIPT_KATAKANA, USCRIPT_KHMER, USCRIPT_LAO,
158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            USCRIPT_LATIN,
159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            USCRIPT_MALAYALAM, USCRIPT_MONGOLIAN,
160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        };
161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* expectedAbbr[]={
163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              /* test abbr */
164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "Hani", "Hang","Hebr","Hira",
165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "Knda","Kana","Khmr","Laoo",
166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "Latn",
167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "Mlym", "Mong",
168fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius             NULL
169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        };
170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        i=0;
171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        while(i<sizeof(testAbbr)/sizeof(UScriptCode)){
172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const char* name = uscript_getShortName(testAbbr[i]);
173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            numErrors=0;
174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if(strcmp(expectedAbbr[i],name)!=0){
175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                log_err("Error getting abbreviations Got: %s Expected: %s\n",name,expectedAbbr[i]);
176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                numErrors++;
177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if(numErrors > 0){
179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if(numErrors >0 ){
180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    log_err("Errors uchar_getScriptAbbr() : %i \n",numErrors);
181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            i++;
184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* now test uscript_getScript() API */
188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        uint32_t codepoints[] = {
190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                0x0000FF9D, /* USCRIPT_KATAKANA*/
191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                0x0000FFBE, /* USCRIPT_HANGUL*/
192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                0x0000FFC7, /* USCRIPT_HANGUL*/
193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                0x0000FFCF, /* USCRIPT_HANGUL*/
194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                0x0000FFD7, /* USCRIPT_HANGUL*/
195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                0x0000FFDC, /* USCRIPT_HANGUL*/
196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                0x00010300, /* USCRIPT_OLD_ITALIC*/
197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                0x00010330, /* USCRIPT_GOTHIC*/
198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                0x0001034A, /* USCRIPT_GOTHIC*/
199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                0x00010400, /* USCRIPT_DESERET*/
200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                0x00010428, /* USCRIPT_DESERET*/
201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                0x0001D167, /* USCRIPT_INHERITED*/
202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                0x0001D17B, /* USCRIPT_INHERITED*/
203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                0x0001D185, /* USCRIPT_INHERITED*/
204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                0x0001D1AA, /* USCRIPT_INHERITED*/
205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                0x00020000, /* USCRIPT_HAN*/
206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                0x00000D02, /* USCRIPT_MALAYALAM*/
207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                0x00000D00, /* USCRIPT_UNKNOWN (new Zzzz value in Unicode 5.0) */
208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                0x00000000, /* USCRIPT_COMMON*/
209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                0x0001D169, /* USCRIPT_INHERITED*/
210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                0x0001D182, /* USCRIPT_INHERITED*/
211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                0x0001D18B, /* USCRIPT_INHERITED*/
212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                0x0001D1AD, /* USCRIPT_INHERITED*/
213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        };
214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UScriptCode expected[] = {
216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                USCRIPT_KATAKANA ,
217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                USCRIPT_HANGUL ,
218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                USCRIPT_HANGUL ,
219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                USCRIPT_HANGUL ,
220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                USCRIPT_HANGUL ,
221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                USCRIPT_HANGUL ,
222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                USCRIPT_OLD_ITALIC,
223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                USCRIPT_GOTHIC ,
224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                USCRIPT_GOTHIC ,
225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                USCRIPT_DESERET ,
226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                USCRIPT_DESERET ,
227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                USCRIPT_INHERITED,
228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                USCRIPT_INHERITED,
229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                USCRIPT_INHERITED,
230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                USCRIPT_INHERITED,
231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                USCRIPT_HAN ,
232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                USCRIPT_MALAYALAM,
233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                USCRIPT_UNKNOWN,
234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                USCRIPT_COMMON,
235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                USCRIPT_INHERITED ,
236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                USCRIPT_INHERITED ,
237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                USCRIPT_INHERITED ,
238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                USCRIPT_INHERITED ,
239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        };
240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UScriptCode code = USCRIPT_INVALID_CODE;
241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UErrorCode status = U_ZERO_ERROR;
242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UBool passed = TRUE;
243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
244c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        for(i=0; i<LENGTHOF(codepoints); ++i){
245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            code = uscript_getScript(codepoints[i],&status);
246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if(U_SUCCESS(status)){
247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if( code != expected[i] ||
248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    code != (UScriptCode)u_getIntPropertyValue(codepoints[i], UCHAR_SCRIPT)
249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                ) {
250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    log_err("uscript_getScript for codepoint \\U%08X failed\n",codepoints[i]);
251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    passed = FALSE;
252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }else{
254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                log_err("uscript_getScript for codepoint \\U%08X failed. Error: %s\n",
255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         codepoints[i],u_errorName(status));
256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                break;
257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(passed==FALSE){
261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           log_err("uscript_getScript failed.\n");
262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UScriptCode code= USCRIPT_INVALID_CODE;
266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UErrorCode  status = U_ZERO_ERROR;
267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        code = uscript_getScript(0x001D169,&status);
268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(code != USCRIPT_INHERITED){
269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            log_err("\\U001D169 is not contained in USCRIPT_INHERITED");
270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UScriptCode code= USCRIPT_INVALID_CODE;
274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UErrorCode  status = U_ZERO_ERROR;
275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t err = 0;
276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for(i = 0; i<=0x10ffff; i++){
278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            code =  uscript_getScript(i,&status);
279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if(code == USCRIPT_INVALID_CODE){
280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                err++;
281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                log_err("uscript_getScript for codepoint \\U%08X failed.\n", i);
282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(err>0){
285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            log_err("uscript_getScript failed for %d codepoints\n", err);
286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for(i=0; (UScriptCode)i< USCRIPT_CODE_LIMIT; i++){
290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const char* name = uscript_getName((UScriptCode)i);
291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if(name==NULL || strcmp(name,"")==0){
292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                log_err("uscript_getName failed for code %i: name is NULL or \"\"\n",i);
293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
29627f654740f2a26ad62a5c155af9199af9e69b889claireho
297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /*
299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         * These script codes were originally added to ICU pre-3.6, so that ICU would
300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         * have all ISO 15924 script codes. ICU was then based on Unicode 4.1.
301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         * These script codes were added with only short names because we don't
302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         * want to invent long names ourselves.
303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         * Unicode 5 and later encode some of these scripts and give them long names.
304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         * Whenever this happens, the long script names here need to be updated.
305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         */
306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        static const char* expectedLong[] = {
30727f654740f2a26ad62a5c155af9199af9e69b889claireho            "Balinese", "Batak", "Blis", "Brahmi", "Cham", "Cirt", "Cyrs", "Egyd", "Egyh", "Egyptian_Hieroglyphs",
30850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            "Geok", "Hans", "Hant", "Hmng", "Hung", "Inds", "Javanese", "Kayah_Li", "Latf", "Latg",
309103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            "Lepcha", "Lina", "Mandaic", "Maya", "Meroitic_Hieroglyphs", "Nko", "Old_Turkic", "Perm", "Phags_Pa", "Phoenician",
310103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            "Miao", "Roro", "Sara", "Syre", "Syrj", "Syrn", "Teng", "Vai", "Visp", "Cuneiform",
311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "Zxxx", "Unknown",
31250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            "Carian", "Jpan", "Tai_Tham", "Lycian", "Lydian", "Ol_Chiki", "Rejang", "Saurashtra", "Sgnw", "Sundanese",
31350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            "Moon", "Meetei_Mayek",
314c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru            /* new in ICU 4.0 */
315103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            "Imperial_Aramaic", "Avestan", "Chakma", "Kore",
31650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            "Kaithi", "Mani", "Inscriptional_Pahlavi", "Phlp", "Phlv", "Inscriptional_Parthian", "Samaritan", "Tai_Viet",
317c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru            "Zmth", "Zsym",
31850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            /* new in ICU 4.4 */
31950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            "Bamum", "Lisu", "Nkgb", "Old_South_Arabian",
32027f654740f2a26ad62a5c155af9199af9e69b889claireho            /* new in ICU 4.6 */
321103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            "Bass", "Dupl", "Elba", "Gran", "Kpel", "Loma", "Mend", "Meroitic_Cursive",
32227f654740f2a26ad62a5c155af9199af9e69b889claireho            "Narb", "Nbat", "Palm", "Sind", "Wara",
323b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            /* new in ICU 4.8 */
324103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            "Afak", "Jurc", "Mroo", "Nshu", "Sharada", "Sora_Sompeng", "Takri", "Tang", "Wole",
325103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            /* new in ICU 49 */
326103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            "Hluw", "Khoj", "Tirh",
32759d709d503bab6e2b61931737e662dd293b40578ccornelius            /* new in ICU 52 */
32859d709d503bab6e2b61931737e662dd293b40578ccornelius            "Aghb", "Mahj"
329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        };
330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        static const char* expectedShort[] = {
331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "Bali", "Batk", "Blis", "Brah", "Cham", "Cirt", "Cyrs", "Egyd", "Egyh", "Egyp",
332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "Geok", "Hans", "Hant", "Hmng", "Hung", "Inds", "Java", "Kali", "Latf", "Latg",
333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "Lepc", "Lina", "Mand", "Maya", "Mero", "Nkoo", "Orkh", "Perm", "Phag", "Phnx",
334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "Plrd", "Roro", "Sara", "Syre", "Syrj", "Syrn", "Teng", "Vaii", "Visp", "Xsux",
335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "Zxxx", "Zzzz",
336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "Cari", "Jpan", "Lana", "Lyci", "Lydi", "Olck", "Rjng", "Saur", "Sgnw", "Sund",
337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "Moon", "Mtei",
338c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru            /* new in ICU 4.0 */
339c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru            "Armi", "Avst", "Cakm", "Kore",
340c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru            "Kthi", "Mani", "Phli", "Phlp", "Phlv", "Prti", "Samr", "Tavt",
341c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru            "Zmth", "Zsym",
34250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            /* new in ICU 4.4 */
34350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            "Bamu", "Lisu", "Nkgb", "Sarb",
34427f654740f2a26ad62a5c155af9199af9e69b889claireho            /* new in ICU 4.6 */
34527f654740f2a26ad62a5c155af9199af9e69b889claireho            "Bass", "Dupl", "Elba", "Gran", "Kpel", "Loma", "Mend", "Merc",
34627f654740f2a26ad62a5c155af9199af9e69b889claireho            "Narb", "Nbat", "Palm", "Sind", "Wara",
347b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            /* new in ICU 4.8 */
348b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            "Afak", "Jurc", "Mroo", "Nshu", "Shrd", "Sora", "Takr", "Tang", "Wole",
349103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            /* new in ICU 49 */
350103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            "Hluw", "Khoj", "Tirh",
35159d709d503bab6e2b61931737e662dd293b40578ccornelius            /* new in ICU 52 */
35259d709d503bab6e2b61931737e662dd293b40578ccornelius            "Aghb", "Mahj"
353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        };
354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t j = 0;
35550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        if(LENGTHOF(expectedLong)!=(USCRIPT_CODE_LIMIT-USCRIPT_BALINESE)) {
35650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            log_err("need to add new script codes in cucdapi.c!\n");
35750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            return;
35850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        }
359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for(i=USCRIPT_BALINESE; (UScriptCode)i<USCRIPT_CODE_LIMIT; i++, j++){
360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const char* name = uscript_getName((UScriptCode)i);
361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if(name==NULL || strcmp(name,expectedLong[j])!=0){
362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                log_err("uscript_getName failed for code %i: %s!=%s\n", i, name, expectedLong[j]);
363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            name = uscript_getShortName((UScriptCode)i);
365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if(name==NULL || strcmp(name,expectedShort[j])!=0){
366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                log_err("uscript_getShortName failed for code %i: %s!=%s\n", i, name, expectedShort[j]);
367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
369c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        for(i=0; i<LENGTHOF(expectedLong); i++){
370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UScriptCode fillIn[5] = {USCRIPT_INVALID_CODE};
371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UErrorCode status = U_ZERO_ERROR;
372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            int32_t len = 0;
373c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru            len = uscript_getCode(expectedShort[i], fillIn, LENGTHOF(fillIn), &status);
374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if(U_FAILURE(status)){
375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                log_err("uscript_getCode failed for script name %s. Error: %s\n",expectedShort[i], u_errorName(status));
376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if(len>1){
378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                log_err("uscript_getCode did not return expected number of codes for script %s. EXPECTED: 1 GOT: %i\n", expectedShort[i], len);
379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if(fillIn[0]!= (UScriptCode)(USCRIPT_BALINESE+i)){
381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                log_err("uscript_getCode did not return expected code for script %s. EXPECTED: %i GOT: %i\n", expectedShort[i], (USCRIPT_BALINESE+i), fillIn[0] );
382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
38527f654740f2a26ad62a5c155af9199af9e69b889claireho
38627f654740f2a26ad62a5c155af9199af9e69b889claireho    {
38727f654740f2a26ad62a5c155af9199af9e69b889claireho        /* test characters which have Script_Extensions */
38827f654740f2a26ad62a5c155af9199af9e69b889claireho        UErrorCode errorCode=U_ZERO_ERROR;
38927f654740f2a26ad62a5c155af9199af9e69b889claireho        if(!(
39027f654740f2a26ad62a5c155af9199af9e69b889claireho                USCRIPT_COMMON==uscript_getScript(0x0640, &errorCode) &&
39127f654740f2a26ad62a5c155af9199af9e69b889claireho                USCRIPT_INHERITED==uscript_getScript(0x0650, &errorCode) &&
39227f654740f2a26ad62a5c155af9199af9e69b889claireho                USCRIPT_ARABIC==uscript_getScript(0xfdf2, &errorCode)) ||
39327f654740f2a26ad62a5c155af9199af9e69b889claireho            U_FAILURE(errorCode)
39427f654740f2a26ad62a5c155af9199af9e69b889claireho        ) {
39527f654740f2a26ad62a5c155af9199af9e69b889claireho            log_err("uscript_getScript(character with Script_Extensions) failed\n");
39627f654740f2a26ad62a5c155af9199af9e69b889claireho        }
39727f654740f2a26ad62a5c155af9199af9e69b889claireho    }
39827f654740f2a26ad62a5c155af9199af9e69b889claireho}
39927f654740f2a26ad62a5c155af9199af9e69b889claireho
40027f654740f2a26ad62a5c155af9199af9e69b889clairehovoid TestHasScript() {
40127f654740f2a26ad62a5c155af9199af9e69b889claireho    if(!(
40227f654740f2a26ad62a5c155af9199af9e69b889claireho        !uscript_hasScript(0x063f, USCRIPT_COMMON) &&
40327f654740f2a26ad62a5c155af9199af9e69b889claireho        uscript_hasScript(0x063f, USCRIPT_ARABIC) &&  /* main Script value */
40427f654740f2a26ad62a5c155af9199af9e69b889claireho        !uscript_hasScript(0x063f, USCRIPT_SYRIAC) &&
40527f654740f2a26ad62a5c155af9199af9e69b889claireho        !uscript_hasScript(0x063f, USCRIPT_THAANA))
40627f654740f2a26ad62a5c155af9199af9e69b889claireho    ) {
40727f654740f2a26ad62a5c155af9199af9e69b889claireho        log_err("uscript_hasScript(U+063F, ...) is wrong\n");
40827f654740f2a26ad62a5c155af9199af9e69b889claireho    }
40927f654740f2a26ad62a5c155af9199af9e69b889claireho    if(!(
410103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        !uscript_hasScript(0x0640, USCRIPT_COMMON) &&  /* main Script value */
41127f654740f2a26ad62a5c155af9199af9e69b889claireho        uscript_hasScript(0x0640, USCRIPT_ARABIC) &&
41227f654740f2a26ad62a5c155af9199af9e69b889claireho        uscript_hasScript(0x0640, USCRIPT_SYRIAC) &&
41327f654740f2a26ad62a5c155af9199af9e69b889claireho        !uscript_hasScript(0x0640, USCRIPT_THAANA))
41427f654740f2a26ad62a5c155af9199af9e69b889claireho    ) {
41527f654740f2a26ad62a5c155af9199af9e69b889claireho        log_err("uscript_hasScript(U+0640, ...) is wrong\n");
41627f654740f2a26ad62a5c155af9199af9e69b889claireho    }
41727f654740f2a26ad62a5c155af9199af9e69b889claireho    if(!(
418103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        !uscript_hasScript(0x0650, USCRIPT_INHERITED) &&  /* main Script value */
41927f654740f2a26ad62a5c155af9199af9e69b889claireho        uscript_hasScript(0x0650, USCRIPT_ARABIC) &&
42027f654740f2a26ad62a5c155af9199af9e69b889claireho        uscript_hasScript(0x0650, USCRIPT_SYRIAC) &&
42127f654740f2a26ad62a5c155af9199af9e69b889claireho        !uscript_hasScript(0x0650, USCRIPT_THAANA))
42227f654740f2a26ad62a5c155af9199af9e69b889claireho    ) {
42327f654740f2a26ad62a5c155af9199af9e69b889claireho        log_err("uscript_hasScript(U+0650, ...) is wrong\n");
42427f654740f2a26ad62a5c155af9199af9e69b889claireho    }
42527f654740f2a26ad62a5c155af9199af9e69b889claireho    if(!(
426103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        !uscript_hasScript(0x0660, USCRIPT_COMMON) &&  /* main Script value */
42727f654740f2a26ad62a5c155af9199af9e69b889claireho        uscript_hasScript(0x0660, USCRIPT_ARABIC) &&
42827f654740f2a26ad62a5c155af9199af9e69b889claireho        !uscript_hasScript(0x0660, USCRIPT_SYRIAC) &&
42927f654740f2a26ad62a5c155af9199af9e69b889claireho        uscript_hasScript(0x0660, USCRIPT_THAANA))
43027f654740f2a26ad62a5c155af9199af9e69b889claireho    ) {
43127f654740f2a26ad62a5c155af9199af9e69b889claireho        log_err("uscript_hasScript(U+0660, ...) is wrong\n");
43227f654740f2a26ad62a5c155af9199af9e69b889claireho    }
43327f654740f2a26ad62a5c155af9199af9e69b889claireho    if(!(
43427f654740f2a26ad62a5c155af9199af9e69b889claireho        !uscript_hasScript(0xfdf2, USCRIPT_COMMON) &&
43527f654740f2a26ad62a5c155af9199af9e69b889claireho        uscript_hasScript(0xfdf2, USCRIPT_ARABIC) &&  /* main Script value */
43627f654740f2a26ad62a5c155af9199af9e69b889claireho        !uscript_hasScript(0xfdf2, USCRIPT_SYRIAC) &&
43727f654740f2a26ad62a5c155af9199af9e69b889claireho        uscript_hasScript(0xfdf2, USCRIPT_THAANA))
43827f654740f2a26ad62a5c155af9199af9e69b889claireho    ) {
43927f654740f2a26ad62a5c155af9199af9e69b889claireho        log_err("uscript_hasScript(U+FDF2, ...) is wrong\n");
44027f654740f2a26ad62a5c155af9199af9e69b889claireho    }
441103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if(uscript_hasScript(0x0640, 0xaffe)) {
442103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        /* An unguarded implementation might go into an infinite loop. */
443103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        log_err("uscript_hasScript(U+0640, bogus 0xaffe) is wrong\n");
444103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
44527f654740f2a26ad62a5c155af9199af9e69b889claireho}
44627f654740f2a26ad62a5c155af9199af9e69b889claireho
44727f654740f2a26ad62a5c155af9199af9e69b889clairehovoid TestGetScriptExtensions() {
44827f654740f2a26ad62a5c155af9199af9e69b889claireho    UScriptCode scripts[20];
44927f654740f2a26ad62a5c155af9199af9e69b889claireho    int32_t length;
45027f654740f2a26ad62a5c155af9199af9e69b889claireho    UErrorCode errorCode;
45127f654740f2a26ad62a5c155af9199af9e69b889claireho
45227f654740f2a26ad62a5c155af9199af9e69b889claireho    /* errors and overflows */
45327f654740f2a26ad62a5c155af9199af9e69b889claireho    errorCode=U_PARSE_ERROR;
45427f654740f2a26ad62a5c155af9199af9e69b889claireho    length=uscript_getScriptExtensions(0x0640, scripts, LENGTHOF(scripts), &errorCode);
45527f654740f2a26ad62a5c155af9199af9e69b889claireho    if(errorCode!=U_PARSE_ERROR) {
456103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        log_err("uscript_getScriptExtensions(U+0640, U_PARSE_ERROR) did not preserve the UErrorCode - %s\n",
45727f654740f2a26ad62a5c155af9199af9e69b889claireho              u_errorName(errorCode));
45827f654740f2a26ad62a5c155af9199af9e69b889claireho    }
45927f654740f2a26ad62a5c155af9199af9e69b889claireho    errorCode=U_ZERO_ERROR;
46027f654740f2a26ad62a5c155af9199af9e69b889claireho    length=uscript_getScriptExtensions(0x0640, NULL, LENGTHOF(scripts), &errorCode);
46127f654740f2a26ad62a5c155af9199af9e69b889claireho    if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR) {
462103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        log_err("uscript_getScriptExtensions(U+0640, NULL) did not set U_ILLEGAL_ARGUMENT_ERROR - %s\n",
46327f654740f2a26ad62a5c155af9199af9e69b889claireho              u_errorName(errorCode));
46427f654740f2a26ad62a5c155af9199af9e69b889claireho    }
46527f654740f2a26ad62a5c155af9199af9e69b889claireho    errorCode=U_ZERO_ERROR;
46627f654740f2a26ad62a5c155af9199af9e69b889claireho    length=uscript_getScriptExtensions(0x0640, scripts, -1, &errorCode);
46727f654740f2a26ad62a5c155af9199af9e69b889claireho    if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR) {
468103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        log_err("uscript_getScriptExtensions(U+0640, capacity<0) did not set U_ILLEGAL_ARGUMENT_ERROR - %s\n",
46927f654740f2a26ad62a5c155af9199af9e69b889claireho              u_errorName(errorCode));
47027f654740f2a26ad62a5c155af9199af9e69b889claireho    }
47127f654740f2a26ad62a5c155af9199af9e69b889claireho    errorCode=U_ZERO_ERROR;
47227f654740f2a26ad62a5c155af9199af9e69b889claireho    length=uscript_getScriptExtensions(0x0640, scripts, 0, &errorCode);
473103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if(errorCode!=U_BUFFER_OVERFLOW_ERROR || length!=3) {
474103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        log_err("uscript_getScriptExtensions(U+0640, capacity=0: pure preflighting)=%d != 3 - %s\n",
47527f654740f2a26ad62a5c155af9199af9e69b889claireho              (int)length, u_errorName(errorCode));
47627f654740f2a26ad62a5c155af9199af9e69b889claireho    }
47727f654740f2a26ad62a5c155af9199af9e69b889claireho    errorCode=U_ZERO_ERROR;
47827f654740f2a26ad62a5c155af9199af9e69b889claireho    length=uscript_getScriptExtensions(0x0640, scripts, 1, &errorCode);
479103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if(errorCode!=U_BUFFER_OVERFLOW_ERROR || length!=3) {
480103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        log_err("uscript_getScriptExtensions(U+0640, capacity=1: preflighting)=%d != 3 - %s\n",
481103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius              (int)length, u_errorName(errorCode));
482103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
483103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    /* U+063F has only a Script code, no Script_Extensions. */
484103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    errorCode=U_ZERO_ERROR;
485103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    length=uscript_getScriptExtensions(0x063f, scripts, 0, &errorCode);
486103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if(errorCode!=U_BUFFER_OVERFLOW_ERROR || length!=1) {
487103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        log_err("uscript_getScriptExtensions(U+063F, capacity=0)=%d != 1 - %s\n",
488103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius              (int)length, u_errorName(errorCode));
489103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
490103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
491103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    /* invalid code points */
492103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    errorCode=U_ZERO_ERROR;
493103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    length=uscript_getScriptExtensions(-1, scripts, LENGTHOF(scripts), &errorCode);
494103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if(U_FAILURE(errorCode) || length!=1 || scripts[0]!=USCRIPT_UNKNOWN) {
495103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        log_err("uscript_getScriptExtensions(-1)=%d does not return {UNKNOWN} - %s\n",
496103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius              (int)length, u_errorName(errorCode));
497103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
498103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    errorCode=U_ZERO_ERROR;
499103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    length=uscript_getScriptExtensions(0x110000, scripts, LENGTHOF(scripts), &errorCode);
500103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if(U_FAILURE(errorCode) || length!=1 || scripts[0]!=USCRIPT_UNKNOWN) {
501103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        log_err("uscript_getScriptExtensions(0x110000)=%d does not return {UNKNOWN} - %s\n",
50227f654740f2a26ad62a5c155af9199af9e69b889claireho              (int)length, u_errorName(errorCode));
50327f654740f2a26ad62a5c155af9199af9e69b889claireho    }
50427f654740f2a26ad62a5c155af9199af9e69b889claireho
50527f654740f2a26ad62a5c155af9199af9e69b889claireho    /* normal usage */
50627f654740f2a26ad62a5c155af9199af9e69b889claireho    errorCode=U_ZERO_ERROR;
507103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    length=uscript_getScriptExtensions(0x063f, scripts, 1, &errorCode);
508103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if(U_FAILURE(errorCode) || length!=1 || scripts[0]!=USCRIPT_ARABIC) {
509103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        log_err("uscript_getScriptExtensions(U+063F, capacity=1)=%d does not return {ARABIC} - %s\n",
51027f654740f2a26ad62a5c155af9199af9e69b889claireho              (int)length, u_errorName(errorCode));
51127f654740f2a26ad62a5c155af9199af9e69b889claireho    }
512103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    errorCode=U_ZERO_ERROR;
51327f654740f2a26ad62a5c155af9199af9e69b889claireho    length=uscript_getScriptExtensions(0x0640, scripts, LENGTHOF(scripts), &errorCode);
514103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if(U_FAILURE(errorCode) || length!=3 ||
515103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius       scripts[0]!=USCRIPT_ARABIC || scripts[1]!=USCRIPT_SYRIAC || scripts[2]!=USCRIPT_MANDAIC
516103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    ) {
51727f654740f2a26ad62a5c155af9199af9e69b889claireho        log_err("uscript_getScriptExtensions(U+0640)=%d failed - %s\n",
51827f654740f2a26ad62a5c155af9199af9e69b889claireho              (int)length, u_errorName(errorCode));
51927f654740f2a26ad62a5c155af9199af9e69b889claireho    }
520103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    errorCode=U_ZERO_ERROR;
52127f654740f2a26ad62a5c155af9199af9e69b889claireho    length=uscript_getScriptExtensions(0xfdf2, scripts, LENGTHOF(scripts), &errorCode);
52227f654740f2a26ad62a5c155af9199af9e69b889claireho    if(U_FAILURE(errorCode) || length!=2 || scripts[0]!=USCRIPT_ARABIC || scripts[1]!=USCRIPT_THAANA) {
52327f654740f2a26ad62a5c155af9199af9e69b889claireho        log_err("uscript_getScriptExtensions(U+FDF2)=%d failed - %s\n",
52427f654740f2a26ad62a5c155af9199af9e69b889claireho              (int)length, u_errorName(errorCode));
52527f654740f2a26ad62a5c155af9199af9e69b889claireho    }
526103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    errorCode=U_ZERO_ERROR;
52727f654740f2a26ad62a5c155af9199af9e69b889claireho    length=uscript_getScriptExtensions(0xff65, scripts, LENGTHOF(scripts), &errorCode);
52827f654740f2a26ad62a5c155af9199af9e69b889claireho    if(U_FAILURE(errorCode) || length!=6 || scripts[0]!=USCRIPT_BOPOMOFO || scripts[5]!=USCRIPT_YI) {
52927f654740f2a26ad62a5c155af9199af9e69b889claireho        log_err("uscript_getScriptExtensions(U+FF65)=%d failed - %s\n",
53027f654740f2a26ad62a5c155af9199af9e69b889claireho              (int)length, u_errorName(errorCode));
53127f654740f2a26ad62a5c155af9199af9e69b889claireho    }
532c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru}
533c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
5348393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusvoid TestScriptMetadataAPI() {
5358393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    /* API & code coverage. More testing in intltest/ucdtest.cpp. */
5368393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    UErrorCode errorCode=U_ZERO_ERROR;
5378393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    UChar sample[8];
5388393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius
5398393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    if(uscript_getSampleString(USCRIPT_LATIN, sample, LENGTHOF(sample), &errorCode)!=1 ||
5408393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius            U_FAILURE(errorCode) ||
5418393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius            uscript_getScript(sample[0], &errorCode)!=USCRIPT_LATIN ||
5428393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius            sample[1]!=0) {
5438393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        log_err("uscript_getSampleString(Latn) failed - %s\n", u_errorName(errorCode));
5448393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    }
5458393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    sample[0]=0xfffe;
5468393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    if(uscript_getSampleString(USCRIPT_LATIN, sample, 0, &errorCode)!=1 ||
5478393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius            errorCode!=U_BUFFER_OVERFLOW_ERROR ||
5488393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius            sample[0]!=0xfffe) {
5498393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        log_err("uscript_getSampleString(Latn, capacity=0) failed - %s\n", u_errorName(errorCode));
5508393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    }
5518393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    errorCode=U_ZERO_ERROR;
5528393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    if(uscript_getSampleString(USCRIPT_INVALID_CODE, sample, LENGTHOF(sample), &errorCode)!=0 ||
5538393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius            U_FAILURE(errorCode) ||
5548393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius            sample[0]!=0) {
5558393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        log_err("uscript_getSampleString(invalid) failed - %s\n", u_errorName(errorCode));
5568393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    }
5578393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    sample[0]=0xfffe;
5588393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    if(uscript_getSampleString(USCRIPT_CODE_LIMIT, sample, 0, &errorCode)!=0 ||
5598393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius            errorCode!=U_STRING_NOT_TERMINATED_WARNING ||
5608393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius            sample[0]!=0xfffe) {
5618393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        log_err("uscript_getSampleString(limit, capacity=0) failed - %s\n", u_errorName(errorCode));
5628393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    }
5638393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius
5648393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    if(uscript_getUsage(USCRIPT_LATIN)!=USCRIPT_USAGE_RECOMMENDED ||
5658393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius            uscript_getUsage(USCRIPT_YI)!=USCRIPT_USAGE_ASPIRATIONAL ||
5668393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius            uscript_getUsage(USCRIPT_CHEROKEE)!=USCRIPT_USAGE_LIMITED_USE ||
5678393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius            uscript_getUsage(USCRIPT_COPTIC)!=USCRIPT_USAGE_EXCLUDED ||
5688393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius            uscript_getUsage(USCRIPT_CIRTH)!=USCRIPT_USAGE_NOT_ENCODED ||
5698393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius            uscript_getUsage(USCRIPT_INVALID_CODE)!=USCRIPT_USAGE_NOT_ENCODED ||
5708393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius            uscript_getUsage(USCRIPT_CODE_LIMIT)!=USCRIPT_USAGE_NOT_ENCODED) {
5718393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        log_err("uscript_getUsage() failed\n");
5728393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    }
5738393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius
5748393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    if(uscript_isRightToLeft(USCRIPT_LATIN) ||
5758393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius            uscript_isRightToLeft(USCRIPT_CIRTH) ||
5768393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius            !uscript_isRightToLeft(USCRIPT_ARABIC) ||
5778393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius            !uscript_isRightToLeft(USCRIPT_HEBREW)) {
5788393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        log_err("uscript_isRightToLeft() failed\n");
5798393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    }
5808393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius
5818393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    if(uscript_breaksBetweenLetters(USCRIPT_LATIN) ||
5828393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius            uscript_breaksBetweenLetters(USCRIPT_CIRTH) ||
5838393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius            !uscript_breaksBetweenLetters(USCRIPT_HAN) ||
5848393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius            !uscript_breaksBetweenLetters(USCRIPT_THAI)) {
5858393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        log_err("uscript_breaksBetweenLetters() failed\n");
5868393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    }
5878393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius
5888393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    if(uscript_isCased(USCRIPT_CIRTH) ||
5898393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius            uscript_isCased(USCRIPT_HAN) ||
5908393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius            !uscript_isCased(USCRIPT_LATIN) ||
5918393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius            !uscript_isCased(USCRIPT_GREEK)) {
5928393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        log_err("uscript_isCased() failed\n");
5938393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    }
5948393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius}
5958393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius
596c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queruvoid TestBinaryValues() {
597c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    /*
598c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     * Unicode 5.1 explicitly defines binary property value aliases.
599c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     * Verify that they are all recognized.
600c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru     */
601c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    static const char *const falseValues[]={ "N", "No", "F", "False" };
602c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    static const char *const trueValues[]={ "Y", "Yes", "T", "True" };
603c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    int32_t i;
604c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    for(i=0; i<LENGTHOF(falseValues); ++i) {
605c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        if(FALSE!=u_getPropertyValueEnum(UCHAR_ALPHABETIC, falseValues[i])) {
6066d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru            log_data_err("u_getPropertyValueEnum(UCHAR_ALPHABETIC, \"%s\")!=FALSE (Are you missing data?)\n", falseValues[i]);
607c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        }
608c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    }
609c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    for(i=0; i<LENGTHOF(trueValues); ++i) {
610c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        if(TRUE!=u_getPropertyValueEnum(UCHAR_ALPHABETIC, trueValues[i])) {
6116d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru            log_data_err("u_getPropertyValueEnum(UCHAR_ALPHABETIC, \"%s\")!=TRUE (Are you missing data?)\n", trueValues[i]);
612c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        }
613c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    }
614c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru}
615