16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/******************************************************************** 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * COPYRIGHT: 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copyright (c) 1997-2013, International Business Machines Corporation and 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * others. All Rights Reserved. 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ********************************************************************/ 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/******************************************************************************* 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* File CUCDTST.C 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Modification History: 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Name Description 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Madhu Katragadda Ported for C API, added tests for string functions 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************** 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <string.h> 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <math.h> 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <stdlib.h> 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h" 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uchar.h" 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/putil.h" 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ustring.h" 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uloc.h" 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/unorm2.h" 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cintltst.h" 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "putilimp.h" 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "uparse.h" 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "ucase.h" 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "ubidi_props.h" 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "uprops.h" 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "uset_imp.h" 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "usc_impl.h" 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "udatamem.h" /* for testing ucase_openBinary() */ 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cucdapi.h" 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0])) 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* prototypes --------------------------------------------------------------- */ 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestUpperLower(void); 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestLetterNumber(void); 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestMisc(void); 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestPOSIX(void); 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestControlPrint(void); 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestIdentifier(void); 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestUnicodeData(void); 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestCodeUnit(void); 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestCodePoint(void); 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestCharLength(void); 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestCharNames(void); 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestMirroring(void); 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestUScriptRunAPI(void); 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestAdditionalProperties(void); 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestNumericProperties(void); 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestPropertyNames(void); 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestPropertyValues(void); 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestConsistency(void); 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestUCase(void); 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestUBiDiProps(void); 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestCaseFolding(void); 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* internal methods used */ 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic int32_t MakeProp(char* str); 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic int32_t MakeDir(char* str); 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* helpers ------------------------------------------------------------------ */ 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgparseUCDFile(const char *filename, 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *fields[][2], int32_t fieldCount, 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UParseLineFn *lineFn, void *context, 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode *pErrorCode) { 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char path[256]; 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char backupPath[256]; 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(*pErrorCode)) { 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Look inside ICU_DATA first */ 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strcpy(path, u_getDataDirectory()); 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strcat(path, ".." U_FILE_SEP_STRING "unidata" U_FILE_SEP_STRING); 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strcat(path, filename); 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* As a fallback, try to guess where the source data was located 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * at the time ICU was built, and look there. 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strcpy(backupPath, ctest_dataSrcDir()); 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strcat(backupPath, U_FILE_SEP_STRING); 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strcat(backupPath, "unidata" U_FILE_SEP_STRING); 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strcat(backupPath, filename); 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_parseDelimitedFile(path, ';', fields, fieldCount, lineFn, context, pErrorCode); 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(*pErrorCode==U_FILE_ACCESS_ERROR) { 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *pErrorCode=U_ZERO_ERROR; 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_parseDelimitedFile(backupPath, ';', fields, fieldCount, lineFn, context, pErrorCode); 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(*pErrorCode)) { 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(*pErrorCode, "error parsing %s: %s\n", filename, u_errorName(*pErrorCode)); 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* test data ---------------------------------------------------------------- */ 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UChar LAST_CHAR_CODE_IN_FILE = 0xFFFD; 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const char tagStrings[] = "MnMcMeNdNlNoZsZlZpCcCfCsCoCnLuLlLtLmLoPcPdPsPePoSmScSkSoPiPf"; 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const int32_t tagValues[] = 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Mn */ U_NON_SPACING_MARK, 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Mc */ U_COMBINING_SPACING_MARK, 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Me */ U_ENCLOSING_MARK, 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Nd */ U_DECIMAL_DIGIT_NUMBER, 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Nl */ U_LETTER_NUMBER, 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* No */ U_OTHER_NUMBER, 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Zs */ U_SPACE_SEPARATOR, 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Zl */ U_LINE_SEPARATOR, 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Zp */ U_PARAGRAPH_SEPARATOR, 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Cc */ U_CONTROL_CHAR, 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Cf */ U_FORMAT_CHAR, 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Cs */ U_SURROGATE, 1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Co */ U_PRIVATE_USE_CHAR, 1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Cn */ U_UNASSIGNED, 1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Lu */ U_UPPERCASE_LETTER, 1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Ll */ U_LOWERCASE_LETTER, 1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Lt */ U_TITLECASE_LETTER, 1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Lm */ U_MODIFIER_LETTER, 1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Lo */ U_OTHER_LETTER, 1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Pc */ U_CONNECTOR_PUNCTUATION, 1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Pd */ U_DASH_PUNCTUATION, 1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Ps */ U_START_PUNCTUATION, 1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Pe */ U_END_PUNCTUATION, 1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Po */ U_OTHER_PUNCTUATION, 1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Sm */ U_MATH_SYMBOL, 1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Sc */ U_CURRENCY_SYMBOL, 1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Sk */ U_MODIFIER_SYMBOL, 1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* So */ U_OTHER_SYMBOL, 1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Pi */ U_INITIAL_PUNCTUATION, 1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Pf */ U_FINAL_PUNCTUATION 1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const char dirStrings[][5] = { 1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "L", 1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "R", 1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "EN", 1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "ES", 1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "ET", 1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "AN", 1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "CS", 1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "B", 1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "S", 1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "WS", 1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "ON", 1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "LRE", 1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "LRO", 1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "AL", 1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "RLE", 1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "RLO", 1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "PDF", 1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "NSM", 1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "BN", 1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* new in Unicode 6.3/ICU 52 */ 1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "FSI", 1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "LRI", 1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "RLI", 1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "PDI" 1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid addUnicodeTest(TestNode** root); 1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid addUnicodeTest(TestNode** root) 1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestCodeUnit, "tsutil/cucdtst/TestCodeUnit"); 1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestCodePoint, "tsutil/cucdtst/TestCodePoint"); 1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestCharLength, "tsutil/cucdtst/TestCharLength"); 1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestBinaryValues, "tsutil/cucdtst/TestBinaryValues"); 1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestUnicodeData, "tsutil/cucdtst/TestUnicodeData"); 1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestAdditionalProperties, "tsutil/cucdtst/TestAdditionalProperties"); 1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestNumericProperties, "tsutil/cucdtst/TestNumericProperties"); 1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestUpperLower, "tsutil/cucdtst/TestUpperLower"); 1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestLetterNumber, "tsutil/cucdtst/TestLetterNumber"); 1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestMisc, "tsutil/cucdtst/TestMisc"); 1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestPOSIX, "tsutil/cucdtst/TestPOSIX"); 1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestControlPrint, "tsutil/cucdtst/TestControlPrint"); 1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestIdentifier, "tsutil/cucdtst/TestIdentifier"); 1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestCharNames, "tsutil/cucdtst/TestCharNames"); 1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestMirroring, "tsutil/cucdtst/TestMirroring"); 1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestUScriptCodeAPI, "tsutil/cucdtst/TestUScriptCodeAPI"); 1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestHasScript, "tsutil/cucdtst/TestHasScript"); 1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestGetScriptExtensions, "tsutil/cucdtst/TestGetScriptExtensions"); 1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestScriptMetadataAPI, "tsutil/cucdtst/TestScriptMetadataAPI"); 1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestUScriptRunAPI, "tsutil/cucdtst/TestUScriptRunAPI"); 1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestPropertyNames, "tsutil/cucdtst/TestPropertyNames"); 1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestPropertyValues, "tsutil/cucdtst/TestPropertyValues"); 1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestConsistency, "tsutil/cucdtst/TestConsistency"); 1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestUCase, "tsutil/cucdtst/TestUCase"); 1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestUBiDiProps, "tsutil/cucdtst/TestUBiDiProps"); 1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestCaseFolding, "tsutil/cucdtst/TestCaseFolding"); 2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*==================================================== */ 2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* test u_toupper() and u_tolower() */ 2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*==================================================== */ 2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestUpperLower() 2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar upper[] = {0x41, 0x42, 0x00b2, 0x01c4, 0x01c6, 0x01c9, 0x01c8, 0x01c9, 0x000c, 0x0000}; 2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar lower[] = {0x61, 0x62, 0x00b2, 0x01c6, 0x01c6, 0x01c9, 0x01c9, 0x01c9, 0x000c, 0x0000}; 2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_DECL(upperTest, "abcdefg123hij.?:klmno", 21); 2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_DECL(lowerTest, "ABCDEFG123HIJ.?:KLMNO", 21); 2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i; 2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_INIT(upperTest, "abcdefg123hij.?:klmno", 21); 2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_INIT(lowerTest, "ABCDEFG123HIJ.?:KLMNO", 21); 2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgChecks LetterLike Symbols which were previously a source of confusion 2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org[Bertrand A. D. 02/04/98] 2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (i=0x2100;i<0x2138;i++) 2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Unicode 5.0 adds lowercase U+214E (TURNED SMALL F) to U+2132 (TURNED CAPITAL F) */ 2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(i!=0x2126 && i!=0x212a && i!=0x212b && i!=0x2132) 2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (i != (int)u_tolower(i)) /* itself */ 2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Failed case conversion with itself: U+%04x\n", i); 2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (i != (int)u_toupper(i)) 2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Failed case conversion with itself: U+%04x\n", i); 2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0; i < u_strlen(upper); i++){ 2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_tolower(upper[i]) != lower[i]){ 2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAILED u_tolower() for %lx Expected %lx Got %lx\n", upper[i], lower[i], u_tolower(upper[i])); 2356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("testing upper lower\n"); 2396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (i = 0; i < 21; i++) { 2406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (u_isalpha(upperTest[i]) && !u_islower(upperTest[i])) 2426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 2436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Failed isLowerCase test at %c\n", upperTest[i]); 2446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else if (u_isalpha(lowerTest[i]) && !u_isupper(lowerTest[i])) 2466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 2476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Failed isUpperCase test at %c\n", lowerTest[i]); 2486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else if (upperTest[i] != u_tolower(lowerTest[i])) 2506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 2516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Failed case conversion from %c To %c :\n", lowerTest[i], upperTest[i]); 2526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else if (lowerTest[i] != u_toupper(upperTest[i])) 2546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 2556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Failed case conversion : %c To %c \n", upperTest[i], lowerTest[i]); 2566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else if (upperTest[i] != u_tolower(upperTest[i])) 2586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 2596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Failed case conversion with itself: %c\n", upperTest[i]); 2606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else if (lowerTest[i] != u_toupper(lowerTest[i])) 2626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 2636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Failed case conversion with itself: %c\n", lowerTest[i]); 2646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("done testing upper lower\n"); 2676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("testing u_istitle\n"); 2696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 2706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const UChar expected[] = { 2716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1F88, 2726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1F89, 2736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1F8A, 2746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1F8B, 2756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1F8C, 2766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1F8D, 2776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1F8E, 2786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1F8F, 2796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1F88, 2806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1F89, 2816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1F8A, 2826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1F8B, 2836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1F8C, 2846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1F8D, 2856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1F8E, 2866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1F8F, 2876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1F98, 2886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1F99, 2896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1F9A, 2906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1F9B, 2916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1F9C, 2926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1F9D, 2936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1F9E, 2946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1F9F, 2956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1F98, 2966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1F99, 2976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1F9A, 2986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1F9B, 2996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1F9C, 3006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1F9D, 3016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1F9E, 3026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1F9F, 3036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1FA8, 3046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1FA9, 3056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1FAA, 3066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1FAB, 3076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1FAC, 3086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1FAD, 3096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1FAE, 3106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1FAF, 3116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1FA8, 3126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1FA9, 3136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1FAA, 3146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1FAB, 3156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1FAC, 3166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1FAD, 3176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1FAE, 3186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1FAF, 3196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1FBC, 3206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1FBC, 3216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1FCC, 3226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1FCC, 3236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1FFC, 3246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x1FFC, 3256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 3266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t num = sizeof(expected)/sizeof(expected[0]); 3276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0; i<num; i++){ 3286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(!u_istitle(expected[i])){ 3296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_istitle failed for 0x%4X. Expected TRUE, got FALSE\n",expected[i]); 3306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* compare two sets and verify that their difference or intersection is empty */ 3376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UBool 3386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgshowADiffB(const USet *a, const USet *b, 3396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *a_name, const char *b_name, 3406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool expect, UBool diffIsError) { 3416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org USet *aa; 3426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i, start, end, length; 3436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode errorCode; 3446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 3466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * expect: 3476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * TRUE -> a-b should be empty, that is, b should contain all of a 3486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * FALSE -> a&b should be empty, that is, a should contain none of b (and vice versa) 3496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(expect ? uset_containsAll(b, a) : uset_containsNone(a, b)) { 3516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return TRUE; 3526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* clone a to aa because a is const */ 3556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org aa=uset_open(1, 0); 3566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(aa==NULL) { 3576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* unusual problem - out of memory? */ 3586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return FALSE; 3596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uset_addAll(aa, a); 3616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* compute the set in question */ 3636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(expect) { 3646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* a-b */ 3656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uset_removeAll(aa, b); 3666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 3676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* a&b */ 3686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uset_retainAll(aa, b); 3696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* aa is not empty because of the initial tests above; show its contents */ 3726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 3736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org i=0; 3746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(;;) { 3756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=uset_getItem(aa, i, &start, &end, NULL, 0, &errorCode); 3766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(errorCode==U_INDEX_OUTOFBOUNDS_ERROR) { 3776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; /* done */ 3786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(errorCode)) { 3806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error comparing %s with %s at difference item %d: %s\n", 3816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org a_name, b_name, i, u_errorName(errorCode)); 3826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 3836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(length!=0) { 3856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; /* done with code points, got a string or -1 */ 3866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(diffIsError) { 3896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(expect) { 3906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: %s contains U+%04x..U+%04x but %s does not\n", a_name, start, end, b_name); 3916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 3926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: %s and %s both contain U+%04x..U+%04x but should not intersect\n", a_name, b_name, start, end); 3936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 3956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(expect) { 3966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("info: %s contains U+%04x..U+%04x but %s does not\n", a_name, start, end, b_name); 3976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 3986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("info: %s and %s both contain U+%04x..U+%04x but should not intersect\n", a_name, b_name, start, end); 3996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ++i; 4036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uset_close(aa); 4066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return FALSE; 4076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 4086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UBool 4106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgshowAMinusB(const USet *a, const USet *b, 4116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *a_name, const char *b_name, 4126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool diffIsError) { 4136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return showADiffB(a, b, a_name, b_name, TRUE, diffIsError); 4146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 4156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UBool 4176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgshowAIntersectB(const USet *a, const USet *b, 4186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *a_name, const char *b_name, 4196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool diffIsError) { 4206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return showADiffB(a, b, a_name, b_name, FALSE, diffIsError); 4216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 4226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UBool 4246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgcompareUSets(const USet *a, const USet *b, 4256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *a_name, const char *b_name, 4266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool diffIsError) { 4276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 4286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Use an arithmetic & not a logical && so that both branches 4296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * are always taken and all differences are shown. 4306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 4316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return 4326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org showAMinusB(a, b, a_name, b_name, diffIsError) & 4336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org showAMinusB(b, a, b_name, a_name, diffIsError); 4346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 4356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* test isLetter(u_isapha()) and isDigit(u_isdigit()) */ 4376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestLetterNumber() 4386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 4396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar i = 0x0000; 4406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Testing for isalpha\n"); 4426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (i = 0x0041; i < 0x005B; i++) { 4436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!u_isalpha(i)) 4446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 4456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Failed isLetter test at %.4X\n", i); 4466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (i = 0x0660; i < 0x066A; i++) { 4496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (u_isalpha(i)) 4506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 4516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Failed isLetter test with numbers at %.4X\n", i); 4526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Testing for isdigit\n"); 4566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (i = 0x0660; i < 0x066A; i++) { 4576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!u_isdigit(i)) 4586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 4596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Failed isNumber test at %.4X\n", i); 4606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Testing for isalnum\n"); 4646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (i = 0x0041; i < 0x005B; i++) { 4656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!u_isalnum(i)) 4666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 4676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Failed isAlNum test at %.4X\n", i); 4686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (i = 0x0660; i < 0x066A; i++) { 4716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!u_isalnum(i)) 4726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 4736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Failed isAlNum test at %.4X\n", i); 4746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 4786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 4796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The following checks work only starting from Unicode 4.0. 4806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Check the version number here. 4816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 4826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static UVersionInfo u401={ 4, 0, 1, 0 }; 4836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UVersionInfo version; 4846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_getUnicodeVersion(version); 4856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(version[0]<4 || 0==memcmp(version, u401, 4)) { 4866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 4876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 4916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 4926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Sanity check: 4936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Verify that exactly the digit characters have decimal digit values. 4946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This assumption is used in the implementation of u_digit() 4956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (which checks nt=de) 4966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * compared with the parallel java.lang.Character.digit() 4976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (which checks Nd). 4986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 4996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This was not true in Unicode 3.2 and earlier. 5006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Unicode 4.0 fixed discrepancies. 5016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Unicode 4.0.1 re-introduced problems in this area due to an 5026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * unintentionally incomplete last-minute change. 5036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 5046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_DECL(digitsPattern, "[:Nd:]", 6); 5056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_DECL(decimalValuesPattern, "[:Numeric_Type=Decimal:]", 24); 5066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org USet *digits, *decimalValues; 5086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode errorCode; 5096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_INIT(digitsPattern, "[:Nd:]", 6); 5116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_INIT(decimalValuesPattern, "[:Numeric_Type=Decimal:]", 24); 5126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 5136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org digits=uset_openPattern(digitsPattern, 6, &errorCode); 5146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org decimalValues=uset_openPattern(decimalValuesPattern, 24, &errorCode); 5156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_SUCCESS(errorCode)) { 5176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org compareUSets(digits, decimalValues, "[:Nd:]", "[:Numeric_Type=Decimal:]", TRUE); 5186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uset_close(digits); 5216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uset_close(decimalValues); 5226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 5246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void testSampleCharProps(UBool propFn(UChar32), const char *propName, 5266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar32 *sampleChars, int32_t sampleCharsLength, 5276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool expected) { 5286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i; 5296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (i = 0; i < sampleCharsLength; ++i) { 5306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool result = propFn(sampleChars[i]); 5316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (result != expected) { 5326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: character property function %s(U+%04x)=%d is wrong\n", 5336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org propName, sampleChars[i], result); 5346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 5376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* Tests for isDefined(u_isdefined)(, isBaseForm(u_isbase()), isSpaceChar(u_isspace()), isWhiteSpace(), u_CharDigitValue() */ 5396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestMisc() 5406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 5416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const UChar32 sampleSpaces[] = {0x0020, 0x00a0, 0x2000, 0x2001, 0x2005}; 5426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const UChar32 sampleNonSpaces[] = {0x61, 0x62, 0x63, 0x64, 0x74}; 5436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const UChar32 sampleUndefined[] = {0xfff1, 0xfff7, 0xfa6e}; 5446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const UChar32 sampleDefined[] = {0x523E, 0x4f88, 0xfffd}; 5456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const UChar32 sampleBase[] = {0x0061, 0x0031, 0x03d2}; 5466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const UChar32 sampleNonBase[] = {0x002B, 0x0020, 0x203B}; 5476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* static const UChar sampleChars[] = {0x000a, 0x0045, 0x4e00, 0xDC00, 0xFFE8, 0xFFF0};*/ 5486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const UChar32 sampleDigits[]= {0x0030, 0x0662, 0x0F23, 0x0ED5}; 5496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const UChar32 sampleNonDigits[] = {0x0010, 0x0041, 0x0122, 0x68FE}; 5506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const UChar32 sampleWhiteSpaces[] = {0x2008, 0x2009, 0x200a, 0x001c, 0x000c}; 5516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const UChar32 sampleNonWhiteSpaces[] = {0x61, 0x62, 0x3c, 0x28, 0x3f, 0x85, 0x2007, 0xffef}; 5526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const int32_t sampleDigitValues[] = {0, 2, 3, 5}; 5546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t mask; 5566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i; 5586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char icuVersion[U_MAX_VERSION_STRING_LENGTH]; 5596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UVersionInfo realVersion; 5606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(icuVersion, 0, U_MAX_VERSION_STRING_LENGTH); 5626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org testSampleCharProps(u_isspace, "u_isspace", sampleSpaces, LENGTHOF(sampleSpaces), TRUE); 5646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org testSampleCharProps(u_isspace, "u_isspace", sampleNonSpaces, LENGTHOF(sampleNonSpaces), FALSE); 5656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org testSampleCharProps(u_isJavaSpaceChar, "u_isJavaSpaceChar", 5676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sampleSpaces, LENGTHOF(sampleSpaces), TRUE); 5686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org testSampleCharProps(u_isJavaSpaceChar, "u_isJavaSpaceChar", 5696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sampleNonSpaces, LENGTHOF(sampleNonSpaces), FALSE); 5706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org testSampleCharProps(u_isWhitespace, "u_isWhitespace", 5726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sampleWhiteSpaces, LENGTHOF(sampleWhiteSpaces), TRUE); 5736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org testSampleCharProps(u_isWhitespace, "u_isWhitespace", 5746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sampleNonWhiteSpaces, LENGTHOF(sampleNonWhiteSpaces), FALSE); 5756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org testSampleCharProps(u_isdefined, "u_isdefined", 5776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sampleDefined, LENGTHOF(sampleDefined), TRUE); 5786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org testSampleCharProps(u_isdefined, "u_isdefined", 5796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sampleUndefined, LENGTHOF(sampleUndefined), FALSE); 5806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org testSampleCharProps(u_isbase, "u_isbase", sampleBase, LENGTHOF(sampleBase), TRUE); 5826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org testSampleCharProps(u_isbase, "u_isbase", sampleNonBase, LENGTHOF(sampleNonBase), FALSE); 5836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org testSampleCharProps(u_isdigit, "u_isdigit", sampleDigits, LENGTHOF(sampleDigits), TRUE); 5856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org testSampleCharProps(u_isdigit, "u_isdigit", sampleNonDigits, LENGTHOF(sampleNonDigits), FALSE); 5866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (i = 0; i < LENGTHOF(sampleDigits); i++) { 5886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (u_charDigitValue(sampleDigits[i]) != sampleDigitValues[i]) { 5896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_charDigitValue(U+04x)=%d != %d\n", 5906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sampleDigits[i], u_charDigitValue(sampleDigits[i]), sampleDigitValues[i]); 5916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Tests the ICU version #*/ 5956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_getVersion(realVersion); 5966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_versionToString(realVersion, icuVersion); 5976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (strncmp(icuVersion, U_ICU_VERSION, uprv_min((int32_t)strlen(icuVersion), (int32_t)strlen(U_ICU_VERSION))) != 0) 5986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 5996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ICU version test failed. Header says=%s, got=%s \n", U_ICU_VERSION, icuVersion); 6006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if defined(ICU_VERSION) 6026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* test only happens where we have configure.in with VERSION - sanity check. */ 6036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(strcmp(U_ICU_VERSION, ICU_VERSION)) 6046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 6056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ICU version mismatch: Header says %s, build environment says %s.\n", U_ICU_VERSION, ICU_VERSION); 6066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 6086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* test U_GC_... */ 6106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( 6116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_GET_GC_MASK(0x41)!=U_GC_LU_MASK || 6126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_GET_GC_MASK(0x662)!=U_GC_ND_MASK || 6136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_GET_GC_MASK(0xa0)!=U_GC_ZS_MASK || 6146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_GET_GC_MASK(0x28)!=U_GC_PS_MASK || 6156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_GET_GC_MASK(0x2044)!=U_GC_SM_MASK || 6166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_GET_GC_MASK(0xe0063)!=U_GC_CF_MASK 6176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 6186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: U_GET_GC_MASK does not work properly\n"); 6196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=0; 6226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_CN_MASK)|U_GC_CN_MASK; 6236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_LU_MASK)|U_GC_LU_MASK; 6256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_LL_MASK)|U_GC_LL_MASK; 6266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_LT_MASK)|U_GC_LT_MASK; 6276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_LM_MASK)|U_GC_LM_MASK; 6286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_LO_MASK)|U_GC_LO_MASK; 6296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_MN_MASK)|U_GC_MN_MASK; 6316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_ME_MASK)|U_GC_ME_MASK; 6326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_MC_MASK)|U_GC_MC_MASK; 6336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_ND_MASK)|U_GC_ND_MASK; 6356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_NL_MASK)|U_GC_NL_MASK; 6366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_NO_MASK)|U_GC_NO_MASK; 6376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_ZS_MASK)|U_GC_ZS_MASK; 6396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_ZL_MASK)|U_GC_ZL_MASK; 6406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_ZP_MASK)|U_GC_ZP_MASK; 6416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_CC_MASK)|U_GC_CC_MASK; 6436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_CF_MASK)|U_GC_CF_MASK; 6446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_CO_MASK)|U_GC_CO_MASK; 6456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_CS_MASK)|U_GC_CS_MASK; 6466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_PD_MASK)|U_GC_PD_MASK; 6486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_PS_MASK)|U_GC_PS_MASK; 6496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_PE_MASK)|U_GC_PE_MASK; 6506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_PC_MASK)|U_GC_PC_MASK; 6516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_PO_MASK)|U_GC_PO_MASK; 6526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_SM_MASK)|U_GC_SM_MASK; 6546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_SC_MASK)|U_GC_SC_MASK; 6556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_SK_MASK)|U_GC_SK_MASK; 6566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_SO_MASK)|U_GC_SO_MASK; 6576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_PI_MASK)|U_GC_PI_MASK; 6596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_PF_MASK)|U_GC_PF_MASK; 6606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(mask!=(U_CHAR_CATEGORY_COUNT<32 ? U_MASK(U_CHAR_CATEGORY_COUNT)-1: 0xffffffff)) { 6626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: problems with U_GC_XX_MASK constants\n"); 6636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=0; 6666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_C_MASK)|U_GC_C_MASK; 6676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_L_MASK)|U_GC_L_MASK; 6686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_M_MASK)|U_GC_M_MASK; 6696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_N_MASK)|U_GC_N_MASK; 6706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_Z_MASK)|U_GC_Z_MASK; 6716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_P_MASK)|U_GC_P_MASK; 6726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=(mask&~U_GC_S_MASK)|U_GC_S_MASK; 6736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(mask!=(U_CHAR_CATEGORY_COUNT<32 ? U_MASK(U_CHAR_CATEGORY_COUNT)-1: 0xffffffff)) { 6756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: problems with U_GC_Y_MASK constants\n"); 6766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 6786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const UChar32 digit[10]={ 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,0x0038,0x0039 }; 6796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0; i<10; i++){ 6806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(digit[i]!=u_forDigit(i,10)){ 6816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_forDigit failed for %i. Expected: 0x%4X Got: 0x%4X\n",i,digit[i],u_forDigit(i,10)); 6826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* test u_digit() */ 6876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 6886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const struct { 6896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 c; 6906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int8_t radix, value; 6916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } data[]={ 6926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* base 16 */ 6936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0031, 16, 1 }, 6946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0038, 16, 8 }, 6956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0043, 16, 12 }, 6966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0066, 16, 15 }, 6976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x00e4, 16, -1 }, 6986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0662, 16, 2 }, 6996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x06f5, 16, 5 }, 7006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xff13, 16, 3 }, 7016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xff41, 16, 10 }, 7026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* base 8 */ 7046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0031, 8, 1 }, 7056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0038, 8, -1 }, 7066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0043, 8, -1 }, 7076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0066, 8, -1 }, 7086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x00e4, 8, -1 }, 7096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0662, 8, 2 }, 7106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x06f5, 8, 5 }, 7116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xff13, 8, 3 }, 7126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xff41, 8, -1 }, 7136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* base 36 */ 7156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x5a, 36, 35 }, 7166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x7a, 36, 35 }, 7176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xff3a, 36, 35 }, 7186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xff5a, 36, 35 }, 7196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* wrong radix values */ 7216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0031, 1, -1 }, 7226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xff3a, 37, -1 } 7236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 7246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0; i<LENGTHOF(data); ++i) { 7266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_digit(data[i].c, data[i].radix)!=data[i].value) { 7276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_digit(U+%04x, %d)=%d expected %d\n", 7286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org data[i].c, 7296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org data[i].radix, 7306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_digit(data[i].c, data[i].radix), 7316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org data[i].value); 7326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 7366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* test C/POSIX-style functions --------------------------------------------- */ 7386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* bit flags */ 7406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define ISAL 1 7416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define ISLO 2 7426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define ISUP 4 7436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define ISDI 8 7456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define ISXD 0x10 7466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define ISAN 0x20 7486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define ISPU 0x40 7506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define ISGR 0x80 7516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define ISPR 0x100 7526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define ISSP 0x200 7546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define ISBL 0x400 7556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define ISCN 0x800 7566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* C/POSIX-style functions, in the same order as the bit flags */ 7586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef UBool U_EXPORT2 IsPOSIXClass(UChar32 c); 7596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const struct { 7616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IsPOSIXClass *fn; 7626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *name; 7636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} posixClasses[]={ 7646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { u_isalpha, "isalpha" }, 7656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { u_islower, "islower" }, 7666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { u_isupper, "isupper" }, 7676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { u_isdigit, "isdigit" }, 7686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { u_isxdigit, "isxdigit" }, 7696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { u_isalnum, "isalnum" }, 7706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { u_ispunct, "ispunct" }, 7716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { u_isgraph, "isgraph" }, 7726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { u_isprint, "isprint" }, 7736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { u_isspace, "isspace" }, 7746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { u_isblank, "isblank" }, 7756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { u_iscntrl, "iscntrl" } 7766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 7776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const struct { 7796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 c; 7806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t posixResults; 7816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} posixData[]={ 7826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0008, ISCN }, /* backspace */ 7836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0009, ISSP|ISBL|ISCN }, /* TAB */ 7846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x000a, ISSP| ISCN }, /* LF */ 7856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x000c, ISSP| ISCN }, /* FF */ 7866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x000d, ISSP| ISCN }, /* CR */ 7876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0020, ISPR|ISSP|ISBL }, /* space */ 7886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0021, ISPU|ISGR|ISPR }, /* ! */ 7896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0033, ISDI|ISXD|ISAN| ISGR|ISPR }, /* 3 */ 7906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0040, ISPU|ISGR|ISPR }, /* @ */ 7916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0041, ISAL| ISUP| ISXD|ISAN| ISGR|ISPR }, /* A */ 7926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x007a, ISAL|ISLO| ISAN| ISGR|ISPR }, /* z */ 7936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x007b, ISPU|ISGR|ISPR }, /* { */ 7946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0085, ISSP| ISCN }, /* NEL */ 7956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x00a0, ISPR|ISSP|ISBL }, /* NBSP */ 7966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x00a4, ISGR|ISPR }, /* currency sign */ 7976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x00e4, ISAL|ISLO| ISAN| ISGR|ISPR }, /* a-umlaut */ 7986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0300, ISGR|ISPR }, /* combining grave */ 7996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0600, ISCN }, /* arabic number sign */ 8006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0627, ISAL| ISAN| ISGR|ISPR }, /* alef */ 8016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0663, ISDI|ISXD|ISAN| ISGR|ISPR }, /* arabic 3 */ 8026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x2002, ISPR|ISSP|ISBL }, /* en space */ 8036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x2007, ISPR|ISSP|ISBL }, /* figure space */ 8046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x2009, ISPR|ISSP|ISBL }, /* thin space */ 8056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x200b, ISCN }, /* ZWSP */ 8066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*{ 0x200b, ISPR|ISSP },*/ /* ZWSP */ /* ZWSP became a control char in 4.0.1*/ 8076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x200e, ISCN }, /* LRM */ 8086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x2028, ISPR|ISSP| ISCN }, /* LS */ 8096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x2029, ISPR|ISSP| ISCN }, /* PS */ 8106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x20ac, ISGR|ISPR }, /* Euro */ 8116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xff15, ISDI|ISXD|ISAN| ISGR|ISPR }, /* fullwidth 5 */ 8126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xff25, ISAL| ISUP| ISXD|ISAN| ISGR|ISPR }, /* fullwidth E */ 8136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xff35, ISAL| ISUP| ISAN| ISGR|ISPR }, /* fullwidth U */ 8146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xff45, ISAL|ISLO| ISXD|ISAN| ISGR|ISPR }, /* fullwidth e */ 8156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xff55, ISAL|ISLO| ISAN| ISGR|ISPR } /* fullwidth u */ 8166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 8176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void 8196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTestPOSIX() { 8206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t mask; 8216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t cl, i; 8226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool expect; 8236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask=1; 8256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(cl=0; cl<12; ++cl) { 8266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0; i<LENGTHOF(posixData); ++i) { 8276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org expect=(UBool)((posixData[i].posixResults&mask)!=0); 8286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(posixClasses[cl].fn(posixData[i].c)!=expect) { 8296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_%s(U+%04x)=%s is wrong\n", 8306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org posixClasses[cl].name, posixData[i].c, expect ? "FALSE" : "TRUE"); 8316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mask<<=1; 8346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 8366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* Tests for isControl(u_iscntrl()) and isPrintable(u_isprint()) */ 8386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestControlPrint() 8396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 8406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar32 sampleControl[] = {0x1b, 0x97, 0x82, 0x2028, 0x2029, 0x200c, 0x202b}; 8416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar32 sampleNonControl[] = {0x61, 0x0031, 0x00e2}; 8426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar32 samplePrintable[] = {0x0042, 0x005f, 0x2014}; 8436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar32 sampleNonPrintable[] = {0x200c, 0x009f, 0x001b}; 8446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 c; 8456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org testSampleCharProps(u_iscntrl, "u_iscntrl", sampleControl, LENGTHOF(sampleControl), TRUE); 8476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org testSampleCharProps(u_iscntrl, "u_iscntrl", sampleNonControl, LENGTHOF(sampleNonControl), FALSE); 8486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org testSampleCharProps(u_isprint, "u_isprint", 8506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org samplePrintable, LENGTHOF(samplePrintable), TRUE); 8516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org testSampleCharProps(u_isprint, "u_isprint", 8526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sampleNonPrintable, LENGTHOF(sampleNonPrintable), FALSE); 8536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* test all ISO 8 controls */ 8556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(c=0; c<=0x9f; ++c) { 8566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(c==0x20) { 8576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* skip ASCII graphic characters and continue with DEL */ 8586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c=0x7f; 8596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(!u_iscntrl(c)) { 8616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_iscntrl(ISO 8 control U+%04x)=FALSE\n", c); 8626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(!u_isISOControl(c)) { 8646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_isISOControl(ISO 8 control U+%04x)=FALSE\n", c); 8656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_isprint(c)) { 8676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_isprint(ISO 8 control U+%04x)=TRUE\n", c); 8686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* test all Latin-1 graphic characters */ 8726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(c=0x20; c<=0xff; ++c) { 8736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(c==0x7f) { 8746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c=0xa0; 8756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if(c==0xad) { 8766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Unicode 4 changes 00AD Soft Hyphen to Cf (and it is in fact not printable) */ 8776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ++c; 8786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(!u_isprint(c)) { 8806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_isprint(Latin-1 graphic character U+%04x)=FALSE\n", c); 8816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 8846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* u_isJavaIDStart, u_isJavaIDPart, u_isIDStart(), u_isIDPart(), u_isIDIgnorable()*/ 8866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestIdentifier() 8876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 8886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar32 sampleJavaIDStart[] = {0x0071, 0x00e4, 0x005f}; 8896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar32 sampleNonJavaIDStart[] = {0x0020, 0x2030, 0x0082}; 8906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar32 sampleJavaIDPart[] = {0x005f, 0x0032, 0x0045}; 8916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar32 sampleNonJavaIDPart[] = {0x2030, 0x2020, 0x0020}; 8926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar32 sampleUnicodeIDStart[] = {0x0250, 0x00e2, 0x0061}; 8936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar32 sampleNonUnicodeIDStart[] = {0x2000, 0x000a, 0x2019}; 8946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar32 sampleUnicodeIDPart[] = {0x005f, 0x0032, 0x0045}; 8956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar32 sampleNonUnicodeIDPart[] = {0x2030, 0x00a3, 0x0020}; 8966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar32 sampleIDIgnore[] = {0x0006, 0x0010, 0x206b, 0x85}; 8976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar32 sampleNonIDIgnore[] = {0x0075, 0x00a3, 0x0061}; 8986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org testSampleCharProps(u_isJavaIDStart, "u_isJavaIDStart", 9006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sampleJavaIDStart, LENGTHOF(sampleJavaIDStart), TRUE); 9016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org testSampleCharProps(u_isJavaIDStart, "u_isJavaIDStart", 9026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sampleNonJavaIDStart, LENGTHOF(sampleNonJavaIDStart), FALSE); 9036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org testSampleCharProps(u_isJavaIDPart, "u_isJavaIDPart", 9056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sampleJavaIDPart, LENGTHOF(sampleJavaIDPart), TRUE); 9066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org testSampleCharProps(u_isJavaIDPart, "u_isJavaIDPart", 9076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sampleNonJavaIDPart, LENGTHOF(sampleNonJavaIDPart), FALSE); 9086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* IDPart should imply IDStart */ 9106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org testSampleCharProps(u_isJavaIDPart, "u_isJavaIDPart", 9116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sampleJavaIDStart, LENGTHOF(sampleJavaIDStart), TRUE); 9126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org testSampleCharProps(u_isIDStart, "u_isIDStart", 9146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sampleUnicodeIDStart, LENGTHOF(sampleUnicodeIDStart), TRUE); 9156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org testSampleCharProps(u_isIDStart, "u_isIDStart", 9166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sampleNonUnicodeIDStart, LENGTHOF(sampleNonUnicodeIDStart), FALSE); 9176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org testSampleCharProps(u_isIDPart, "u_isIDPart", 9196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sampleUnicodeIDPart, LENGTHOF(sampleUnicodeIDPart), TRUE); 9206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org testSampleCharProps(u_isIDPart, "u_isIDPart", 9216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sampleNonUnicodeIDPart, LENGTHOF(sampleNonUnicodeIDPart), FALSE); 9226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* IDPart should imply IDStart */ 9246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org testSampleCharProps(u_isIDPart, "u_isIDPart", 9256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sampleUnicodeIDStart, LENGTHOF(sampleUnicodeIDStart), TRUE); 9266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org testSampleCharProps(u_isIDIgnorable, "u_isIDIgnorable", 9286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sampleIDIgnore, LENGTHOF(sampleIDIgnore), TRUE); 9296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org testSampleCharProps(u_isIDIgnorable, "u_isIDIgnorable", 9306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sampleNonIDIgnore, LENGTHOF(sampleNonIDIgnore), FALSE); 9316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 9326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* for each line of UnicodeData.txt, check some of the properties */ 9346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef struct UnicodeDataContext { 9356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if UCONFIG_NO_NORMALIZATION 9366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const void *dummy; 9376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else 9386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UNormalizer2 *nfc; 9396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UNormalizer2 *nfkc; 9406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 9416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} UnicodeDataContext; 9426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 9446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * ### TODO 9456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This test fails incorrectly if the First or Last code point of a repetitive area 9466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * is overridden, which is allowed and is encouraged for the PUAs. 9476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Currently, this means that both area First/Last and override lines are 9486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * tested against the properties from the API, 9496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and the area boundary will not match and cause an error. 9506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 9516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function should detect area boundaries and skip them for the test of individual 9526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * code points' properties. 9536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Then it should check that the areas contain all the same properties except where overridden. 9546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For this, it would have had to set a flag for which code points were listed explicitly. 9556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 9566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void U_CALLCONV 9576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgunicodeDataLineFn(void *context, 9586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *fields[][2], int32_t fieldCount, 9596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode *pErrorCode) 9606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 9616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char buffer[100]; 9626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *d; 9636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *end; 9646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t value; 9656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 c; 9666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i; 9676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int8_t type; 9686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t dt; 9696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar dm[32], s[32]; 9706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t dmLength, length; 9716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_NORMALIZATION 9736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UNormalizer2 *nfc, *nfkc; 9746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 9756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* get the character code, field 0 */ 9776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c=strtoul(fields[0][0], &end, 16); 9786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(end<=fields[0][0] || end!=fields[0][1]) { 9796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: syntax error in field 0 at %s\n", fields[0][0]); 9806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 9816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if((uint32_t)c>=UCHAR_MAX_VALUE + 1) { 9836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error in UnicodeData.txt: code point %lu out of range\n", c); 9846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 9856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* get general category, field 2 */ 9886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *fields[2][1]=0; 9896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org type = (int8_t)tagValues[MakeProp(fields[2][0])]; 9906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_charType(c)!=type) { 9916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_charType(U+%04lx)==%u instead of %u\n", c, u_charType(c), type); 9926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if((uint32_t)u_getIntPropertyValue(c, UCHAR_GENERAL_CATEGORY_MASK)!=U_MASK(type)) { 9946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: (uint32_t)u_getIntPropertyValue(U+%04lx, UCHAR_GENERAL_CATEGORY_MASK)!=U_MASK(u_charType())\n", c); 9956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* get canonical combining class, field 3 */ 9986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org value=strtoul(fields[3][0], &end, 10); 9996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(end<=fields[3][0] || end!=fields[3][1]) { 10006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: syntax error in field 3 at code 0x%lx\n", c); 10016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 10026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(value>255) { 10046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error in UnicodeData.txt: combining class %lu out of range\n", value); 10056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 10066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_NORMALIZATION 10086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(value!=u_getCombiningClass(c) || value!=(uint32_t)u_getIntPropertyValue(c, UCHAR_CANONICAL_COMBINING_CLASS)) { 10096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_getCombiningClass(U+%04lx)==%hu instead of %lu\n", c, u_getCombiningClass(c), value); 10106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org nfkc=((UnicodeDataContext *)context)->nfkc; 10126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(value!=unorm2_getCombiningClass(nfkc, c)) { 10136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: unorm2_getCombiningClass(nfkc, U+%04lx)==%hu instead of %lu\n", c, unorm2_getCombiningClass(nfkc, c), value); 10146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 10166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* get BiDi category, field 4 */ 10186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *fields[4][1]=0; 10196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org i=MakeDir(fields[4][0]); 10206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(i!=u_charDirection(c) || i!=u_getIntPropertyValue(c, UCHAR_BIDI_CLASS)) { 10216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_charDirection(U+%04lx)==%u instead of %u (%s)\n", c, u_charDirection(c), MakeDir(fields[4][0]), fields[4][0]); 10226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* get Decomposition_Type & Decomposition_Mapping, field 5 */ 10256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org d=NULL; 10266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(fields[5][0]==fields[5][1]) { 10276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* no decomposition, except UnicodeData.txt omits Hangul syllable decompositions */ 10286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(c==0xac00 || c==0xd7a3) { 10296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dt=U_DT_CANONICAL; 10306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 10316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dt=U_DT_NONE; 10326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 10346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org d=fields[5][0]; 10356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *fields[5][1]=0; 10366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dt=UCHAR_INVALID_CODE; 10376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(*d=='<') { 10386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org end=strchr(++d, '>'); 10396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(end!=NULL) { 10406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *end=0; 10416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dt=u_getPropertyValueEnum(UCHAR_DECOMPOSITION_TYPE, d); 10426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org d=u_skipWhitespace(end+1); 10436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 10456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dt=U_DT_CANONICAL; 10466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(dt>U_DT_NONE) { 10496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(c==0xac00) { 10506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dm[0]=0x1100; 10516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dm[1]=0x1161; 10526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dm[2]=0; 10536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dmLength=2; 10546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if(c==0xd7a3) { 10556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dm[0]=0xd788; 10566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dm[1]=0x11c2; 10576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dm[2]=0; 10586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dmLength=2; 10596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 10606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dmLength=u_parseString(d, dm, 32, NULL, pErrorCode); 10616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 10636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dmLength=-1; 10646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(dt<0 || U_FAILURE(*pErrorCode)) { 10666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error in UnicodeData.txt: syntax error in U+%04lX decomposition field\n", (long)c); 10676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 10686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_NORMALIZATION 10706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org i=u_getIntPropertyValue(c, UCHAR_DECOMPOSITION_TYPE); 10716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(i!=dt) { 10726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_getIntPropertyValue(U+%04lx, UCHAR_DECOMPOSITION_TYPE)==%d instead of %d\n", c, i, dt); 10736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Expect Decomposition_Mapping=nfkc.getRawDecomposition(c). */ 10756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=unorm2_getRawDecomposition(nfkc, c, s, 32, pErrorCode); 10766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(*pErrorCode) || length!=dmLength || (length>0 && 0!=u_strcmp(s, dm))) { 10776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: unorm2_getRawDecomposition(nfkc, U+%04lx)==%d instead of %d " 10786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "or the Decomposition_Mapping is different (%s)\n", 10796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c, length, dmLength, u_errorName(*pErrorCode)); 10806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 10816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* For canonical decompositions only, expect Decomposition_Mapping=nfc.getRawDecomposition(c). */ 10836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(dt!=U_DT_CANONICAL) { 10846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dmLength=-1; 10856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org nfc=((UnicodeDataContext *)context)->nfc; 10876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=unorm2_getRawDecomposition(nfc, c, s, 32, pErrorCode); 10886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(*pErrorCode) || length!=dmLength || (length>0 && 0!=u_strcmp(s, dm))) { 10896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: unorm2_getRawDecomposition(nfc, U+%04lx)==%d instead of %d " 10906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "or the Decomposition_Mapping is different (%s)\n", 10916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c, length, dmLength, u_errorName(*pErrorCode)); 10926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 10936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* recompose */ 10956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(dt==U_DT_CANONICAL && !u_hasBinaryProperty(c, UCHAR_FULL_COMPOSITION_EXCLUSION)) { 10966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 a, b, composite; 10976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org i=0; 10986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U16_NEXT(dm, i, dmLength, a); 10996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U16_NEXT(dm, i, dmLength, b); 11006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* i==dmLength */ 11016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org composite=unorm2_composePair(nfc, a, b); 11026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(composite!=c) { 11036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: nfc U+%04lX decomposes to U+%04lX+U+%04lX but does not compose back (instead U+%04lX)\n", 11046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (long)c, (long)a, (long)b, (long)composite); 11056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 11076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Note: NFKC has fewer round-trip mappings than NFC, 11086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * so we can't just test unorm2_composePair(nfkc, a, b) here without further data. 11096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 11106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 11126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* get ISO Comment, field 11 */ 11146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *fields[11][1]=0; 11156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org i=u_getISOComment(c, buffer, sizeof(buffer), pErrorCode); 11166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(*pErrorCode) || 0!=strcmp(fields[11][0], buffer)) { 11176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(*pErrorCode, "error: u_getISOComment(U+%04lx) wrong (%s): \"%s\" should be \"%s\"\n", 11186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c, u_errorName(*pErrorCode), 11196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_FAILURE(*pErrorCode) ? buffer : "[error]", 11206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fields[11][0]); 11216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* get uppercase mapping, field 12 */ 11246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(fields[12][0]!=fields[12][1]) { 11256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org value=strtoul(fields[12][0], &end, 16); 11266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(end!=fields[12][1]) { 11276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: syntax error in field 12 at code 0x%lx\n", c); 11286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 11296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if((UChar32)value!=u_toupper(c)) { 11316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_toupper(U+%04lx)==U+%04lx instead of U+%04lx\n", c, u_toupper(c), value); 11326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 11346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* no case mapping: the API must map the code point to itself */ 11356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(c!=u_toupper(c)) { 11366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: U+%04lx does not have an uppercase mapping but u_toupper()==U+%04lx\n", c, u_toupper(c)); 11376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* get lowercase mapping, field 13 */ 11416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(fields[13][0]!=fields[13][1]) { 11426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org value=strtoul(fields[13][0], &end, 16); 11436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(end!=fields[13][1]) { 11446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: syntax error in field 13 at code 0x%lx\n", c); 11456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 11466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if((UChar32)value!=u_tolower(c)) { 11486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_tolower(U+%04lx)==U+%04lx instead of U+%04lx\n", c, u_tolower(c), value); 11496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 11516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* no case mapping: the API must map the code point to itself */ 11526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(c!=u_tolower(c)) { 11536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: U+%04lx does not have a lowercase mapping but u_tolower()==U+%04lx\n", c, u_tolower(c)); 11546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* get titlecase mapping, field 14 */ 11586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(fields[14][0]!=fields[14][1]) { 11596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org value=strtoul(fields[14][0], &end, 16); 11606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(end!=fields[14][1]) { 11616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: syntax error in field 14 at code 0x%lx\n", c); 11626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 11636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if((UChar32)value!=u_totitle(c)) { 11656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_totitle(U+%04lx)==U+%04lx instead of U+%04lx\n", c, u_totitle(c), value); 11666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 11686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* no case mapping: the API must map the code point to itself */ 11696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(c!=u_totitle(c)) { 11706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: U+%04lx does not have a titlecase mapping but u_totitle()==U+%04lx\n", c, u_totitle(c)); 11716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 11746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UBool U_CALLCONV 11766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgenumTypeRange(const void *context, UChar32 start, UChar32 limit, UCharCategory type) { 11776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const UChar32 test[][2]={ 11786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {0x41, U_UPPERCASE_LETTER}, 11796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {0x308, U_NON_SPACING_MARK}, 11806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {0xfffe, U_GENERAL_OTHER_TYPES}, 11816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {0xe0041, U_FORMAT_CHAR}, 11826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {0xeffff, U_UNASSIGNED} 11836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 11846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i, count; 11866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(0!=strcmp((const char *)context, "a1")) { 11886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_enumCharTypes() passes on an incorrect context pointer\n"); 11896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return FALSE; 11906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count=LENGTHOF(test); 11936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0; i<count; ++i) { 11946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(start<=test[i][0] && test[i][0]<limit) { 11956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(type!=(UCharCategory)test[i][1]) { 11966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_enumCharTypes() has range [U+%04lx, U+%04lx[ with %ld instead of U+%04lx with %ld\n", 11976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org start, limit, (long)type, test[i][0], test[i][1]); 11986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* stop at the range that includes the last test code point (increases code coverage for enumeration) */ 12006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return i==(count-1) ? FALSE : TRUE; 12016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(start>test[count-1][0]) { 12056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_enumCharTypes() has range [U+%04lx, U+%04lx[ with %ld after it should have stopped\n", 12066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org start, limit, (long)type); 12076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return FALSE; 12086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return TRUE; 12116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 12126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UBool U_CALLCONV 12146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgenumDefaultsRange(const void *context, UChar32 start, UChar32 limit, UCharCategory type) { 12156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* default Bidi classes for unassigned code points, from the DerivedBidiClass.txt header */ 12166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const int32_t defaultBidi[][2]={ /* { limit, class } */ 12176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0590, U_LEFT_TO_RIGHT }, 12186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0600, U_RIGHT_TO_LEFT }, 12196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x07C0, U_RIGHT_TO_LEFT_ARABIC }, 12206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x08A0, U_RIGHT_TO_LEFT }, 12216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0900, U_RIGHT_TO_LEFT_ARABIC }, /* Unicode 6.1 changes U+08A0..U+08FF from R to AL */ 12226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x20A0, U_LEFT_TO_RIGHT }, 12236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x20D0, U_EUROPEAN_NUMBER_TERMINATOR }, /* Unicode 6.3 changes the currency symbols block U+20A0..U+20CF to default to ET not L */ 12246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xFB1D, U_LEFT_TO_RIGHT }, 12256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xFB50, U_RIGHT_TO_LEFT }, 12266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xFE00, U_RIGHT_TO_LEFT_ARABIC }, 12276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xFE70, U_LEFT_TO_RIGHT }, 12286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xFF00, U_RIGHT_TO_LEFT_ARABIC }, 12296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x10800, U_LEFT_TO_RIGHT }, 12306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x11000, U_RIGHT_TO_LEFT }, 12316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1E800, U_LEFT_TO_RIGHT }, /* new default-R range in Unicode 5.2: U+1E800 - U+1EFFF */ 12326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1EE00, U_RIGHT_TO_LEFT }, 12336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1EF00, U_RIGHT_TO_LEFT_ARABIC }, /* Unicode 6.1 changes U+1EE00..U+1EEFF from R to AL */ 12346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1F000, U_RIGHT_TO_LEFT }, 12356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x110000, U_LEFT_TO_RIGHT } 12366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 12376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 c; 12396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i; 12406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCharDirection shouldBeDir; 12416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 12436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * LineBreak.txt specifies: 12446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * # - Assigned characters that are not listed explicitly are given the value 12456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * # "AL". 12466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * # - Unassigned characters are given the value "XX". 12476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 12486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * PUA characters are listed explicitly with "XX". 12496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Verify that no assigned character has "XX". 12506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 12516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(type!=U_UNASSIGNED && type!=U_PRIVATE_USE_CHAR) { 12526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c=start; 12536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while(c<limit) { 12546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(0==u_getIntPropertyValue(c, UCHAR_LINE_BREAK)) { 12556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error UCHAR_LINE_BREAK(assigned U+%04lx)=XX\n", c); 12566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ++c; 12586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 12626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Verify default Bidi classes. 12636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For recent Unicode versions, see UCD.html. 12646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 12656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For older Unicode versions: 12666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * See table 3-7 "Bidirectional Character Types" in UAX #9. 12676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * http://www.unicode.org/reports/tr9/ 12686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 12696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * See also DerivedBidiClass.txt for Cn code points! 12706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 12716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Unicode 4.0.1/Public Review Issue #28 (http://www.unicode.org/review/resolved-pri.html) 12726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * changed some default values. 12736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * In particular, non-characters and unassigned Default Ignorable Code Points 12746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * change from L to BN. 12756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 12766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UCD.html version 4.0.1 does not yet reflect these changes. 12776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 12786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(type==U_UNASSIGNED || type==U_PRIVATE_USE_CHAR) { 12796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* enumerate the intersections of defaultBidi ranges with [start..limit[ */ 12806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c=start; 12816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0; i<LENGTHOF(defaultBidi) && c<limit; ++i) { 12826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if((int32_t)c<defaultBidi[i][0]) { 12836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while(c<limit && (int32_t)c<defaultBidi[i][0]) { 12846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_IS_UNICODE_NONCHAR(c) || u_hasBinaryProperty(c, UCHAR_DEFAULT_IGNORABLE_CODE_POINT)) { 12856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org shouldBeDir=U_BOUNDARY_NEUTRAL; 12866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 12876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org shouldBeDir=(UCharDirection)defaultBidi[i][1]; 12886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( u_charDirection(c)!=shouldBeDir || 12916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_getIntPropertyValue(c, UCHAR_BIDI_CLASS)!=shouldBeDir 12926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 12936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_charDirection(unassigned/PUA U+%04lx)=%s should be %s\n", 12946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c, dirStrings[u_charDirection(c)], dirStrings[shouldBeDir]); 12956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ++c; 12976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return TRUE; 13036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 13046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* tests for several properties */ 13066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestUnicodeData() 13076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 13086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UVersionInfo expectVersionArray; 13096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UVersionInfo versionArray; 13106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *fields[15][2]; 13116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode errorCode; 13126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 c; 13136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int8_t type; 13146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeDataContext context; 13166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_versionFromString(expectVersionArray, U_UNICODE_VERSION); 13186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_getUnicodeVersion(versionArray); 13196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(memcmp(versionArray, expectVersionArray, U_MAX_VERSION_LENGTH) != 0) 13206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 13216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Testing u_getUnicodeVersion() - expected " U_UNICODE_VERSION " got %d.%d.%d.%d\n", 13226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org versionArray[0], versionArray[1], versionArray[2], versionArray[3]); 13236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if defined(ICU_UNICODE_VERSION) 13266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* test only happens where we have configure.in with UNICODE_VERSION - sanity check. */ 13276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(strcmp(U_UNICODE_VERSION, ICU_UNICODE_VERSION)) 13286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 13296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Testing configure.in's ICU_UNICODE_VERSION - expected " U_UNICODE_VERSION " got " ICU_UNICODE_VERSION "\n"); 13306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 13326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (ublock_getCode((UChar)0x0041) != UBLOCK_BASIC_LATIN || u_getIntPropertyValue(0x41, UCHAR_BLOCK)!=(int32_t)UBLOCK_BASIC_LATIN) { 13346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ublock_getCode(U+0041) property failed! Expected : %i Got: %i \n", UBLOCK_BASIC_LATIN,ublock_getCode((UChar)0x0041)); 13356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 13386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_NORMALIZATION 13396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org context.nfc=unorm2_getNFCInstance(&errorCode); 13406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org context.nfkc=unorm2_getNFKCInstance(&errorCode); 13416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(errorCode)) { 13426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("error: unable to open an NFC or NFKC UNormalizer2 - %s\n", u_errorName(errorCode)); 13436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 13446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 13466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org parseUCDFile("UnicodeData.txt", fields, 15, unicodeDataLineFn, &context, &errorCode); 13476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(errorCode)) { 13486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; /* if we couldn't parse UnicodeData.txt, we should return */ 13496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* sanity check on repeated properties */ 13526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(c=0xfffe; c<=0x10ffff;) { 13536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org type=u_charType(c); 13546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if((uint32_t)u_getIntPropertyValue(c, UCHAR_GENERAL_CATEGORY_MASK)!=U_MASK(type)) { 13556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: (uint32_t)u_getIntPropertyValue(U+%04lx, UCHAR_GENERAL_CATEGORY_MASK)!=U_MASK(u_charType())\n", c); 13566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(type!=U_UNASSIGNED) { 13586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_charType(U+%04lx)!=U_UNASSIGNED (returns %d)\n", c, u_charType(c)); 13596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if((c&0xffff)==0xfffe) { 13616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ++c; 13626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 13636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c+=0xffff; 13646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* test that PUA is not "unassigned" */ 13686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(c=0xe000; c<=0x10fffd;) { 13696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org type=u_charType(c); 13706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if((uint32_t)u_getIntPropertyValue(c, UCHAR_GENERAL_CATEGORY_MASK)!=U_MASK(type)) { 13716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: (uint32_t)u_getIntPropertyValue(U+%04lx, UCHAR_GENERAL_CATEGORY_MASK)!=U_MASK(u_charType())\n", c); 13726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(type==U_UNASSIGNED) { 13746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_charType(U+%04lx)==U_UNASSIGNED\n", c); 13756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if(type!=U_PRIVATE_USE_CHAR) { 13766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("PUA override: u_charType(U+%04lx)=%d\n", c, type); 13776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(c==0xf8ff) { 13796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c=0xf0000; 13806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if(c==0xffffd) { 13816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c=0x100000; 13826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 13836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ++c; 13846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* test u_enumCharTypes() */ 13886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_enumCharTypes(enumTypeRange, "a1"); 13896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* check default properties */ 13916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_enumCharTypes(enumDefaultsRange, NULL); 13926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 13936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestCodeUnit(){ 13956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar codeunit[]={0x0000,0xe065,0x20ac,0xd7ff,0xd800,0xd841,0xd905,0xdbff,0xdc00,0xdc02,0xddee,0xdfff,0}; 13966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i; 13986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0; i<(int32_t)(sizeof(codeunit)/sizeof(codeunit[0])); i++){ 14006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar c=codeunit[i]; 14016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(i<4){ 14026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(!(UTF_IS_SINGLE(c)) || (UTF_IS_LEAD(c)) || (UTF_IS_TRAIL(c)) ||(UTF_IS_SURROGATE(c))){ 14036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ERROR: U+%04x is a single", c); 14046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(i >= 4 && i< 8){ 14086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(!(UTF_IS_LEAD(c)) || UTF_IS_SINGLE(c) || UTF_IS_TRAIL(c) || !(UTF_IS_SURROGATE(c))){ 14096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ERROR: U+%04x is a first surrogate", c); 14106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(i >= 8 && i< 12){ 14136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(!(UTF_IS_TRAIL(c)) || UTF_IS_SINGLE(c) || UTF_IS_LEAD(c) || !(UTF_IS_SURROGATE(c))){ 14146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ERROR: U+%04x is a second surrogate", c); 14156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 14206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestCodePoint(){ 14226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar32 codePoint[]={ 14236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*surrogate, notvalid(codepoint), not a UnicodeChar, not Error */ 14246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xd800, 14256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xdbff, 14266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xdc00, 14276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xdfff, 14286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xdc04, 14296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xd821, 14306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*not a surrogate, valid, isUnicodeChar , not Error*/ 14316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x20ac, 14326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xd7ff, 14336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xe000, 14346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xe123, 14356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x0061, 14366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xe065, 14376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x20402, 14386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x24506, 14396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x23456, 14406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x20402, 14416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x10402, 14426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x23456, 14436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*not a surrogate, not valid, isUnicodeChar, isError */ 14446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x0015, 14456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0x009f, 14466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*not a surrogate, not valid, not isUnicodeChar, isError */ 14476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xffff, 14486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0xfffe, 14496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 14506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i; 14516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0; i<(int32_t)(sizeof(codePoint)/sizeof(codePoint[0])); i++){ 14526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 c=codePoint[i]; 14536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(i<6){ 14546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(!UTF_IS_SURROGATE(c) || !U_IS_SURROGATE(c) || !U16_IS_SURROGATE(c)){ 14556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ERROR: isSurrogate() failed for U+%04x\n", c); 14566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(UTF_IS_VALID(c)){ 14586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ERROR: isValid() failed for U+%04x\n", c); 14596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(UTF_IS_UNICODE_CHAR(c) || U_IS_UNICODE_CHAR(c)){ 14616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ERROR: isUnicodeChar() failed for U+%04x\n", c); 14626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(UTF_IS_ERROR(c)){ 14646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ERROR: isError() failed for U+%04x\n", c); 14656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }else if(i >=6 && i<18){ 14676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(UTF_IS_SURROGATE(c) || U_IS_SURROGATE(c) || U16_IS_SURROGATE(c)){ 14686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ERROR: isSurrogate() failed for U+%04x\n", c); 14696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(!UTF_IS_VALID(c)){ 14716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ERROR: isValid() failed for U+%04x\n", c); 14726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(!UTF_IS_UNICODE_CHAR(c) || !U_IS_UNICODE_CHAR(c)){ 14746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ERROR: isUnicodeChar() failed for U+%04x\n", c); 14756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(UTF_IS_ERROR(c)){ 14776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ERROR: isError() failed for U+%04x\n", c); 14786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }else if(i >=18 && i<20){ 14806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(UTF_IS_SURROGATE(c) || U_IS_SURROGATE(c) || U16_IS_SURROGATE(c)){ 14816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ERROR: isSurrogate() failed for U+%04x\n", c); 14826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(UTF_IS_VALID(c)){ 14846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ERROR: isValid() failed for U+%04x\n", c); 14856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(!UTF_IS_UNICODE_CHAR(c) || !U_IS_UNICODE_CHAR(c)){ 14876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ERROR: isUnicodeChar() failed for U+%04x\n", c); 14886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(!UTF_IS_ERROR(c)){ 14906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ERROR: isError() failed for U+%04x\n", c); 14916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else if(i >=18 && i<(int32_t)(sizeof(codePoint)/sizeof(codePoint[0]))){ 14946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(UTF_IS_SURROGATE(c) || U_IS_SURROGATE(c) || U16_IS_SURROGATE(c)){ 14956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ERROR: isSurrogate() failed for U+%04x\n", c); 14966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(UTF_IS_VALID(c)){ 14986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ERROR: isValid() failed for U+%04x\n", c); 14996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(UTF_IS_UNICODE_CHAR(c) || U_IS_UNICODE_CHAR(c)){ 15016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ERROR: isUnicodeChar() failed for U+%04x\n", c); 15026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(!UTF_IS_ERROR(c)){ 15046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ERROR: isError() failed for U+%04x\n", c); 15056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( 15106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org !U_IS_BMP(0) || !U_IS_BMP(0x61) || !U_IS_BMP(0x20ac) || 15116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org !U_IS_BMP(0xd9da) || !U_IS_BMP(0xdfed) || !U_IS_BMP(0xffff) || 15126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_IS_BMP(U_SENTINEL) || U_IS_BMP(0x10000) || U_IS_BMP(0x50005) || 15136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_IS_BMP(0x10ffff) || U_IS_BMP(0x110000) || U_IS_BMP(0x7fffffff) 15146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 15156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error with U_IS_BMP()\n"); 15166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( 15196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_IS_SUPPLEMENTARY(0) || U_IS_SUPPLEMENTARY(0x61) || U_IS_SUPPLEMENTARY(0x20ac) || 15206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_IS_SUPPLEMENTARY(0xd9da) || U_IS_SUPPLEMENTARY(0xdfed) || U_IS_SUPPLEMENTARY(0xffff) || 15216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_IS_SUPPLEMENTARY(U_SENTINEL) || !U_IS_SUPPLEMENTARY(0x10000) || !U_IS_SUPPLEMENTARY(0x50005) || 15226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org !U_IS_SUPPLEMENTARY(0x10ffff) || U_IS_SUPPLEMENTARY(0x110000) || U_IS_SUPPLEMENTARY(0x7fffffff) 15236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 15246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error with U_IS_SUPPLEMENTARY()\n"); 15256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 15276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestCharLength() 15296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 15306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const int32_t codepoint[]={ 15316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1, 0x0061, 15326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1, 0xe065, 15336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1, 0x20ac, 15346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2, 0x20402, 15356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2, 0x23456, 15366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2, 0x24506, 15376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2, 0x20402, 15386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2, 0x10402, 15396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1, 0xd7ff, 15406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1, 0xe000 15416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 15426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i; 15446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool multiple; 15456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0; i<(int32_t)(sizeof(codepoint)/sizeof(codepoint[0])); i=(int16_t)(i+2)){ 15466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 c=codepoint[i+1]; 15476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(UTF_CHAR_LENGTH(c) != codepoint[i] || U16_LENGTH(c) != codepoint[i]){ 15486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("The no: of code units for U+%04x:- Expected: %d Got: %d\n", c, codepoint[i], U16_LENGTH(c)); 15496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org multiple=(UBool)(codepoint[i] == 1 ? FALSE : TRUE); 15516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(UTF_NEED_MULTIPLE_UCHAR(c) != multiple){ 15526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ERROR: Unicode::needMultipleUChar() failed for U+%04x\n", c); 15536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 15566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*internal functions ----*/ 15586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic int32_t MakeProp(char* str) 15596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 15606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t result = 0; 15616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char* matchPosition =0; 15626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchPosition = strstr(tagStrings, str); 15646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (matchPosition == 0) 15656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 15666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("unrecognized type letter "); 15676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err(str); 15686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else 15706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = (int32_t)((matchPosition - tagStrings) / 2); 15716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return result; 15726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 15736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic int32_t MakeDir(char* str) 15756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 15766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t pos = 0; 15776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (pos = 0; pos < U_CHAR_DIRECTION_COUNT; pos++) { 15786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (strcmp(str, dirStrings[pos]) == 0) { 15796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return pos; 15806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 15826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return -1; 15836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 15846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* test u_charName() -------------------------------------------------------- */ 15866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 15876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const struct { 15886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t code; 15896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *name, *oldName, *extName, *alias; 15906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} names[]={ 15916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {0x0061, "LATIN SMALL LETTER A", "", "LATIN SMALL LETTER A"}, 15926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {0x01a2, "LATIN CAPITAL LETTER OI", "", 15936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "LATIN CAPITAL LETTER OI", 15946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "LATIN CAPITAL LETTER GHA"}, 15956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {0x0284, "LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK", "", 15966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK" }, 15976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {0x0fd0, "TIBETAN MARK BSKA- SHOG GI MGO RGYAN", "", 15986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "TIBETAN MARK BSKA- SHOG GI MGO RGYAN", 15996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "TIBETAN MARK BKA- SHOG GI MGO RGYAN"}, 16006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {0x3401, "CJK UNIFIED IDEOGRAPH-3401", "", "CJK UNIFIED IDEOGRAPH-3401" }, 16016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {0x7fed, "CJK UNIFIED IDEOGRAPH-7FED", "", "CJK UNIFIED IDEOGRAPH-7FED" }, 16026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {0xac00, "HANGUL SYLLABLE GA", "", "HANGUL SYLLABLE GA" }, 16036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {0xd7a3, "HANGUL SYLLABLE HIH", "", "HANGUL SYLLABLE HIH" }, 16046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {0xd800, "", "", "<lead surrogate-D800>" }, 16056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {0xdc00, "", "", "<trail surrogate-DC00>" }, 16066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {0xff08, "FULLWIDTH LEFT PARENTHESIS", "", "FULLWIDTH LEFT PARENTHESIS" }, 16076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {0xffe5, "FULLWIDTH YEN SIGN", "", "FULLWIDTH YEN SIGN" }, 16086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {0xffff, "", "", "<noncharacter-FFFF>" }, 16096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {0x1d0c5, "BYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASIS", "", 16106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "BYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASIS", 16116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA VASIS"}, 16126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {0x23456, "CJK UNIFIED IDEOGRAPH-23456", "", "CJK UNIFIED IDEOGRAPH-23456" } 16136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 16146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UBool 16166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgenumCharNamesFn(void *context, 16176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 code, UCharNameChoice nameChoice, 16186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *name, int32_t length) { 16196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t *pCount=(int32_t *)context; 16206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *expected; 16216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int i; 16226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(length<=0 || length!=(int32_t)strlen(name)) { 16246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* should not be called with an empty string or invalid length */ 16256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_enumCharName(0x%lx)=%s but length=%ld\n", name, length); 16266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return TRUE; 16276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ++*pCount; 16306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0; i<sizeof(names)/sizeof(names[0]); ++i) { 16316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(code==(UChar32)names[i].code) { 16326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org switch (nameChoice) { 16336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case U_EXTENDED_CHAR_NAME: 16346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(0!=strcmp(name, names[i].extName)) { 16356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_enumCharName(0x%lx - Extended)=%s instead of %s\n", code, name, names[i].extName); 16366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 16386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case U_UNICODE_CHAR_NAME: 16396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(0!=strcmp(name, names[i].name)) { 16406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_enumCharName(0x%lx)=%s instead of %s\n", code, name, names[i].name); 16416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 16436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case U_UNICODE_10_CHAR_NAME: 16446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org expected=names[i].oldName; 16456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(expected[0]==0 || 0!=strcmp(name, expected)) { 16466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_enumCharName(0x%lx - 1.0)=%s instead of %s\n", code, name, expected); 16476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 16496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case U_CHAR_NAME_ALIAS: 16506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org expected=names[i].alias; 16516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(expected==NULL || expected[0]==0 || 0!=strcmp(name, expected)) { 16526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_enumCharName(0x%lx - alias)=%s instead of %s\n", code, name, expected); 16536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 16556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case U_CHAR_NAME_CHOICE_COUNT: 16566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 16576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 16596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return TRUE; 16626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 16636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstruct enumExtCharNamesContext { 16656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t length; 16666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t last; 16676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 16686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UBool 16706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgenumExtCharNamesFn(void *context, 16716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 code, UCharNameChoice nameChoice, 16726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *name, int32_t length) { 16736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org struct enumExtCharNamesContext *ecncp = (struct enumExtCharNamesContext *) context; 16746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (ecncp->last != (int32_t) code - 1) { 16766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (ecncp->last < 0) { 16776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_enumCharName(0x%lx - Ext) after u_enumCharName(0x%lx - Ext) instead of u_enumCharName(0x%lx - Ext)\n", code, ecncp->last, ecncp->last + 1); 16786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 16796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_enumCharName(0x%lx - Ext) instead of u_enumCharName(0x0 - Ext)\n", code); 16806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ecncp->last = (int32_t) code; 16836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!*name) { 16856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_enumCharName(0x%lx - Ext) should not be an empty string\n", code); 16866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 16876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return enumCharNamesFn(&ecncp->length, code, nameChoice, name, length); 16896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 16906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 16916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 16926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This can be made more efficient by moving it into putil.c and having 16936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * it directly access the ebcdic translation tables. 16946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * TODO: If we get this method in putil.c, then delete it from here. 16956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 16966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UChar 16976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgu_charToUChar(char c) { 16986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar uc; 16996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_charsToUChars(&c, &uc, 1); 17006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return uc; 17016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 17026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void 17046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTestCharNames() { 17056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static char name[80]; 17066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode errorCode=U_ZERO_ERROR; 17076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org struct enumExtCharNamesContext extContext; 17086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *expected; 17096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length; 17106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 c; 17116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i; 17126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Testing uprv_getMaxCharNameLength()\n"); 17146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=uprv_getMaxCharNameLength(); 17156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(length==0) { 17166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* no names data available */ 17176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 17186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(length<83) { /* Unicode 3.2 max char name length */ 17206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("uprv_getMaxCharNameLength()=%d is too short"); 17216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* ### TODO same tests for max ISO comment length as for max name length */ 17236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Testing u_charName()\n"); 17256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0; i<(int32_t)(sizeof(names)/sizeof(names[0])); ++i) { 17266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* modern Unicode character name */ 17276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=u_charName(names[i].code, U_UNICODE_CHAR_NAME, name, sizeof(name), &errorCode); 17286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(errorCode)) { 17296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_charName(0x%lx) error %s\n", names[i].code, u_errorName(errorCode)); 17306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 17316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(length<0 || 0!=strcmp(name, names[i].name) || length!=(uint16_t)strlen(name)) { 17336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_charName(0x%lx) gets: %s (length %ld) instead of: %s\n", names[i].code, name, length, names[i].name); 17346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* find the modern name */ 17376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (*names[i].name) { 17386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c=u_charFromName(U_UNICODE_CHAR_NAME, names[i].name, &errorCode); 17396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(errorCode)) { 17406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_charFromName(%s) error %s\n", names[i].name, u_errorName(errorCode)); 17416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 17426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(c!=(UChar32)names[i].code) { 17446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_charFromName(%s) gets 0x%lx instead of 0x%lx\n", names[i].name, c, names[i].code); 17456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Unicode 1.0 character name */ 17496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=u_charName(names[i].code, U_UNICODE_10_CHAR_NAME, name, sizeof(name), &errorCode); 17506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(errorCode)) { 17516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_charName(0x%lx - 1.0) error %s\n", names[i].code, u_errorName(errorCode)); 17526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 17536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(length<0 || (length>0 && 0!=strcmp(name, names[i].oldName)) || length!=(uint16_t)strlen(name)) { 17556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_charName(0x%lx - 1.0) gets %s length %ld instead of nothing or %s\n", names[i].code, name, length, names[i].oldName); 17566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* find the Unicode 1.0 name if it is stored (length>0 means that we could read it) */ 17596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(names[i].oldName[0]!=0 /* && length>0 */) { 17606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c=u_charFromName(U_UNICODE_10_CHAR_NAME, names[i].oldName, &errorCode); 17616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(errorCode)) { 17626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_charFromName(%s - 1.0) error %s\n", names[i].oldName, u_errorName(errorCode)); 17636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 17646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(c!=(UChar32)names[i].code) { 17666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_charFromName(%s - 1.0) gets 0x%lx instead of 0x%lx\n", names[i].oldName, c, names[i].code); 17676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Unicode character name alias */ 17716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=u_charName(names[i].code, U_CHAR_NAME_ALIAS, name, sizeof(name), &errorCode); 17726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(errorCode)) { 17736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_charName(0x%lx - alias) error %s\n", names[i].code, u_errorName(errorCode)); 17746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 17756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org expected=names[i].alias; 17776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(expected==NULL) { 17786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org expected=""; 17796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(length<0 || (length>0 && 0!=strcmp(name, expected)) || length!=(uint16_t)strlen(name)) { 17816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_charName(0x%lx - alias) gets %s length %ld instead of nothing or %s\n", 17826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org names[i].code, name, length, expected); 17836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 17856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* find the Unicode character name alias if it is stored (length>0 means that we could read it) */ 17866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(expected[0]!=0 /* && length>0 */) { 17876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c=u_charFromName(U_CHAR_NAME_ALIAS, expected, &errorCode); 17886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(errorCode)) { 17896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_charFromName(%s - alias) error %s\n", 17906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org expected, u_errorName(errorCode)); 17916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 17926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(c!=(UChar32)names[i].code) { 17946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_charFromName(%s - alias) gets 0x%lx instead of 0x%lx\n", 17956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org expected, c, names[i].code); 17966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 17996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* test u_enumCharNames() */ 18016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=0; 18026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 18036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_enumCharNames(UCHAR_MIN_VALUE, UCHAR_MAX_VALUE + 1, enumCharNamesFn, &length, U_UNICODE_CHAR_NAME, &errorCode); 18046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(errorCode) || length<94140) { 18056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_enumCharNames(%ld..%lx) error %s names count=%ld\n", UCHAR_MIN_VALUE, UCHAR_MAX_VALUE, u_errorName(errorCode), length); 18066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org extContext.length = 0; 18096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org extContext.last = -1; 18106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 18116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_enumCharNames(UCHAR_MIN_VALUE, UCHAR_MAX_VALUE + 1, enumExtCharNamesFn, &extContext, U_EXTENDED_CHAR_NAME, &errorCode); 18126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(errorCode) || extContext.length<UCHAR_MAX_VALUE + 1) { 18136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_enumCharNames(%ld..0x%lx - Extended) error %s names count=%ld\n", UCHAR_MIN_VALUE, UCHAR_MAX_VALUE + 1, u_errorName(errorCode), extContext.length); 18146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* test that u_charFromName() uppercases the input name, i.e., works with mixed-case names (new in 2.0) */ 18176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(0x61!=u_charFromName(U_UNICODE_CHAR_NAME, "LATin smALl letTER A", &errorCode)) { 18186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_charFromName(U_UNICODE_CHAR_NAME, \"LATin smALl letTER A\") did not find U+0061 (%s)\n", u_errorName(errorCode)); 18196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Test getCharNameCharacters */ 18226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(!getTestOption(QUICK_OPTION)) { 18236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org enum { BUFSIZE = 256 }; 18246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode ec = U_ZERO_ERROR; 18256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char buf[BUFSIZE]; 18266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t maxLength; 18276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 cp; 18286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar pat[BUFSIZE], dumbPat[BUFSIZE]; 18296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t l1, l2; 18306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool map[256]; 18316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool ok; 18326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org USet* set = uset_open(1, 0); /* empty set */ 18346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org USet* dumb = uset_open(1, 0); /* empty set */ 18356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 18376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * uprv_getCharNameCharacters() will likely return more lowercase 18386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * letters than actual character names contain because 18396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * it includes all the characters in lowercased names of 18406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * general categories, for the full possible set of extended names. 18416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 18426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 18436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org USetAdder sa={ 18446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NULL, 18456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uset_add, 18466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uset_addRange, 18476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uset_addString, 18486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NULL /* don't need remove() */ 18496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 18506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sa.set=set; 18516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uprv_getCharNameCharacters(&sa); 18526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* build set the dumb (but sure-fire) way */ 18556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (i=0; i<256; ++i) { 18566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org map[i] = FALSE; 18576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org maxLength=0; 18606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (cp=0; cp<0x110000; ++cp) { 18616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t len = u_charName(cp, U_EXTENDED_CHAR_NAME, 18626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org buf, BUFSIZE, &ec); 18636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(ec)) { 18646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: u_charName failed when it shouldn't\n"); 18656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uset_close(set); 18666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uset_close(dumb); 18676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 18686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(len>maxLength) { 18706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org maxLength=len; 18716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (i=0; i<len; ++i) { 18746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!map[(uint8_t) buf[i]]) { 18756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uset_add(dumb, (UChar32)u_charToUChar(buf[i])); 18766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org map[(uint8_t) buf[i]] = TRUE; 18776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* test for leading/trailing whitespace */ 18816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(buf[0]==' ' || buf[0]=='\t' || buf[len-1]==' ' || buf[len-1]=='\t') { 18826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_charName(U+%04x) returns a name with leading or trailing whitespace\n", cp); 18836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(map[(uint8_t)'\t']) { 18876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_charName() returned a name with a TAB for some code point\n", cp); 18886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=uprv_getMaxCharNameLength(); 18916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(length!=maxLength) { 18926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("uprv_getMaxCharNameLength()=%d differs from the maximum length %d of all extended names\n", 18936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length, maxLength); 18946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 18956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 18966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* compare the sets. Where is my uset_equals?!! */ 18976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ok=TRUE; 18986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0; i<256; ++i) { 18996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(uset_contains(set, i)!=uset_contains(dumb, i)) { 19006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(0x61<=i && i<=0x7a /* a-z */ && uset_contains(set, i) && !uset_contains(dumb, i)) { 19016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* ignore lowercase a-z that are in set but not in dumb */ 19026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ok=TRUE; 19036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 19046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ok=FALSE; 19056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 19066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org l1 = uset_toPattern(set, pat, BUFSIZE, TRUE, &ec); 19116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org l2 = uset_toPattern(dumb, dumbPat, BUFSIZE, TRUE, &ec); 19126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(ec)) { 19136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: uset_toPattern failed when it shouldn't\n"); 19146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uset_close(set); 19156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uset_close(dumb); 19166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 19176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (l1 >= BUFSIZE) { 19206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org l1 = BUFSIZE-1; 19216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pat[l1] = 0; 19226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (l2 >= BUFSIZE) { 19246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org l2 = BUFSIZE-1; 19256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dumbPat[l2] = 0; 19266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!ok) { 19296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: uprv_getCharNameCharacters() returned %s, expected %s (too many lowercase a-z are ok)\n", 19306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org aescstrdup(pat, l1), aescstrdup(dumbPat, l2)); 19316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if(getTestOption(VERBOSITY_OPTION)) { 19326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Ok: uprv_getCharNameCharacters() returned %s\n", aescstrdup(pat, l1)); 19336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uset_close(set); 19366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uset_close(dumb); 19376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* ### TODO: test error cases and other interesting things */ 19406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 19416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* test u_isMirrored() and u_charMirror() ----------------------------------- */ 19436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void 19456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTestMirroring() { 19466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org USet *set; 19476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode errorCode; 19486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 start, end, c2, c3; 19506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i; 19516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_DECL(mirroredPattern, "[:Bidi_Mirrored:]", 17); 19536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_INIT(mirroredPattern, "[:Bidi_Mirrored:]", 17); 19556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Testing u_isMirrored()\n"); 19576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(!(u_isMirrored(0x28) && u_isMirrored(0xbb) && u_isMirrored(0x2045) && u_isMirrored(0x232a) && 19586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org !u_isMirrored(0x27) && !u_isMirrored(0x61) && !u_isMirrored(0x284) && !u_isMirrored(0x3400) 19596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) 19606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 19616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_isMirrored() does not work correctly\n"); 19626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Testing u_charMirror()\n"); 19656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(!(u_charMirror(0x3c)==0x3e && u_charMirror(0x5d)==0x5b && u_charMirror(0x208d)==0x208e && u_charMirror(0x3017)==0x3016 && 19666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_charMirror(0xbb)==0xab && u_charMirror(0x2215)==0x29F5 && u_charMirror(0x29F5)==0x2215 && /* large delta between the code points */ 19676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_charMirror(0x2e)==0x2e && u_charMirror(0x6f3)==0x6f3 && u_charMirror(0x301c)==0x301c && u_charMirror(0xa4ab)==0xa4ab && 19686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* see Unicode Corrigendum #6 at http://www.unicode.org/versions/corrigendum6.html */ 19696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_charMirror(0x2018)==0x2018 && u_charMirror(0x201b)==0x201b && u_charMirror(0x301d)==0x301d 19706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) 19716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 19726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_charMirror() does not work correctly\n"); 19736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* verify that Bidi_Mirroring_Glyph roundtrips */ 19766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 19776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org set=uset_openPattern(mirroredPattern, 17, &errorCode); 19786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 19796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(errorCode)) { 19806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("uset_openPattern(mirroredPattern, 17, &errorCode) failed!\n"); 19816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 19826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0; 0==uset_getItem(set, i, &start, &end, NULL, 0, &errorCode); ++i) { 19836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org do { 19846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c2=u_charMirror(start); 19856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c3=u_charMirror(c2); 19866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(c3!=start) { 19876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_charMirror() does not roundtrip: U+%04lx->U+%04lx->U+%04lx\n", (long)start, (long)c2, (long)c3); 19886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c3=u_getBidiPairedBracket(start); 19906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_getIntPropertyValue(start, UCHAR_BIDI_PAIRED_BRACKET_TYPE)==U_BPT_NONE) { 19916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(c3!=start) { 19926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_getBidiPairedBracket(U+%04lx) != self for bpt(c)==None\n", 19936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (long)start); 19946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 19956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 19966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(c3!=c2) { 19976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_getBidiPairedBracket(U+%04lx) != U+%04lx = bmg(c)'\n", 19986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (long)start, (long)c2); 19996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } while(++start<=end); 20026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uset_close(set); 20066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 20076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstruct RunTestData 20106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 20116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *runText; 20126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UScriptCode runCode; 20136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 20146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef struct RunTestData RunTestData; 20166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void 20186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCheckScriptRuns(UScriptRun *scriptRun, int32_t *runStarts, const RunTestData *testData, int32_t nRuns, 20196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *prefix) 20206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 20216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t run, runStart, runLimit; 20226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UScriptCode runCode; 20236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* iterate over all the runs */ 20256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org run = 0; 20266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (uscript_nextRun(scriptRun, &runStart, &runLimit, &runCode)) { 20276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (runStart != runStarts[run]) { 20286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("%s: incorrect start offset for run %d: expected %d, got %d\n", 20296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org prefix, run, runStarts[run], runStart); 20306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (runLimit != runStarts[run + 1]) { 20336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("%s: incorrect limit offset for run %d: expected %d, got %d\n", 20346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org prefix, run, runStarts[run + 1], runLimit); 20356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (runCode != testData[run].runCode) { 20386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("%s: incorrect script for run %d: expected \"%s\", got \"%s\"\n", 20396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org prefix, run, uscript_getName(testData[run].runCode), uscript_getName(runCode)); 20406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org run += 1; 20436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* stop when we've seen all the runs we expect to see */ 20456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (run >= nRuns) { 20466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 20476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Complain if we didn't see then number of runs we expected */ 20516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (run != nRuns) { 20526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("%s: incorrect number of runs: expected %d, got %d\n", prefix, run, nRuns); 20536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 20546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 20556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void 20576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTestUScriptRunAPI() 20586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 20596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const RunTestData testData1[] = { 20606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {"\\u0020\\u0946\\u0939\\u093F\\u0928\\u094D\\u0926\\u0940\\u0020", USCRIPT_DEVANAGARI}, 20616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {"\\u0627\\u0644\\u0639\\u0631\\u0628\\u064A\\u0629\\u0020", USCRIPT_ARABIC}, 20626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {"\\u0420\\u0443\\u0441\\u0441\\u043A\\u0438\\u0439\\u0020", USCRIPT_CYRILLIC}, 20636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {"English (", USCRIPT_LATIN}, 20646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {"\\u0E44\\u0E17\\u0E22", USCRIPT_THAI}, 20656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {") ", USCRIPT_LATIN}, 20666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {"\\u6F22\\u5B75", USCRIPT_HAN}, 20676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {"\\u3068\\u3072\\u3089\\u304C\\u306A\\u3068", USCRIPT_HIRAGANA}, 20686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {"\\u30AB\\u30BF\\u30AB\\u30CA", USCRIPT_KATAKANA}, 20696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {"\\U00010400\\U00010401\\U00010402\\U00010403", USCRIPT_DESERET} 20706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 20716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const RunTestData testData2[] = { 20736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {"((((((((((abc))))))))))", USCRIPT_LATIN} 20746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 20756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const struct { 20776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const RunTestData *testData; 20786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t nRuns; 20796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } testDataEntries[] = { 20806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {testData1, LENGTHOF(testData1)}, 20816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {testData2, LENGTHOF(testData2)} 20826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 20836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const int32_t nTestEntries = LENGTHOF(testDataEntries); 20856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t testEntry; 20866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (testEntry = 0; testEntry < nTestEntries; testEntry += 1) { 20886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar testString[1024]; 20896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t runStarts[256]; 20906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t nTestRuns = testDataEntries[testEntry].nRuns; 20916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const RunTestData *testData = testDataEntries[testEntry].testData; 20926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t run, stringLimit; 20946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UScriptRun *scriptRun = NULL; 20956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode err; 20966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 20976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 20986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Fill in the test string and the runStarts array. 20996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 21006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org stringLimit = 0; 21016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (run = 0; run < nTestRuns; run += 1) { 21026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org runStarts[run] = stringLimit; 21036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org stringLimit += u_unescape(testData[run].runText, &testString[stringLimit], 1024 - stringLimit); 21046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*stringLimit -= 1;*/ 21056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* The limit of the last run */ 21086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org runStarts[nTestRuns] = stringLimit; 21096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 21116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Make sure that calling uscript_OpenRun with a NULL text pointer 21126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and a non-zero text length returns the correct error. 21136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 21146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 21156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org scriptRun = uscript_openRun(NULL, stringLimit, &err); 21166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (err != U_ILLEGAL_ARGUMENT_ERROR) { 21186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("uscript_openRun(NULL, stringLimit, &err) returned %s instead of U_ILLEGAL_ARGUMENT_ERROR.\n", u_errorName(err)); 21196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (scriptRun != NULL) { 21226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("uscript_openRun(NULL, stringLimit, &err) returned a non-NULL result.\n"); 21236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uscript_closeRun(scriptRun); 21246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 21276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Make sure that calling uscript_OpenRun with a non-NULL text pointer 21286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and a zero text length returns the correct error. 21296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 21306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 21316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org scriptRun = uscript_openRun(testString, 0, &err); 21326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (err != U_ILLEGAL_ARGUMENT_ERROR) { 21346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("uscript_openRun(testString, 0, &err) returned %s instead of U_ILLEGAL_ARGUMENT_ERROR.\n", u_errorName(err)); 21356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (scriptRun != NULL) { 21386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("uscript_openRun(testString, 0, &err) returned a non-NULL result.\n"); 21396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uscript_closeRun(scriptRun); 21406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 21436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Make sure that calling uscript_openRun with a NULL text pointer 21446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and a zero text length doesn't return an error. 21456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 21466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 21476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org scriptRun = uscript_openRun(NULL, 0, &err); 21486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(err)) { 21506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Got error %s from uscript_openRun(NULL, 0, &err)\n", u_errorName(err)); 21516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Make sure that the empty iterator doesn't find any runs */ 21546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (uscript_nextRun(scriptRun, NULL, NULL, NULL)) { 21556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("uscript_nextRun(...) returned TRUE for an empty iterator.\n"); 21566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 21596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Make sure that calling uscript_setRunText with a NULL text pointer 21606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and a non-zero text length returns the correct error. 21616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 21626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 21636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uscript_setRunText(scriptRun, NULL, stringLimit, &err); 21646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (err != U_ILLEGAL_ARGUMENT_ERROR) { 21666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("uscript_setRunText(scriptRun, NULL, stringLimit, &err) returned %s instead of U_ILLEGAL_ARGUMENT_ERROR.\n", u_errorName(err)); 21676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 21706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Make sure that calling uscript_OpenRun with a non-NULL text pointer 21716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and a zero text length returns the correct error. 21726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 21736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 21746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uscript_setRunText(scriptRun, testString, 0, &err); 21756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (err != U_ILLEGAL_ARGUMENT_ERROR) { 21776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("uscript_setRunText(scriptRun, testString, 0, &err) returned %s instead of U_ILLEGAL_ARGUMENT_ERROR.\n", u_errorName(err)); 21786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 21816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Now call uscript_setRunText on the empty iterator 21826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and make sure that it works. 21836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 21846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org err = U_ZERO_ERROR; 21856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uscript_setRunText(scriptRun, testString, stringLimit, &err); 21866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(err)) { 21886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Got error %s from uscript_setRunText(...)\n", u_errorName(err)); 21896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 21906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CheckScriptRuns(scriptRun, runStarts, testData, nTestRuns, "uscript_setRunText"); 21916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 21926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uscript_closeRun(scriptRun); 21946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 21956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 21966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Now open an interator over the testString 21976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * using uscript_openRun and make sure that it works 21986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 21996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org scriptRun = uscript_openRun(testString, stringLimit, &err); 22006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(err)) { 22026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Got error %s from uscript_openRun(...)\n", u_errorName(err)); 22036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 22046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CheckScriptRuns(scriptRun, runStarts, testData, nTestRuns, "uscript_openRun"); 22056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 22066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Now reset the iterator, and make sure 22086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * that it still works. 22096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 22106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uscript_resetRun(scriptRun); 22116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CheckScriptRuns(scriptRun, runStarts, testData, nTestRuns, "uscript_resetRun"); 22136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Close the iterator */ 22156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uscript_closeRun(scriptRun); 22166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 22176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 22186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* test additional, non-core properties */ 22206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void 22216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTestAdditionalProperties() { 22226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* test data for u_charAge() */ 22236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const struct { 22246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 c; 22256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UVersionInfo version; 22266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } charAges[]={ 22276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {0x41, { 1, 1, 0, 0 }}, 22286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {0xffff, { 1, 1, 0, 0 }}, 22296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {0x20ab, { 2, 0, 0, 0 }}, 22306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {0x2fffe, { 2, 0, 0, 0 }}, 22316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {0x20ac, { 2, 1, 0, 0 }}, 22326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {0xfb1d, { 3, 0, 0, 0 }}, 22336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {0x3f4, { 3, 1, 0, 0 }}, 22346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {0x10300, { 3, 1, 0, 0 }}, 22356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {0x220, { 3, 2, 0, 0 }}, 22366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org {0xff60, { 3, 2, 0, 0 }} 22376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 22386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* test data for u_hasBinaryProperty() */ 22406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const int32_t 22416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org props[][3]={ /* code point, property, value */ 22426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0627, UCHAR_ALPHABETIC, TRUE }, 22436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1034a, UCHAR_ALPHABETIC, TRUE }, 22446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x2028, UCHAR_ALPHABETIC, FALSE }, 22456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0066, UCHAR_ASCII_HEX_DIGIT, TRUE }, 22476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0067, UCHAR_ASCII_HEX_DIGIT, FALSE }, 22486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x202c, UCHAR_BIDI_CONTROL, TRUE }, 22506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x202f, UCHAR_BIDI_CONTROL, FALSE }, 22516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x003c, UCHAR_BIDI_MIRRORED, TRUE }, 22536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x003d, UCHAR_BIDI_MIRRORED, FALSE }, 22546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* see Unicode Corrigendum #6 at http://www.unicode.org/versions/corrigendum6.html */ 22566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x2018, UCHAR_BIDI_MIRRORED, FALSE }, 22576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x201d, UCHAR_BIDI_MIRRORED, FALSE }, 22586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x201f, UCHAR_BIDI_MIRRORED, FALSE }, 22596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x301e, UCHAR_BIDI_MIRRORED, FALSE }, 22606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x058a, UCHAR_DASH, TRUE }, 22626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x007e, UCHAR_DASH, FALSE }, 22636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0c4d, UCHAR_DIACRITIC, TRUE }, 22656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x3000, UCHAR_DIACRITIC, FALSE }, 22666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0e46, UCHAR_EXTENDER, TRUE }, 22686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0020, UCHAR_EXTENDER, FALSE }, 22696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_NORMALIZATION 22716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xfb1d, UCHAR_FULL_COMPOSITION_EXCLUSION, TRUE }, 22726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1d15f, UCHAR_FULL_COMPOSITION_EXCLUSION, TRUE }, 22736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xfb1e, UCHAR_FULL_COMPOSITION_EXCLUSION, FALSE }, 22746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x110a, UCHAR_NFD_INERT, TRUE }, /* Jamo L */ 22766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0308, UCHAR_NFD_INERT, FALSE }, 22776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1164, UCHAR_NFKD_INERT, TRUE }, /* Jamo V */ 22796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1d79d, UCHAR_NFKD_INERT, FALSE }, /* math compat version of xi */ 22806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0021, UCHAR_NFC_INERT, TRUE }, /* ! */ 22826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0061, UCHAR_NFC_INERT, FALSE }, /* a */ 22836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x00e4, UCHAR_NFC_INERT, FALSE }, /* a-umlaut */ 22846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0102, UCHAR_NFC_INERT, FALSE }, /* a-breve */ 22856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xac1c, UCHAR_NFC_INERT, FALSE }, /* Hangul LV */ 22866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xac1d, UCHAR_NFC_INERT, TRUE }, /* Hangul LVT */ 22876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1d79d, UCHAR_NFKC_INERT, FALSE }, /* math compat version of xi */ 22896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x2a6d6, UCHAR_NFKC_INERT, TRUE }, /* Han, last of CJK ext. B */ 22906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x00e4, UCHAR_SEGMENT_STARTER, TRUE }, 22926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0308, UCHAR_SEGMENT_STARTER, FALSE }, 22936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x110a, UCHAR_SEGMENT_STARTER, TRUE }, /* Jamo L */ 22946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1164, UCHAR_SEGMENT_STARTER, FALSE },/* Jamo V */ 22956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xac1c, UCHAR_SEGMENT_STARTER, TRUE }, /* Hangul LV */ 22966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xac1d, UCHAR_SEGMENT_STARTER, TRUE }, /* Hangul LVT */ 22976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 22986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 22996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0044, UCHAR_HEX_DIGIT, TRUE }, 23006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xff46, UCHAR_HEX_DIGIT, TRUE }, 23016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0047, UCHAR_HEX_DIGIT, FALSE }, 23026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x30fb, UCHAR_HYPHEN, TRUE }, 23046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xfe58, UCHAR_HYPHEN, FALSE }, 23056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x2172, UCHAR_ID_CONTINUE, TRUE }, 23076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0307, UCHAR_ID_CONTINUE, TRUE }, 23086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x005c, UCHAR_ID_CONTINUE, FALSE }, 23096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x2172, UCHAR_ID_START, TRUE }, 23116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x007a, UCHAR_ID_START, TRUE }, 23126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0039, UCHAR_ID_START, FALSE }, 23136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x4db5, UCHAR_IDEOGRAPHIC, TRUE }, 23156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x2f999, UCHAR_IDEOGRAPHIC, TRUE }, 23166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x2f99, UCHAR_IDEOGRAPHIC, FALSE }, 23176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x200c, UCHAR_JOIN_CONTROL, TRUE }, 23196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x2029, UCHAR_JOIN_CONTROL, FALSE }, 23206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1d7bc, UCHAR_LOWERCASE, TRUE }, 23226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0345, UCHAR_LOWERCASE, TRUE }, 23236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0030, UCHAR_LOWERCASE, FALSE }, 23246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1d7a9, UCHAR_MATH, TRUE }, 23266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x2135, UCHAR_MATH, TRUE }, 23276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0062, UCHAR_MATH, FALSE }, 23286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xfde1, UCHAR_NONCHARACTER_CODE_POINT, TRUE }, 23306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x10ffff, UCHAR_NONCHARACTER_CODE_POINT, TRUE }, 23316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x10fffd, UCHAR_NONCHARACTER_CODE_POINT, FALSE }, 23326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0022, UCHAR_QUOTATION_MARK, TRUE }, 23346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xff62, UCHAR_QUOTATION_MARK, TRUE }, 23356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xd840, UCHAR_QUOTATION_MARK, FALSE }, 23366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x061f, UCHAR_TERMINAL_PUNCTUATION, TRUE }, 23386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xe003f, UCHAR_TERMINAL_PUNCTUATION, FALSE }, 23396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1d44a, UCHAR_UPPERCASE, TRUE }, 23416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x2162, UCHAR_UPPERCASE, TRUE }, 23426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0345, UCHAR_UPPERCASE, FALSE }, 23436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0020, UCHAR_WHITE_SPACE, TRUE }, 23456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x202f, UCHAR_WHITE_SPACE, TRUE }, 23466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x3001, UCHAR_WHITE_SPACE, FALSE }, 23476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0711, UCHAR_XID_CONTINUE, TRUE }, 23496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1d1aa, UCHAR_XID_CONTINUE, TRUE }, 23506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x007c, UCHAR_XID_CONTINUE, FALSE }, 23516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x16ee, UCHAR_XID_START, TRUE }, 23536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x23456, UCHAR_XID_START, TRUE }, 23546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1d1aa, UCHAR_XID_START, FALSE }, 23556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 23576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Version break: 23586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The following properties are only supported starting with the 23596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Unicode version indicated in the second field. 23606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 23616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { -1, 0x320, 0 }, 23626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x180c, UCHAR_DEFAULT_IGNORABLE_CODE_POINT, TRUE }, 23646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xfe02, UCHAR_DEFAULT_IGNORABLE_CODE_POINT, TRUE }, 23656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1801, UCHAR_DEFAULT_IGNORABLE_CODE_POINT, FALSE }, 23666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0149, UCHAR_DEPRECATED, TRUE }, /* changed in Unicode 5.2 */ 23686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0341, UCHAR_DEPRECATED, FALSE }, /* changed in Unicode 5.2 */ 23696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xe0041, UCHAR_DEPRECATED, TRUE }, /* changed from Unicode 5 to 5.1 */ 23706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xe0100, UCHAR_DEPRECATED, FALSE }, 23716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x00a0, UCHAR_GRAPHEME_BASE, TRUE }, 23736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0a4d, UCHAR_GRAPHEME_BASE, FALSE }, 23746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xff9d, UCHAR_GRAPHEME_BASE, TRUE }, 23756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xff9f, UCHAR_GRAPHEME_BASE, FALSE }, /* changed from Unicode 3.2 to 4 and again from 5 to 5.1 */ 23766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0300, UCHAR_GRAPHEME_EXTEND, TRUE }, 23786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xff9d, UCHAR_GRAPHEME_EXTEND, FALSE }, 23796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xff9f, UCHAR_GRAPHEME_EXTEND, TRUE }, /* changed from Unicode 3.2 to 4 and again from 5 to 5.1 */ 23806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0603, UCHAR_GRAPHEME_EXTEND, FALSE }, 23816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0a4d, UCHAR_GRAPHEME_LINK, TRUE }, 23836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xff9f, UCHAR_GRAPHEME_LINK, FALSE }, 23846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x2ff7, UCHAR_IDS_BINARY_OPERATOR, TRUE }, 23866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x2ff3, UCHAR_IDS_BINARY_OPERATOR, FALSE }, 23876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x2ff3, UCHAR_IDS_TRINARY_OPERATOR, TRUE }, 23896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x2f03, UCHAR_IDS_TRINARY_OPERATOR, FALSE }, 23906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0ec1, UCHAR_LOGICAL_ORDER_EXCEPTION, TRUE }, 23926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xdcba, UCHAR_LOGICAL_ORDER_EXCEPTION, FALSE }, 23936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x2e9b, UCHAR_RADICAL, TRUE }, 23956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x4e00, UCHAR_RADICAL, FALSE }, 23966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 23976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x012f, UCHAR_SOFT_DOTTED, TRUE }, 23986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0049, UCHAR_SOFT_DOTTED, FALSE }, 23996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xfa11, UCHAR_UNIFIED_IDEOGRAPH, TRUE }, 24016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xfa12, UCHAR_UNIFIED_IDEOGRAPH, FALSE }, 24026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { -1, 0x401, 0 }, /* version break for Unicode 4.0.1 */ 24046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x002e, UCHAR_S_TERM, TRUE }, 24066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0061, UCHAR_S_TERM, FALSE }, 24076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x180c, UCHAR_VARIATION_SELECTOR, TRUE }, 24096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xfe03, UCHAR_VARIATION_SELECTOR, TRUE }, 24106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xe01ef, UCHAR_VARIATION_SELECTOR, TRUE }, 24116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xe0200, UCHAR_VARIATION_SELECTOR, FALSE }, 24126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* enum/integer type properties */ 24146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* UCHAR_BIDI_CLASS tested for assigned characters in TestUnicodeData() */ 24166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* test default Bidi classes for unassigned code points */ 24176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0590, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT }, 24186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x05cf, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT }, 24196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x05ed, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT }, 24206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x07f2, UCHAR_BIDI_CLASS, U_DIR_NON_SPACING_MARK }, /* Nko, new in Unicode 5.0 */ 24216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x07fe, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT }, /* unassigned R */ 24226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x089f, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT }, 24236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xfb37, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT }, 24246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xfb42, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT }, 24256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x10806, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT }, 24266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x10909, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT }, 24276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x10fe4, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT }, 24286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0605, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT_ARABIC }, 24306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x061c, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT_ARABIC }, 24316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x063f, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT_ARABIC }, 24326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x070e, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT_ARABIC }, 24336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0775, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT_ARABIC }, 24346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xfbc2, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT_ARABIC }, 24356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xfd90, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT_ARABIC }, 24366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xfefe, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT_ARABIC }, 24376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x02AF, UCHAR_BLOCK, UBLOCK_IPA_EXTENSIONS }, 24396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0C4E, UCHAR_BLOCK, UBLOCK_TELUGU }, 24406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x155A, UCHAR_BLOCK, UBLOCK_UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS }, 24416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1717, UCHAR_BLOCK, UBLOCK_TAGALOG }, 24426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1900, UCHAR_BLOCK, UBLOCK_LIMBU }, 24436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1AFF, UCHAR_BLOCK, UBLOCK_NO_BLOCK }, 24446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x3040, UCHAR_BLOCK, UBLOCK_HIRAGANA }, 24456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1D0FF, UCHAR_BLOCK, UBLOCK_BYZANTINE_MUSICAL_SYMBOLS }, 24466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x50000, UCHAR_BLOCK, UBLOCK_NO_BLOCK }, 24476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xEFFFF, UCHAR_BLOCK, UBLOCK_NO_BLOCK }, 24486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x10D0FF, UCHAR_BLOCK, UBLOCK_SUPPLEMENTARY_PRIVATE_USE_AREA_B }, 24496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* UCHAR_CANONICAL_COMBINING_CLASS tested for assigned characters in TestUnicodeData() */ 24516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xd7d7, UCHAR_CANONICAL_COMBINING_CLASS, 0 }, 24526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x00A0, UCHAR_DECOMPOSITION_TYPE, U_DT_NOBREAK }, 24546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x00A8, UCHAR_DECOMPOSITION_TYPE, U_DT_COMPAT }, 24556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x00bf, UCHAR_DECOMPOSITION_TYPE, U_DT_NONE }, 24566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x00c0, UCHAR_DECOMPOSITION_TYPE, U_DT_CANONICAL }, 24576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1E9B, UCHAR_DECOMPOSITION_TYPE, U_DT_CANONICAL }, 24586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xBCDE, UCHAR_DECOMPOSITION_TYPE, U_DT_CANONICAL }, 24596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xFB5D, UCHAR_DECOMPOSITION_TYPE, U_DT_MEDIAL }, 24606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1D736, UCHAR_DECOMPOSITION_TYPE, U_DT_FONT }, 24616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xe0033, UCHAR_DECOMPOSITION_TYPE, U_DT_NONE }, 24626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0009, UCHAR_EAST_ASIAN_WIDTH, U_EA_NEUTRAL }, 24646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0020, UCHAR_EAST_ASIAN_WIDTH, U_EA_NARROW }, 24656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x00B1, UCHAR_EAST_ASIAN_WIDTH, U_EA_AMBIGUOUS }, 24666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x20A9, UCHAR_EAST_ASIAN_WIDTH, U_EA_HALFWIDTH }, 24676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x2FFB, UCHAR_EAST_ASIAN_WIDTH, U_EA_WIDE }, 24686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x3000, UCHAR_EAST_ASIAN_WIDTH, U_EA_FULLWIDTH }, 24696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x35bb, UCHAR_EAST_ASIAN_WIDTH, U_EA_WIDE }, 24706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x58bd, UCHAR_EAST_ASIAN_WIDTH, U_EA_WIDE }, 24716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xD7A3, UCHAR_EAST_ASIAN_WIDTH, U_EA_WIDE }, 24726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xEEEE, UCHAR_EAST_ASIAN_WIDTH, U_EA_AMBIGUOUS }, 24736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1D198, UCHAR_EAST_ASIAN_WIDTH, U_EA_NEUTRAL }, 24746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x20000, UCHAR_EAST_ASIAN_WIDTH, U_EA_WIDE }, 24756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x2F8C7, UCHAR_EAST_ASIAN_WIDTH, U_EA_WIDE }, 24766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x3a5bd, UCHAR_EAST_ASIAN_WIDTH, U_EA_WIDE }, /* plane 3 got default W values in Unicode 4 */ 24776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x5a5bd, UCHAR_EAST_ASIAN_WIDTH, U_EA_NEUTRAL }, 24786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xFEEEE, UCHAR_EAST_ASIAN_WIDTH, U_EA_AMBIGUOUS }, 24796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x10EEEE, UCHAR_EAST_ASIAN_WIDTH, U_EA_AMBIGUOUS }, 24806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* UCHAR_GENERAL_CATEGORY tested for assigned characters in TestUnicodeData() */ 24826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xd7c7, UCHAR_GENERAL_CATEGORY, 0 }, 24836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xd7d7, UCHAR_GENERAL_CATEGORY, U_OTHER_LETTER }, /* changed in Unicode 5.2 */ 24846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0444, UCHAR_JOINING_GROUP, U_JG_NO_JOINING_GROUP }, 24866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0639, UCHAR_JOINING_GROUP, U_JG_AIN }, 24876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x072A, UCHAR_JOINING_GROUP, U_JG_DALATH_RISH }, 24886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0647, UCHAR_JOINING_GROUP, U_JG_HEH }, 24896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x06C1, UCHAR_JOINING_GROUP, U_JG_HEH_GOAL }, 24906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 24916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x200C, UCHAR_JOINING_TYPE, U_JT_NON_JOINING }, 24926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x200D, UCHAR_JOINING_TYPE, U_JT_JOIN_CAUSING }, 24936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0639, UCHAR_JOINING_TYPE, U_JT_DUAL_JOINING }, 24946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0640, UCHAR_JOINING_TYPE, U_JT_JOIN_CAUSING }, 24956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x06C3, UCHAR_JOINING_TYPE, U_JT_RIGHT_JOINING }, 24966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0300, UCHAR_JOINING_TYPE, U_JT_TRANSPARENT }, 24976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x070F, UCHAR_JOINING_TYPE, U_JT_TRANSPARENT }, 24986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xe0033, UCHAR_JOINING_TYPE, U_JT_TRANSPARENT }, 24996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* TestUnicodeData() verifies that no assigned character has "XX" (unknown) */ 25016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xe7e7, UCHAR_LINE_BREAK, U_LB_UNKNOWN }, 25026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x10fffd, UCHAR_LINE_BREAK, U_LB_UNKNOWN }, 25036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0028, UCHAR_LINE_BREAK, U_LB_OPEN_PUNCTUATION }, 25046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x232A, UCHAR_LINE_BREAK, U_LB_CLOSE_PUNCTUATION }, 25056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x3401, UCHAR_LINE_BREAK, U_LB_IDEOGRAPHIC }, 25066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x4e02, UCHAR_LINE_BREAK, U_LB_IDEOGRAPHIC }, 25076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x20004, UCHAR_LINE_BREAK, U_LB_IDEOGRAPHIC }, 25086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xf905, UCHAR_LINE_BREAK, U_LB_IDEOGRAPHIC }, 25096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xdb7e, UCHAR_LINE_BREAK, U_LB_SURROGATE }, 25106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xdbfd, UCHAR_LINE_BREAK, U_LB_SURROGATE }, 25116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xdffc, UCHAR_LINE_BREAK, U_LB_SURROGATE }, 25126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x2762, UCHAR_LINE_BREAK, U_LB_EXCLAMATION }, 25136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x002F, UCHAR_LINE_BREAK, U_LB_BREAK_SYMBOLS }, 25146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1D49C, UCHAR_LINE_BREAK, U_LB_ALPHABETIC }, 25156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1731, UCHAR_LINE_BREAK, U_LB_ALPHABETIC }, 25166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* UCHAR_NUMERIC_TYPE tested in TestNumericProperties() */ 25186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* UCHAR_SCRIPT tested in TestUScriptCodeAPI() */ 25206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x10ff, UCHAR_HANGUL_SYLLABLE_TYPE, 0 }, 25226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1100, UCHAR_HANGUL_SYLLABLE_TYPE, U_HST_LEADING_JAMO }, 25236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1111, UCHAR_HANGUL_SYLLABLE_TYPE, U_HST_LEADING_JAMO }, 25246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1159, UCHAR_HANGUL_SYLLABLE_TYPE, U_HST_LEADING_JAMO }, 25256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x115a, UCHAR_HANGUL_SYLLABLE_TYPE, U_HST_LEADING_JAMO }, /* changed in Unicode 5.2 */ 25266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x115e, UCHAR_HANGUL_SYLLABLE_TYPE, U_HST_LEADING_JAMO }, /* changed in Unicode 5.2 */ 25276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x115f, UCHAR_HANGUL_SYLLABLE_TYPE, U_HST_LEADING_JAMO }, 25286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xa95f, UCHAR_HANGUL_SYLLABLE_TYPE, 0 }, 25306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xa960, UCHAR_HANGUL_SYLLABLE_TYPE, U_HST_LEADING_JAMO }, /* changed in Unicode 5.2 */ 25316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xa97c, UCHAR_HANGUL_SYLLABLE_TYPE, U_HST_LEADING_JAMO }, /* changed in Unicode 5.2 */ 25326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xa97d, UCHAR_HANGUL_SYLLABLE_TYPE, 0 }, 25336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1160, UCHAR_HANGUL_SYLLABLE_TYPE, U_HST_VOWEL_JAMO }, 25356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1161, UCHAR_HANGUL_SYLLABLE_TYPE, U_HST_VOWEL_JAMO }, 25366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1172, UCHAR_HANGUL_SYLLABLE_TYPE, U_HST_VOWEL_JAMO }, 25376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x11a2, UCHAR_HANGUL_SYLLABLE_TYPE, U_HST_VOWEL_JAMO }, 25386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x11a3, UCHAR_HANGUL_SYLLABLE_TYPE, U_HST_VOWEL_JAMO }, /* changed in Unicode 5.2 */ 25396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x11a7, UCHAR_HANGUL_SYLLABLE_TYPE, U_HST_VOWEL_JAMO }, /* changed in Unicode 5.2 */ 25406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xd7af, UCHAR_HANGUL_SYLLABLE_TYPE, 0 }, 25426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xd7b0, UCHAR_HANGUL_SYLLABLE_TYPE, U_HST_VOWEL_JAMO }, /* changed in Unicode 5.2 */ 25436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xd7c6, UCHAR_HANGUL_SYLLABLE_TYPE, U_HST_VOWEL_JAMO }, /* changed in Unicode 5.2 */ 25446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xd7c7, UCHAR_HANGUL_SYLLABLE_TYPE, 0 }, 25456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x11a8, UCHAR_HANGUL_SYLLABLE_TYPE, U_HST_TRAILING_JAMO }, 25476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x11b8, UCHAR_HANGUL_SYLLABLE_TYPE, U_HST_TRAILING_JAMO }, 25486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x11c8, UCHAR_HANGUL_SYLLABLE_TYPE, U_HST_TRAILING_JAMO }, 25496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x11f9, UCHAR_HANGUL_SYLLABLE_TYPE, U_HST_TRAILING_JAMO }, 25506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x11fa, UCHAR_HANGUL_SYLLABLE_TYPE, U_HST_TRAILING_JAMO }, /* changed in Unicode 5.2 */ 25516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x11ff, UCHAR_HANGUL_SYLLABLE_TYPE, U_HST_TRAILING_JAMO }, /* changed in Unicode 5.2 */ 25526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1200, UCHAR_HANGUL_SYLLABLE_TYPE, 0 }, 25536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xd7ca, UCHAR_HANGUL_SYLLABLE_TYPE, 0 }, 25556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xd7cb, UCHAR_HANGUL_SYLLABLE_TYPE, U_HST_TRAILING_JAMO }, /* changed in Unicode 5.2 */ 25566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xd7fb, UCHAR_HANGUL_SYLLABLE_TYPE, U_HST_TRAILING_JAMO }, /* changed in Unicode 5.2 */ 25576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xd7fc, UCHAR_HANGUL_SYLLABLE_TYPE, 0 }, 25586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xac00, UCHAR_HANGUL_SYLLABLE_TYPE, U_HST_LV_SYLLABLE }, 25606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xac1c, UCHAR_HANGUL_SYLLABLE_TYPE, U_HST_LV_SYLLABLE }, 25616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xc5ec, UCHAR_HANGUL_SYLLABLE_TYPE, U_HST_LV_SYLLABLE }, 25626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xd788, UCHAR_HANGUL_SYLLABLE_TYPE, U_HST_LV_SYLLABLE }, 25636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xac01, UCHAR_HANGUL_SYLLABLE_TYPE, U_HST_LVT_SYLLABLE }, 25656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xac1b, UCHAR_HANGUL_SYLLABLE_TYPE, U_HST_LVT_SYLLABLE }, 25666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xac1d, UCHAR_HANGUL_SYLLABLE_TYPE, U_HST_LVT_SYLLABLE }, 25676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xc5ee, UCHAR_HANGUL_SYLLABLE_TYPE, U_HST_LVT_SYLLABLE }, 25686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xd7a3, UCHAR_HANGUL_SYLLABLE_TYPE, U_HST_LVT_SYLLABLE }, 25696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xd7a4, UCHAR_HANGUL_SYLLABLE_TYPE, 0 }, 25716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { -1, 0x410, 0 }, /* version break for Unicode 4.1 */ 25736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x00d7, UCHAR_PATTERN_SYNTAX, TRUE }, 25756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xfe45, UCHAR_PATTERN_SYNTAX, TRUE }, 25766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0061, UCHAR_PATTERN_SYNTAX, FALSE }, 25776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0020, UCHAR_PATTERN_WHITE_SPACE, TRUE }, 25796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0085, UCHAR_PATTERN_WHITE_SPACE, TRUE }, 25806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x200f, UCHAR_PATTERN_WHITE_SPACE, TRUE }, 25816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x00a0, UCHAR_PATTERN_WHITE_SPACE, FALSE }, 25826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x3000, UCHAR_PATTERN_WHITE_SPACE, FALSE }, 25836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1d200, UCHAR_BLOCK, UBLOCK_ANCIENT_GREEK_MUSICAL_NOTATION }, 25856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x2c8e, UCHAR_BLOCK, UBLOCK_COPTIC }, 25866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xfe17, UCHAR_BLOCK, UBLOCK_VERTICAL_FORMS }, 25876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1a00, UCHAR_SCRIPT, USCRIPT_BUGINESE }, 25896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x2cea, UCHAR_SCRIPT, USCRIPT_COPTIC }, 25906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xa82b, UCHAR_SCRIPT, USCRIPT_SYLOTI_NAGRI }, 25916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x103d0, UCHAR_SCRIPT, USCRIPT_OLD_PERSIAN }, 25926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 25936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xcc28, UCHAR_LINE_BREAK, U_LB_H2 }, 25946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xcc29, UCHAR_LINE_BREAK, U_LB_H3 }, 25956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xac03, UCHAR_LINE_BREAK, U_LB_H3 }, 25966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x115f, UCHAR_LINE_BREAK, U_LB_JL }, 25976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x11aa, UCHAR_LINE_BREAK, U_LB_JT }, 25986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x11a1, UCHAR_LINE_BREAK, U_LB_JV }, 25996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xb2c9, UCHAR_GRAPHEME_CLUSTER_BREAK, U_GCB_LVT }, 26016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x036f, UCHAR_GRAPHEME_CLUSTER_BREAK, U_GCB_EXTEND }, 26026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0000, UCHAR_GRAPHEME_CLUSTER_BREAK, U_GCB_CONTROL }, 26036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1160, UCHAR_GRAPHEME_CLUSTER_BREAK, U_GCB_V }, 26046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x05f4, UCHAR_WORD_BREAK, U_WB_MIDLETTER }, 26066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x4ef0, UCHAR_WORD_BREAK, U_WB_OTHER }, 26076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x19d9, UCHAR_WORD_BREAK, U_WB_NUMERIC }, 26086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x2044, UCHAR_WORD_BREAK, U_WB_MIDNUM }, 26096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xfffd, UCHAR_SENTENCE_BREAK, U_SB_OTHER }, 26116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1ffc, UCHAR_SENTENCE_BREAK, U_SB_UPPER }, 26126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xff63, UCHAR_SENTENCE_BREAK, U_SB_CLOSE }, 26136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x2028, UCHAR_SENTENCE_BREAK, U_SB_SEP }, 26146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { -1, 0x520, 0 }, /* version break for Unicode 5.2 */ 26166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* unassigned code points in new default Bidi R blocks */ 26186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1ede4, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT }, 26196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1efe4, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT }, 26206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* test some script codes >127 */ 26226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xa6e6, UCHAR_SCRIPT, USCRIPT_BAMUM }, 26236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xa4d0, UCHAR_SCRIPT, USCRIPT_LISU }, 26246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x10a7f, UCHAR_SCRIPT, USCRIPT_OLD_SOUTH_ARABIAN }, 26256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { -1, 0x600, 0 }, /* version break for Unicode 6.0 */ 26276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* value changed in Unicode 6.0 */ 26296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x06C3, UCHAR_JOINING_GROUP, U_JG_TEH_MARBUTA_GOAL }, 26306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { -1, 0x610, 0 }, /* version break for Unicode 6.1 */ 26326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* unassigned code points in new/changed default Bidi AL blocks */ 26346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x08ba, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT_ARABIC }, 26356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1eee4, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT_ARABIC }, 26366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { -1, 0x630, 0 }, /* version break for Unicode 6.3 */ 26386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* unassigned code points in the currency symbols block now default to ET */ 26406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x20C0, UCHAR_BIDI_CLASS, U_EUROPEAN_NUMBER_TERMINATOR }, 26416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x20CF, UCHAR_BIDI_CLASS, U_EUROPEAN_NUMBER_TERMINATOR }, 26426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* new property in Unicode 6.3 */ 26446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0027, UCHAR_BIDI_PAIRED_BRACKET_TYPE, U_BPT_NONE }, 26456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0028, UCHAR_BIDI_PAIRED_BRACKET_TYPE, U_BPT_OPEN }, 26466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0029, UCHAR_BIDI_PAIRED_BRACKET_TYPE, U_BPT_CLOSE }, 26476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xFF5C, UCHAR_BIDI_PAIRED_BRACKET_TYPE, U_BPT_NONE }, 26486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xFF5B, UCHAR_BIDI_PAIRED_BRACKET_TYPE, U_BPT_OPEN }, 26496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xFF5D, UCHAR_BIDI_PAIRED_BRACKET_TYPE, U_BPT_CLOSE }, 26506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* undefined UProperty values */ 26526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x61, 0x4a7, 0 }, 26536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x234bc, 0x15ed, 0 } 26546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 26556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UVersionInfo version; 26576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 c; 26586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i, result, uVersion; 26596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UProperty which; 26606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* what is our Unicode version? */ 26626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_getUnicodeVersion(version); 26636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uVersion=((int32_t)version[0]<<8)|(version[1]<<4)|version[2]; /* major/minor/update version numbers */ 26646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_charAge(0x20, version); 26666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(version[0]==0) { 26676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* no additional properties available */ 26686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("TestAdditionalProperties: no additional properties available, not tested\n"); 26696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 26706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 26716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* test u_charAge() */ 26736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0; i<sizeof(charAges)/sizeof(charAges[0]); ++i) { 26746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_charAge(charAges[i].c, version); 26756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(0!=memcmp(version, charAges[i].version, sizeof(UVersionInfo))) { 26766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_charAge(U+%04lx)={ %u, %u, %u, %u } instead of { %u, %u, %u, %u }\n", 26776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org charAges[i].c, 26786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org version[0], version[1], version[2], version[3], 26796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org charAges[i].version[0], charAges[i].version[1], charAges[i].version[2], charAges[i].version[3]); 26806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 26816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 26826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 26836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( u_getIntPropertyMinValue(UCHAR_DASH)!=0 || 26846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_getIntPropertyMinValue(UCHAR_BIDI_CLASS)!=0 || 26856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_getIntPropertyMinValue(UCHAR_BLOCK)!=0 || /* j2478 */ 26866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_getIntPropertyMinValue(UCHAR_SCRIPT)!=0 || /*JB#2410*/ 26876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_getIntPropertyMinValue(0x2345)!=0 26886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 26896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_getIntPropertyMinValue() wrong\n"); 26906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 26916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( u_getIntPropertyMaxValue(UCHAR_DASH)!=1) { 26926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_getIntPropertyMaxValue(UCHAR_DASH) wrong\n"); 26936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 26946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( u_getIntPropertyMaxValue(UCHAR_ID_CONTINUE)!=1) { 26956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_getIntPropertyMaxValue(UCHAR_ID_CONTINUE) wrong\n"); 26966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 26976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( u_getIntPropertyMaxValue((UProperty)(UCHAR_BINARY_LIMIT-1))!=1) { 26986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_getIntPropertyMaxValue(UCHAR_BINARY_LIMIT-1) wrong\n"); 26996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( u_getIntPropertyMaxValue(UCHAR_BIDI_CLASS)!=(int32_t)U_CHAR_DIRECTION_COUNT-1 ) { 27016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_getIntPropertyMaxValue(UCHAR_BIDI_CLASS) wrong\n"); 27026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( u_getIntPropertyMaxValue(UCHAR_BLOCK)!=(int32_t)UBLOCK_COUNT-1 ) { 27046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_getIntPropertyMaxValue(UCHAR_BLOCK) wrong\n"); 27056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_getIntPropertyMaxValue(UCHAR_LINE_BREAK)!=(int32_t)U_LB_COUNT-1) { 27076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_getIntPropertyMaxValue(UCHAR_LINE_BREAK) wrong\n"); 27086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_getIntPropertyMaxValue(UCHAR_SCRIPT)!=(int32_t)USCRIPT_CODE_LIMIT-1) { 27106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_getIntPropertyMaxValue(UCHAR_SCRIPT) wrong\n"); 27116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_getIntPropertyMaxValue(UCHAR_NUMERIC_TYPE)!=(int32_t)U_NT_COUNT-1) { 27136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_getIntPropertyMaxValue(UCHAR_NUMERIC_TYPE) wrong\n"); 27146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_getIntPropertyMaxValue(UCHAR_GENERAL_CATEGORY)!=(int32_t)U_CHAR_CATEGORY_COUNT-1) { 27166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_getIntPropertyMaxValue(UCHAR_GENERAL_CATEGORY) wrong\n"); 27176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_getIntPropertyMaxValue(UCHAR_HANGUL_SYLLABLE_TYPE)!=(int32_t)U_HST_COUNT-1) { 27196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_getIntPropertyMaxValue(UCHAR_HANGUL_SYLLABLE_TYPE) wrong\n"); 27206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_getIntPropertyMaxValue(UCHAR_GRAPHEME_CLUSTER_BREAK)!=(int32_t)U_GCB_COUNT-1) { 27226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_getIntPropertyMaxValue(UCHAR_GRAPHEME_CLUSTER_BREAK) wrong\n"); 27236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_getIntPropertyMaxValue(UCHAR_SENTENCE_BREAK)!=(int32_t)U_SB_COUNT-1) { 27256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_getIntPropertyMaxValue(UCHAR_SENTENCE_BREAK) wrong\n"); 27266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_getIntPropertyMaxValue(UCHAR_WORD_BREAK)!=(int32_t)U_WB_COUNT-1) { 27286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_getIntPropertyMaxValue(UCHAR_WORD_BREAK) wrong\n"); 27296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_getIntPropertyMaxValue(UCHAR_BIDI_PAIRED_BRACKET_TYPE)!=(int32_t)U_BPT_COUNT-1) { 27316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_getIntPropertyMaxValue(UCHAR_BIDI_PAIRED_BRACKET_TYPE) wrong\n"); 27326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*JB#2410*/ 27346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( u_getIntPropertyMaxValue(0x2345)!=-1) { 27356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_getIntPropertyMaxValue(0x2345) wrong\n"); 27366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( u_getIntPropertyMaxValue(UCHAR_DECOMPOSITION_TYPE) != (int32_t) (U_DT_COUNT - 1)) { 27386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_getIntPropertyMaxValue(UCHAR_DECOMPOSITION_TYPE) wrong\n"); 27396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( u_getIntPropertyMaxValue(UCHAR_JOINING_GROUP) != (int32_t) (U_JG_COUNT -1)) { 27416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_getIntPropertyMaxValue(UCHAR_JOINING_GROUP) wrong\n"); 27426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( u_getIntPropertyMaxValue(UCHAR_JOINING_TYPE) != (int32_t) (U_JT_COUNT -1)) { 27446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_getIntPropertyMaxValue(UCHAR_JOINING_TYPE) wrong\n"); 27456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( u_getIntPropertyMaxValue(UCHAR_EAST_ASIAN_WIDTH) != (int32_t) (U_EA_COUNT -1)) { 27476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_getIntPropertyMaxValue(UCHAR_EAST_ASIAN_WIDTH) wrong\n"); 27486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 27506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* test u_hasBinaryProperty() and u_getIntPropertyValue() */ 27516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0; i<sizeof(props)/sizeof(props[0]); ++i) { 27526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *whichName; 27536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 27546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(props[i][0]<0) { 27556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Unicode version break */ 27566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(uVersion<props[i][1]) { 27576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; /* do not test properties that are not yet supported */ 27586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 27596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org continue; /* skip this row */ 27606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 27636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c=(UChar32)props[i][0]; 27646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org which=(UProperty)props[i][1]; 27656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org whichName=u_getPropertyName(which, U_LONG_PROPERTY_NAME); 27666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 27676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(which<UCHAR_INT_START) { 27686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result=u_hasBinaryProperty(c, which); 27696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(result!=props[i][2]) { 27706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("error: u_hasBinaryProperty(U+%04lx, %s)=%d is wrong (props[%d]) - (Are you missing data?)\n", 27716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c, whichName, result, i); 27726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 27756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result=u_getIntPropertyValue(c, which); 27766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(result!=props[i][2]) { 27776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("error: u_getIntPropertyValue(U+%04lx, %s)=%d is wrong, should be %d (props[%d]) - (Are you missing data?)\n", 27786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c, whichName, result, props[i][2], i); 27796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 27816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* test separate functions, too */ 27826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org switch((UProperty)props[i][1]) { 27836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UCHAR_ALPHABETIC: 27846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_isUAlphabetic((UChar32)props[i][0])!=(UBool)props[i][2]) { 27856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_isUAlphabetic(U+%04lx)=%d is wrong (props[%d])\n", 27866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org props[i][0], result, i); 27876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 27896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UCHAR_LOWERCASE: 27906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_isULowercase((UChar32)props[i][0])!=(UBool)props[i][2]) { 27916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_isULowercase(U+%04lx)=%d is wrong (props[%d])\n", 27926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org props[i][0], result, i); 27936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 27946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 27956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UCHAR_UPPERCASE: 27966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_isUUppercase((UChar32)props[i][0])!=(UBool)props[i][2]) { 27976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_isUUppercase(U+%04lx)=%d is wrong (props[%d])\n", 27986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org props[i][0], result, i); 27996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 28006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 28016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UCHAR_WHITE_SPACE: 28026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_isUWhiteSpace((UChar32)props[i][0])!=(UBool)props[i][2]) { 28036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_isUWhiteSpace(U+%04lx)=%d is wrong (props[%d])\n", 28046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org props[i][0], result, i); 28056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 28066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 28076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org default: 28086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 28096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 28106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 28116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 28126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void 28146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTestNumericProperties(void) { 28156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* see UnicodeData.txt, DerivedNumericValues.txt */ 28166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const struct { 28176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 c; 28186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t type; 28196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org double numValue; 28206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } values[]={ 28216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0F33, U_NT_NUMERIC, -1./2. }, 28226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0C66, U_NT_DECIMAL, 0 }, 28236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x96f6, U_NT_NUMERIC, 0 }, 28246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xa833, U_NT_NUMERIC, 1./16. }, 28256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x2152, U_NT_NUMERIC, 1./10. }, 28266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x2151, U_NT_NUMERIC, 1./9. }, 28276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1245f, U_NT_NUMERIC, 1./8. }, 28286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x2150, U_NT_NUMERIC, 1./7. }, 28296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x2159, U_NT_NUMERIC, 1./6. }, 28306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x09f6, U_NT_NUMERIC, 3./16. }, 28316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x2155, U_NT_NUMERIC, 1./5. }, 28326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x00BD, U_NT_NUMERIC, 1./2. }, 28336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0031, U_NT_DECIMAL, 1. }, 28346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x4e00, U_NT_NUMERIC, 1. }, 28356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x58f1, U_NT_NUMERIC, 1. }, 28366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x10320, U_NT_NUMERIC, 1. }, 28376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0F2B, U_NT_NUMERIC, 3./2. }, 28386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x00B2, U_NT_DIGIT, 2. }, 28396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x5f10, U_NT_NUMERIC, 2. }, 28406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1813, U_NT_DECIMAL, 3. }, 28416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x5f0e, U_NT_NUMERIC, 3. }, 28426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x2173, U_NT_NUMERIC, 4. }, 28436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x8086, U_NT_NUMERIC, 4. }, 28446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x278E, U_NT_DIGIT, 5. }, 28456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1D7F2, U_NT_DECIMAL, 6. }, 28466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x247A, U_NT_DIGIT, 7. }, 28476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x7396, U_NT_NUMERIC, 9. }, 28486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1372, U_NT_NUMERIC, 10. }, 28496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x216B, U_NT_NUMERIC, 12. }, 28506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x16EE, U_NT_NUMERIC, 17. }, 28516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x249A, U_NT_NUMERIC, 19. }, 28526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x303A, U_NT_NUMERIC, 30. }, 28536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x5345, U_NT_NUMERIC, 30. }, 28546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x32B2, U_NT_NUMERIC, 37. }, 28556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x1375, U_NT_NUMERIC, 40. }, 28566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x10323, U_NT_NUMERIC, 50. }, 28576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x0BF1, U_NT_NUMERIC, 100. }, 28586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x964c, U_NT_NUMERIC, 100. }, 28596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x217E, U_NT_NUMERIC, 500. }, 28606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x2180, U_NT_NUMERIC, 1000. }, 28616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x4edf, U_NT_NUMERIC, 1000. }, 28626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x2181, U_NT_NUMERIC, 5000. }, 28636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x137C, U_NT_NUMERIC, 10000. }, 28646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x4e07, U_NT_NUMERIC, 10000. }, 28656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x12432, U_NT_NUMERIC, 216000. }, 28666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x12433, U_NT_NUMERIC, 432000. }, 28676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x4ebf, U_NT_NUMERIC, 100000000. }, 28686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x5146, U_NT_NUMERIC, 1000000000000. }, 28696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { -1, U_NT_NONE, U_NO_NUMERIC_VALUE }, 28706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x61, U_NT_NONE, U_NO_NUMERIC_VALUE }, 28716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x3000, U_NT_NONE, U_NO_NUMERIC_VALUE }, 28726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xfffe, U_NT_NONE, U_NO_NUMERIC_VALUE }, 28736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x10301, U_NT_NONE, U_NO_NUMERIC_VALUE }, 28746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0xe0033, U_NT_NONE, U_NO_NUMERIC_VALUE }, 28756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x10ffff, U_NT_NONE, U_NO_NUMERIC_VALUE }, 28766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 0x110000, U_NT_NONE, U_NO_NUMERIC_VALUE } 28776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 28786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org double nv; 28806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 c; 28816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i, type; 28826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0; i<LENGTHOF(values); ++i) { 28846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c=values[i].c; 28856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org type=u_getIntPropertyValue(c, UCHAR_NUMERIC_TYPE); 28866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org nv=u_getNumericValue(c); 28876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(type!=values[i].type) { 28896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("UCHAR_NUMERIC_TYPE(U+%04lx)=%d should be %d\n", c, type, values[i].type); 28906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 28916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(0.000001 <= fabs(nv - values[i].numValue)) { 28926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_getNumericValue(U+%04lx)=%g should be %g\n", c, nv, values[i].numValue); 28936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 28946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 28956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 28966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 28976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 28986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Test the property names and property value names API. 28996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 29006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void 29016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTestPropertyNames(void) { 29026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t p, v, choice=0, rev; 29036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool atLeastSomething = FALSE; 29046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 29056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (p=0; ; ++p) { 29066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UProperty propEnum = (UProperty)p; 29076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool sawProp = FALSE; 29086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(p > 10 && !atLeastSomething) { 29096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("Never got anything after 10 tries.\nYour data is probably fried. Quitting this test\n", p, choice); 29106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 29116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 29126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 29136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (choice=0; ; ++choice) { 29146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char* name = u_getPropertyName(propEnum, (UPropertyNameChoice)choice); 29156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (name) { 29166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!sawProp) 29176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("prop 0x%04x+%2d:", p&~0xfff, p&0xfff); 29186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("%d=\"%s\"", choice, name); 29196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sawProp = TRUE; 29206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org atLeastSomething = TRUE; 29216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 29226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* test reverse mapping */ 29236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org rev = u_getPropertyEnum(name); 29246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (rev != p) { 29256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Property round-trip failure: %d -> %s -> %d\n", 29266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p, name, rev); 29276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 29286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 29296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!name && choice>0) break; 29306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 29316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (sawProp) { 29326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* looks like a valid property; check the values */ 29336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char* pname = u_getPropertyName(propEnum, U_LONG_PROPERTY_NAME); 29346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t max = 0; 29356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (p == UCHAR_CANONICAL_COMBINING_CLASS) { 29366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org max = 255; 29376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if (p == UCHAR_GENERAL_CATEGORY_MASK) { 29386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* it's far too slow to iterate all the way up to 29396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org the real max, U_GC_P_MASK */ 29406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org max = U_GC_NL_MASK; 29416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if (p == UCHAR_BLOCK) { 29426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* UBlockCodes, unlike other values, start at 1 */ 29436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org max = 1; 29446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 29456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("\n"); 29466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (v=-1; ; ++v) { 29476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool sawValue = FALSE; 29486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (choice=0; ; ++choice) { 29496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char* vname = u_getPropertyValueName(propEnum, v, (UPropertyNameChoice)choice); 29506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (vname) { 29516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!sawValue) log_verbose(" %s, value %d:", pname, v); 29526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("%d=\"%s\"", choice, vname); 29536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sawValue = TRUE; 29546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 29556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* test reverse mapping */ 29566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org rev = u_getPropertyValueEnum(propEnum, vname); 29576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (rev != v) { 29586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Value round-trip failure (%s): %d -> %s -> %d\n", 29596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pname, v, vname, rev); 29606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 29616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 29626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!vname && choice>0) break; 29636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 29646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (sawValue) { 29656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("\n"); 29666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 29676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!sawValue && v>=max) break; 29686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 29696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 29706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!sawProp) { 29716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (p>=UCHAR_STRING_LIMIT) { 29726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 29736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if (p>=UCHAR_DOUBLE_LIMIT) { 29746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p = UCHAR_STRING_START - 1; 29756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if (p>=UCHAR_MASK_LIMIT) { 29766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p = UCHAR_DOUBLE_START - 1; 29776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if (p>=UCHAR_INT_LIMIT) { 29786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p = UCHAR_MASK_START - 1; 29796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if (p>=UCHAR_BINARY_LIMIT) { 29806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p = UCHAR_INT_START - 1; 29816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 29826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 29836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 29846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 29856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 29866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 29876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Test the property values API. See JB#2410. 29886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 29896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void 29906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTestPropertyValues(void) { 29916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i, p, min, max; 29926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode ec; 29936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 29946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Min should be 0 for everything. */ 29956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Until JB#2478 is fixed, the one exception is UCHAR_BLOCK. */ 29966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (p=UCHAR_INT_START; p<UCHAR_INT_LIMIT; ++p) { 29976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UProperty propEnum = (UProperty)p; 29986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org min = u_getIntPropertyMinValue(propEnum); 29996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (min != 0) { 30006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (p == UCHAR_BLOCK) { 30016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* This is okay...for now. See JB#2487. 30026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TODO Update this for JB#2487. */ 30036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 30046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char* name; 30056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = u_getPropertyName(propEnum, U_LONG_PROPERTY_NAME); 30066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (name == NULL) 30076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = "<ERROR>"; 30086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: u_getIntPropertyMinValue(%s) = %d, exp. 0\n", 30096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name, min); 30106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 30116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 30126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 30136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 30146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( u_getIntPropertyMinValue(UCHAR_GENERAL_CATEGORY_MASK)!=0 || 30156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_getIntPropertyMaxValue(UCHAR_GENERAL_CATEGORY_MASK)!=-1) { 30166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error: u_getIntPropertyMin/MaxValue(UCHAR_GENERAL_CATEGORY_MASK) is wrong\n"); 30176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 30186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 30196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Max should be -1 for invalid properties. */ 30206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org max = u_getIntPropertyMaxValue(UCHAR_INVALID_CODE); 30216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (max != -1) { 30226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: u_getIntPropertyMaxValue(-1) = %d, exp. -1\n", 30236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org max); 30246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 30256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 30266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Script should return USCRIPT_INVALID_CODE for an invalid code point. */ 30276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (i=0; i<2; ++i) { 30286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t script; 30296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char* desc; 30306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ec = U_ZERO_ERROR; 30316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org switch (i) { 30326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 0: 30336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org script = uscript_getScript(-1, &ec); 30346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org desc = "uscript_getScript(-1)"; 30356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 30366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 1: 30376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org script = u_getIntPropertyValue(-1, UCHAR_SCRIPT); 30386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org desc = "u_getIntPropertyValue(-1, UCHAR_SCRIPT)"; 30396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 30406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org default: 30416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Internal test error. Too many scripts\n"); 30426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 30436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 30446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* We don't explicitly test ec. It should be U_FAILURE but it 30456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org isn't documented as such. */ 30466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (script != (int32_t)USCRIPT_INVALID_CODE) { 30476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: %s = %d, exp. 0\n", 30486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org desc, script); 30496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 30506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 30516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 30526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 30536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* various tests for consistency of UCD data and API behavior */ 30546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void 30556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTestConsistency() { 30566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char buffer[300]; 30576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org USet *set1, *set2, *set3, *set4; 30586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode errorCode; 30596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 30606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 start, end; 30616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i, length; 30626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 30636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_DECL(hyphenPattern, "[:Hyphen:]", 10); 30646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_DECL(dashPattern, "[:Dash:]", 8); 30656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_DECL(lowerPattern, "[:Lowercase:]", 13); 30666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_DECL(formatPattern, "[:Cf:]", 6); 30676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_DECL(alphaPattern, "[:Alphabetic:]", 14); 30686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 30696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_DECL(mathBlocksPattern, 30706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "[[:block=Mathematical Operators:][:block=Miscellaneous Mathematical Symbols-A:][:block=Miscellaneous Mathematical Symbols-B:][:block=Supplemental Mathematical Operators:][:block=Mathematical Alphanumeric Symbols:]]", 30716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1+32+46+46+45+43+1+1); /* +1 for NUL */ 30726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_DECL(mathPattern, "[:Math:]", 8); 30736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_DECL(unassignedPattern, "[:Cn:]", 6); 30746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_DECL(unknownPattern, "[:sc=Unknown:]", 14); 30756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_DECL(reservedPattern, "[[:Cn:][:Co:][:Cs:]]", 20); 30766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 30776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_INIT(hyphenPattern, "[:Hyphen:]", 10); 30786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_INIT(dashPattern, "[:Dash:]", 8); 30796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_INIT(lowerPattern, "[:Lowercase:]", 13); 30806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_INIT(formatPattern, "[:Cf:]", 6); 30816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_INIT(alphaPattern, "[:Alphabetic:]", 14); 30826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 30836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_INIT(mathBlocksPattern, 30846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "[[:block=Mathematical Operators:][:block=Miscellaneous Mathematical Symbols-A:][:block=Miscellaneous Mathematical Symbols-B:][:block=Supplemental Mathematical Operators:][:block=Mathematical Alphanumeric Symbols:]]", 30856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1+32+46+46+45+43+1+1); /* +1 for NUL */ 30866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_INIT(mathPattern, "[:Math:]", 8); 30876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_INIT(unassignedPattern, "[:Cn:]", 6); 30886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_INIT(unknownPattern, "[:sc=Unknown:]", 14); 30896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_INIT(reservedPattern, "[[:Cn:][:Co:][:Cs:]]", 20); 30906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 30916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 30926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * It used to be that UCD.html and its precursors said 30936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * "Those dashes used to mark connections between pieces of words, 30946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * plus the Katakana middle dot." 30956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 30966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Unicode 4 changed 00AD Soft Hyphen to Cf and removed it from Dash 30976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * but not from Hyphen. 30986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UTC 94 (2003mar) decided to leave it that way and to change UCD.html. 30996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Therefore, do not show errors when testing the Hyphen property. 31006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 31016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Starting with Unicode 4, inconsistencies with [:Hyphen:] are\n" 31026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "known to the UTC and not considered errors.\n"); 31036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 31046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 31056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org set1=uset_openPattern(hyphenPattern, 10, &errorCode); 31066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org set2=uset_openPattern(dashPattern, 8, &errorCode); 31076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_SUCCESS(errorCode)) { 31086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* remove the Katakana middle dot(s) from set1 */ 31096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uset_remove(set1, 0x30fb); 31106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uset_remove(set1, 0xff65); /* halfwidth variant */ 31116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org showAMinusB(set1, set2, "[:Hyphen:]", "[:Dash:]", FALSE); 31126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 31136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("error opening [:Hyphen:] or [:Dash:] - %s (Are you missing data?)\n", u_errorName(errorCode)); 31146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 31156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 31166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* check that Cf is neither Hyphen nor Dash nor Alphabetic */ 31176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org set3=uset_openPattern(formatPattern, 6, &errorCode); 31186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org set4=uset_openPattern(alphaPattern, 14, &errorCode); 31196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_SUCCESS(errorCode)) { 31206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org showAIntersectB(set3, set1, "[:Cf:]", "[:Hyphen:]", FALSE); 31216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org showAIntersectB(set3, set2, "[:Cf:]", "[:Dash:]", TRUE); 31226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org showAIntersectB(set3, set4, "[:Cf:]", "[:Alphabetic:]", TRUE); 31236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 31246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("error opening [:Cf:] or [:Alpbabetic:] - %s (Are you missing data?)\n", u_errorName(errorCode)); 31256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 31266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 31276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uset_close(set1); 31286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uset_close(set2); 31296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uset_close(set3); 31306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uset_close(set4); 31316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 31326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 31336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Check that each lowercase character has "small" in its name 31346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and not "capital". 31356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * There are some such characters, some of which seem odd. 31366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Use the verbose flag to see these notices. 31376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 31386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 31396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org set1=uset_openPattern(lowerPattern, 13, &errorCode); 31406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_SUCCESS(errorCode)) { 31416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0;; ++i) { 31426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=uset_getItem(set1, i, &start, &end, NULL, 0, &errorCode); 31436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(errorCode==U_INDEX_OUTOFBOUNDS_ERROR) { 31446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; /* done */ 31456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 31466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(errorCode)) { 31476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error iterating over [:Lowercase:] at item %d: %s\n", 31486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org i, u_errorName(errorCode)); 31496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 31506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 31516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(length!=0) { 31526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; /* done with code points, got a string or -1 */ 31536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 31546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 31556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while(start<=end) { 31566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=u_charName(start, U_UNICODE_CHAR_NAME, buffer, sizeof(buffer), &errorCode); 31576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(errorCode)) { 31586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("error getting the name of U+%04x - %s\n", start, u_errorName(errorCode)); 31596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 31606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 31616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( (strstr(buffer, "SMALL")==NULL || strstr(buffer, "CAPITAL")!=NULL) && 31626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strstr(buffer, "SMALL CAPITAL")==NULL 31636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 31646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("info: [:Lowercase:] contains U+%04x whose name does not suggest lowercase: %s\n", start, buffer); 31656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 31666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ++start; 31676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 31686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 31696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 31706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("error opening [:Lowercase:] - %s (Are you missing data?)\n", u_errorName(errorCode)); 31716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 31726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uset_close(set1); 31736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 31746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* verify that all assigned characters in Math blocks are exactly Math characters */ 31756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 31766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org set1=uset_openPattern(mathBlocksPattern, -1, &errorCode); 31776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org set2=uset_openPattern(mathPattern, 8, &errorCode); 31786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org set3=uset_openPattern(unassignedPattern, 6, &errorCode); 31796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_SUCCESS(errorCode)) { 31806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uset_retainAll(set2, set1); /* [math blocks]&[:Math:] */ 31816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uset_complement(set3); /* assigned characters */ 31826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uset_retainAll(set1, set3); /* [math blocks]&[assigned] */ 31836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org compareUSets(set1, set2, 31846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "[assigned Math block chars]", "[math blocks]&[:Math:]", 31856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TRUE); 31866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 31876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("error opening [math blocks] or [:Math:] or [:Cn:] - %s (Are you missing data?)\n", u_errorName(errorCode)); 31886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 31896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uset_close(set1); 31906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uset_close(set2); 31916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uset_close(set3); 31926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 31936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* new in Unicode 5.0: exactly all unassigned+PUA+surrogate code points have script=Unknown */ 31946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 31956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org set1=uset_openPattern(unknownPattern, 14, &errorCode); 31966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org set2=uset_openPattern(reservedPattern, 20, &errorCode); 31976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_SUCCESS(errorCode)) { 31986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org compareUSets(set1, set2, 31996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "[:sc=Unknown:]", "[[:Cn:][:Co:][:Cs:]]", 32006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TRUE); 32016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 32026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("error opening [:sc=Unknown:] or [[:Cn:][:Co:][:Cs:]] - %s (Are you missing data?)\n", u_errorName(errorCode)); 32036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 32046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uset_close(set1); 32056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uset_close(set2); 32066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 32076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 32086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 32096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Starting with ICU4C 3.4, the core Unicode properties files 32106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * (uprops.icu, ucase.icu, ubidi.icu, unorm.icu) 32116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * are hardcoded in the common DLL and therefore not included 32126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in the data package any more. 32136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Test requiring these files are disabled so that 32146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * we need not jump through hoops (like adding snapshots of these files 32156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * to testdata). 32166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * See Jitterbug 4497. 32176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 32186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define HARDCODED_DATA_4497 1 32196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 32206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* API coverage for ucase.c */ 32216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestUCase() { 32226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !HARDCODED_DATA_4497 32236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDataMemory *pData; 32246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCaseProps *csp; 32256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UCaseProps *ccsp; 32266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode errorCode; 32276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 32286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* coverage for ucase_openBinary() */ 32296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 32306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pData=udata_open(NULL, UCASE_DATA_TYPE, UCASE_DATA_NAME, &errorCode); 32316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(errorCode)) { 32326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("unable to open " UCASE_DATA_NAME "." UCASE_DATA_TYPE ": %s\n", 32336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_errorName(errorCode)); 32346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 32356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 32366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 32376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org csp=ucase_openBinary((const uint8_t *)pData->pHeader, -1, &errorCode); 32386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(errorCode)) { 32396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ucase_openBinary() fails for the contents of " UCASE_DATA_NAME "." UCASE_DATA_TYPE ": %s\n", 32406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_errorName(errorCode)); 32416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udata_close(pData); 32426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 32436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 32446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 32456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(UCASE_LOWER!=ucase_getType(csp, 0xdf)) { /* verify islower(sharp s) */ 32466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ucase_openBinary() does not seem to return working UCaseProps\n"); 32476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 32486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 32496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucase_close(csp); 32506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udata_close(pData); 32516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 32526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* coverage for ucase_getDummy() */ 32536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 32546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ccsp=ucase_getDummy(&errorCode); 32556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(ucase_tolower(ccsp, 0x41)!=0x41) { 32566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ucase_tolower(dummy, A)!=A\n"); 32576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 32586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 32596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 32606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 32616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* API coverage for ubidi_props.c */ 32626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestUBiDiProps() { 32636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !HARDCODED_DATA_4497 32646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDataMemory *pData; 32656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBiDiProps *bdp; 32666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UBiDiProps *cbdp; 32676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode errorCode; 32686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 32696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* coverage for ubidi_openBinary() */ 32706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 32716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pData=udata_open(NULL, UBIDI_DATA_TYPE, UBIDI_DATA_NAME, &errorCode); 32726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(errorCode)) { 32736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("unable to open " UBIDI_DATA_NAME "." UBIDI_DATA_TYPE ": %s\n", 32746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_errorName(errorCode)); 32756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 32766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 32776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 32786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bdp=ubidi_openBinary((const uint8_t *)pData->pHeader, -1, &errorCode); 32796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(errorCode)) { 32806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ubidi_openBinary() fails for the contents of " UBIDI_DATA_NAME "." UBIDI_DATA_TYPE ": %s\n", 32816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_errorName(errorCode)); 32826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udata_close(pData); 32836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 32846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 32856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 32866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(0x2215!=ubidi_getMirror(bdp, 0x29F5)) { /* verify some data */ 32876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ubidi_openBinary() does not seem to return working UBiDiProps\n"); 32886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 32896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 32906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ubidi_closeProps(bdp); 32916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udata_close(pData); 32926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 32936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* coverage for ubidi_getDummy() */ 32946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 32956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cbdp=ubidi_getDummy(&errorCode); 32966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(ubidi_getClass(cbdp, 0x20)!=0) { 32976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ubidi_getClass(dummy, space)!=0\n"); 32986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 32996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 33006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 33016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 33026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* test case folding, compare return values with CaseFolding.txt ------------ */ 33036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 33046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* bit set for which case foldings for a character have been tested already */ 33056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgenum { 33066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CF_SIMPLE=1, 33076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CF_FULL=2, 33086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CF_TURKIC=4, 33096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CF_ALL=7 33106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 33116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 33126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void 33136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtestFold(UChar32 c, int which, 33146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 simple, UChar32 turkic, 33156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *full, int32_t fullLength, 33166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *turkicFull, int32_t turkicFullLength) { 33176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar s[2], t[32]; 33186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 c2; 33196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length, length2; 33206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 33216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode errorCode=U_ZERO_ERROR; 33226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 33236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=0; 33246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U16_APPEND_UNSAFE(s, length, c); 33256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 33266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if((which&CF_SIMPLE)!=0 && (c2=u_foldCase(c, 0))!=simple) { 33276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_foldCase(U+%04lx, default)=U+%04lx != U+%04lx\n", (long)c, (long)c2, (long)simple); 33286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 33296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if((which&CF_FULL)!=0) { 33306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length2=u_strFoldCase(t, LENGTHOF(t), s, length, 0, &errorCode); 33316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(length2!=fullLength || 0!=u_memcmp(t, full, fullLength)) { 33326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFoldCase(U+%04lx, default) does not fold properly\n", (long)c); 33336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 33346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 33356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if((which&CF_TURKIC)!=0) { 33366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if((c2=u_foldCase(c, U_FOLD_CASE_EXCLUDE_SPECIAL_I))!=turkic) { 33376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_foldCase(U+%04lx, turkic)=U+%04lx != U+%04lx\n", (long)c, (long)c2, (long)simple); 33386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 33396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 33406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length2=u_strFoldCase(t, LENGTHOF(t), s, length, U_FOLD_CASE_EXCLUDE_SPECIAL_I, &errorCode); 33416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(length2!=turkicFullLength || 0!=u_memcmp(t, turkicFull, length2)) { 33426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("u_strFoldCase(U+%04lx, turkic) does not fold properly\n", (long)c); 33436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 33446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 33456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 33466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 33476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* test that c case-folds to itself */ 33486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void 33496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtestFoldToSelf(UChar32 c, int which) { 33506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar s[2]; 33516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length; 33526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 33536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=0; 33546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U16_APPEND_UNSAFE(s, length, c); 33556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org testFold(c, which, c, c, s, length, s, length); 33566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 33576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 33586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstruct CaseFoldingData { 33596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org USet *notSeen; 33606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 prev, prevSimple; 33616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar prevFull[32]; 33626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t prevFullLength; 33636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int which; 33646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 33656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef struct CaseFoldingData CaseFoldingData; 33666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 33676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void U_CALLCONV 33686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgcaseFoldingLineFn(void *context, 33696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *fields[][2], int32_t fieldCount, 33706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode *pErrorCode) { 33716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CaseFoldingData *pData=(CaseFoldingData *)context; 33726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *end; 33736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar full[32]; 33746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar32 c, prev, simple; 33756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t count; 33766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int which; 33776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char status; 33786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 33796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* get code point */ 33806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *s=u_skipWhitespace(fields[0][0]); 33816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(0==strncmp(s, "0000..10FFFF", 12)) { 33826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 33836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Ignore the line 33846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * # @missing: 0000..10FFFF; C; <code point> 33856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * because maps-to-self is already our default, and this line breaks this parser. 33866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 33876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 33886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 33896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org c=(UChar32)strtoul(s, &end, 16); 33906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org end=(char *)u_skipWhitespace(end); 33916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(end<=fields[0][0] || end!=fields[0][1]) { 33926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("syntax error in CaseFolding.txt field 0 at %s\n", fields[0][0]); 33936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *pErrorCode=U_PARSE_ERROR; 33946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 33956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 33966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 33976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* get the status of this mapping */ 33986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=*u_skipWhitespace(fields[1][0]); 33996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status!='C' && status!='S' && status!='F' && status!='T') { 34006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("unrecognized status field in CaseFolding.txt at %s\n", fields[0][0]); 34016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *pErrorCode=U_PARSE_ERROR; 34026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 34036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 34046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 34056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* get the mapping */ 34066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org count=u_parseString(fields[2][0], full, 32, (uint32_t *)&simple, pErrorCode); 34076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(*pErrorCode)) { 34086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error parsing CaseFolding.txt mapping at %s\n", fields[0][0]); 34096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 34106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 34116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 34126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* there is a simple mapping only if there is exactly one code point (count is in UChars) */ 34136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(count==0 || count>2 || (count==2 && U16_IS_SINGLE(full[1]))) { 34146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org simple=c; 34156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 34166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 34176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(c!=(prev=pData->prev)) { 34186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 34196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Test remaining mappings for the previous code point. 34206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If a turkic folding was not mentioned, then it should fold the same 34216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * as the regular simple case folding. 34226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 34236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar prevString[2]; 34246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length; 34256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 34266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=0; 34276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U16_APPEND_UNSAFE(prevString, length, prev); 34286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org testFold(prev, (~pData->which)&CF_ALL, 34296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org prev, pData->prevSimple, 34306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org prevString, length, 34316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pData->prevFull, pData->prevFullLength); 34326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pData->prev=pData->prevSimple=c; 34336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length=0; 34346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U16_APPEND_UNSAFE(pData->prevFull, length, c); 34356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pData->prevFullLength=length; 34366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pData->which=0; 34376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 34386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 34396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 34406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Turn the status into a bit set of case foldings to test. 34416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Remember non-Turkic case foldings as defaults for Turkic mode. 34426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 34436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org switch(status) { 34446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 'C': 34456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org which=CF_SIMPLE|CF_FULL; 34466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pData->prevSimple=simple; 34476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_memcpy(pData->prevFull, full, count); 34486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pData->prevFullLength=count; 34496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 34506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 'S': 34516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org which=CF_SIMPLE; 34526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pData->prevSimple=simple; 34536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 34546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 'F': 34556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org which=CF_FULL; 34566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_memcpy(pData->prevFull, full, count); 34576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pData->prevFullLength=count; 34586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 34596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 'T': 34606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org which=CF_TURKIC; 34616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 34626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org default: 34636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org which=0; 34646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; /* won't happen because of test above */ 34656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 34666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 34676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org testFold(c, which, simple, simple, full, count, full, count); 34686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 34696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* remember which case foldings of c have been tested */ 34706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pData->which|=which; 34716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 34726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* remove c from the set of ones not mentioned in CaseFolding.txt */ 34736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uset_remove(pData->notSeen, c); 34746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 34756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 34766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void 34776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTestCaseFolding() { 34786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CaseFoldingData data={ NULL }; 34796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char *fields[3][2]; 34806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode errorCode; 34816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 34826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static char *lastLine= (char *)"10FFFF; C; 10FFFF;"; 34836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 34846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_ZERO_ERROR; 34856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* test BMP & plane 1 - nothing interesting above */ 34866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org data.notSeen=uset_open(0, 0x1ffff); 34876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org data.prevFullLength=1; /* length of full case folding of U+0000 */ 34886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 34896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org parseUCDFile("CaseFolding.txt", fields, 3, caseFoldingLineFn, &data, &errorCode); 34906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_SUCCESS(errorCode)) { 34916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i, start, end; 34926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 34936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* add a pseudo-last line to finish testing of the actual last one */ 34946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fields[0][0]=lastLine; 34956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fields[0][1]=lastLine+6; 34966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fields[1][0]=lastLine+7; 34976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fields[1][1]=lastLine+9; 34986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fields[2][0]=lastLine+10; 34996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fields[2][1]=lastLine+17; 35006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org caseFoldingLineFn(&data, fields, 3, &errorCode); 35016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 35026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* verify that all code points that are not mentioned in CaseFolding.txt fold to themselves */ 35036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0; 35046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0==uset_getItem(data.notSeen, i, &start, &end, NULL, 0, &errorCode) && 35056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_SUCCESS(errorCode); 35066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ++i 35076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ) { 35086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org do { 35096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org testFoldToSelf(start, CF_ALL); 35106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } while(++start<=end); 35116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 35126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 35136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 35146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uset_close(data.notSeen); 35156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3516