X-Git-Url: https://git.saurik.com/apple/icu.git/blobdiff_plain/51004dcb01e06fef634b61be77ed73dd61cb6db9..a0b4f637ba1a6c3c5651b61a69303b029bacf7d3:/icuSources/test/cintltst/cucdtst.c diff --git a/icuSources/test/cintltst/cucdtst.c b/icuSources/test/cintltst/cucdtst.c index b31338dd..b7ea2740 100644 --- a/icuSources/test/cintltst/cucdtst.c +++ b/icuSources/test/cintltst/cucdtst.c @@ -1,6 +1,6 @@ /******************************************************************** * COPYRIGHT: - * Copyright (c) 1997-2013, International Business Machines Corporation and + * Copyright (c) 1997-2014, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /******************************************************************************* @@ -34,8 +34,7 @@ #include "usc_impl.h" #include "udatamem.h" /* for testing ucase_openBinary() */ #include "cucdapi.h" - -#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0])) +#include "cmemory.h" /* prototypes --------------------------------------------------------------- */ @@ -50,6 +49,7 @@ static void TestCodeUnit(void); static void TestCodePoint(void); static void TestCharLength(void); static void TestCharNames(void); +static void TestUCharFromNameUnderflow(void); static void TestMirroring(void); static void TestUScriptRunAPI(void); static void TestAdditionalProperties(void); @@ -104,7 +104,6 @@ parseUCDFile(const char *filename, /* test data ---------------------------------------------------------------- */ -static const UChar LAST_CHAR_CODE_IN_FILE = 0xFFFD; static const char tagStrings[] = "MnMcMeNdNlNoZsZlZpCcCfCsCoCnLuLlLtLmLoPcPdPsPePoSmScSkSoPiPf"; static const int32_t tagValues[] = { @@ -159,7 +158,12 @@ static const char dirStrings[][5] = { "RLO", "PDF", "NSM", - "BN" + "BN", + /* new in Unicode 6.3/ICU 52 */ + "FSI", + "LRI", + "RLI", + "PDI" }; void addUnicodeTest(TestNode** root); @@ -180,6 +184,7 @@ void addUnicodeTest(TestNode** root) addTest(root, &TestControlPrint, "tsutil/cucdtst/TestControlPrint"); addTest(root, &TestIdentifier, "tsutil/cucdtst/TestIdentifier"); addTest(root, &TestCharNames, "tsutil/cucdtst/TestCharNames"); + addTest(root, &TestUCharFromNameUnderflow, "tsutil/cucdtst/TestUCharFromNameUnderflow"); addTest(root, &TestMirroring, "tsutil/cucdtst/TestMirroring"); addTest(root, &TestUScriptCodeAPI, "tsutil/cucdtst/TestUScriptCodeAPI"); addTest(root, &TestHasScript, "tsutil/cucdtst/TestHasScript"); @@ -555,31 +560,31 @@ static void TestMisc() memset(icuVersion, 0, U_MAX_VERSION_STRING_LENGTH); - testSampleCharProps(u_isspace, "u_isspace", sampleSpaces, LENGTHOF(sampleSpaces), TRUE); - testSampleCharProps(u_isspace, "u_isspace", sampleNonSpaces, LENGTHOF(sampleNonSpaces), FALSE); + testSampleCharProps(u_isspace, "u_isspace", sampleSpaces, UPRV_LENGTHOF(sampleSpaces), TRUE); + testSampleCharProps(u_isspace, "u_isspace", sampleNonSpaces, UPRV_LENGTHOF(sampleNonSpaces), FALSE); testSampleCharProps(u_isJavaSpaceChar, "u_isJavaSpaceChar", - sampleSpaces, LENGTHOF(sampleSpaces), TRUE); + sampleSpaces, UPRV_LENGTHOF(sampleSpaces), TRUE); testSampleCharProps(u_isJavaSpaceChar, "u_isJavaSpaceChar", - sampleNonSpaces, LENGTHOF(sampleNonSpaces), FALSE); + sampleNonSpaces, UPRV_LENGTHOF(sampleNonSpaces), FALSE); testSampleCharProps(u_isWhitespace, "u_isWhitespace", - sampleWhiteSpaces, LENGTHOF(sampleWhiteSpaces), TRUE); + sampleWhiteSpaces, UPRV_LENGTHOF(sampleWhiteSpaces), TRUE); testSampleCharProps(u_isWhitespace, "u_isWhitespace", - sampleNonWhiteSpaces, LENGTHOF(sampleNonWhiteSpaces), FALSE); + sampleNonWhiteSpaces, UPRV_LENGTHOF(sampleNonWhiteSpaces), FALSE); testSampleCharProps(u_isdefined, "u_isdefined", - sampleDefined, LENGTHOF(sampleDefined), TRUE); + sampleDefined, UPRV_LENGTHOF(sampleDefined), TRUE); testSampleCharProps(u_isdefined, "u_isdefined", - sampleUndefined, LENGTHOF(sampleUndefined), FALSE); + sampleUndefined, UPRV_LENGTHOF(sampleUndefined), FALSE); - testSampleCharProps(u_isbase, "u_isbase", sampleBase, LENGTHOF(sampleBase), TRUE); - testSampleCharProps(u_isbase, "u_isbase", sampleNonBase, LENGTHOF(sampleNonBase), FALSE); + testSampleCharProps(u_isbase, "u_isbase", sampleBase, UPRV_LENGTHOF(sampleBase), TRUE); + testSampleCharProps(u_isbase, "u_isbase", sampleNonBase, UPRV_LENGTHOF(sampleNonBase), FALSE); - testSampleCharProps(u_isdigit, "u_isdigit", sampleDigits, LENGTHOF(sampleDigits), TRUE); - testSampleCharProps(u_isdigit, "u_isdigit", sampleNonDigits, LENGTHOF(sampleNonDigits), FALSE); + testSampleCharProps(u_isdigit, "u_isdigit", sampleDigits, UPRV_LENGTHOF(sampleDigits), TRUE); + testSampleCharProps(u_isdigit, "u_isdigit", sampleNonDigits, UPRV_LENGTHOF(sampleNonDigits), FALSE); - for (i = 0; i < LENGTHOF(sampleDigits); i++) { + for (i = 0; i < UPRV_LENGTHOF(sampleDigits); i++) { if (u_charDigitValue(sampleDigits[i]) != sampleDigitValues[i]) { log_err("error: u_charDigitValue(U+04x)=%d != %d\n", sampleDigits[i], u_charDigitValue(sampleDigits[i]), sampleDigitValues[i]); @@ -717,7 +722,7 @@ static void TestMisc() { 0xff3a, 37, -1 } }; - for(i=0; i", &errorCode); + if(U_SUCCESS(errorCode)) { + log_err("u_charFromName() = U+%04x but should fail - %s\n", c, u_errorName(errorCode)); + } + + // Test related edge cases. + errorCode=U_ZERO_ERROR; + c=u_charFromName(U_EXTENDED_CHAR_NAME, "<-00a0>", &errorCode); + if(U_SUCCESS(errorCode)) { + log_err("u_charFromName(<-00a0>) = U+%04x but should fail - %s\n", c, u_errorName(errorCode)); + } + + errorCode=U_ZERO_ERROR; + c=u_charFromName(U_EXTENDED_CHAR_NAME, "", &errorCode); + if(U_SUCCESS(errorCode)) { + log_err("u_charFromName() = U+%04x but should fail - %s\n", c, u_errorName(errorCode)); + } + + errorCode=U_ZERO_ERROR; + c=u_charFromName(U_EXTENDED_CHAR_NAME, "", &errorCode); + if(U_SUCCESS(errorCode)) { + log_err("u_charFromName() = U+%04x but should fail - %s\n", c, u_errorName(errorCode)); + } +} + /* test u_isMirrored() and u_charMirror() ----------------------------------- */ static void @@ -1979,6 +2015,18 @@ TestMirroring() { if(c3!=start) { log_err("u_charMirror() does not roundtrip: U+%04lx->U+%04lx->U+%04lx\n", (long)start, (long)c2, (long)c3); } + c3=u_getBidiPairedBracket(start); + if(u_getIntPropertyValue(start, UCHAR_BIDI_PAIRED_BRACKET_TYPE)==U_BPT_NONE) { + if(c3!=start) { + log_err("u_getBidiPairedBracket(U+%04lx) != self for bpt(c)==None\n", + (long)start); + } + } else { + if(c3!=c2) { + log_err("u_getBidiPairedBracket(U+%04lx) != U+%04lx = bmg(c)'\n", + (long)start, (long)c2); + } + } } while(++start<=end); } } @@ -2058,11 +2106,11 @@ TestUScriptRunAPI() const RunTestData *testData; int32_t nRuns; } testDataEntries[] = { - {testData1, LENGTHOF(testData1)}, - {testData2, LENGTHOF(testData2)} + {testData1, UPRV_LENGTHOF(testData1)}, + {testData2, UPRV_LENGTHOF(testData2)} }; - static const int32_t nTestEntries = LENGTHOF(testDataEntries); + static const int32_t nTestEntries = UPRV_LENGTHOF(testDataEntries); int32_t testEntry; for (testEntry = 0; testEntry < nTestEntries; testEntry += 1) { @@ -2407,8 +2455,7 @@ TestAdditionalProperties() { { 0x10909, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT }, { 0x10fe4, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT }, - { 0x0605, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT_ARABIC }, - { 0x061c, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT_ARABIC }, + { 0x061d, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT_ARABIC }, { 0x063f, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT_ARABIC }, { 0x070e, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT_ARABIC }, { 0x0775, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT_ARABIC }, @@ -2421,7 +2468,7 @@ TestAdditionalProperties() { { 0x155A, UCHAR_BLOCK, UBLOCK_UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS }, { 0x1717, UCHAR_BLOCK, UBLOCK_TAGALOG }, { 0x1900, UCHAR_BLOCK, UBLOCK_LIMBU }, - { 0x1AFF, UCHAR_BLOCK, UBLOCK_NO_BLOCK }, + { 0x1CBF, UCHAR_BLOCK, UBLOCK_NO_BLOCK }, { 0x3040, UCHAR_BLOCK, UBLOCK_HIRAGANA }, { 0x1D0FF, UCHAR_BLOCK, UBLOCK_BYZANTINE_MUSICAL_SYMBOLS }, { 0x50000, UCHAR_BLOCK, UBLOCK_NO_BLOCK }, @@ -2615,6 +2662,29 @@ TestAdditionalProperties() { { 0x08ba, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT_ARABIC }, { 0x1eee4, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT_ARABIC }, + { -1, 0x630, 0 }, /* version break for Unicode 6.3 */ + + /* unassigned code points in the currency symbols block now default to ET */ + { 0x20C0, UCHAR_BIDI_CLASS, U_EUROPEAN_NUMBER_TERMINATOR }, + { 0x20CF, UCHAR_BIDI_CLASS, U_EUROPEAN_NUMBER_TERMINATOR }, + + /* new property in Unicode 6.3 */ + { 0x0027, UCHAR_BIDI_PAIRED_BRACKET_TYPE, U_BPT_NONE }, + { 0x0028, UCHAR_BIDI_PAIRED_BRACKET_TYPE, U_BPT_OPEN }, + { 0x0029, UCHAR_BIDI_PAIRED_BRACKET_TYPE, U_BPT_CLOSE }, + { 0xFF5C, UCHAR_BIDI_PAIRED_BRACKET_TYPE, U_BPT_NONE }, + { 0xFF5B, UCHAR_BIDI_PAIRED_BRACKET_TYPE, U_BPT_OPEN }, + { 0xFF5D, UCHAR_BIDI_PAIRED_BRACKET_TYPE, U_BPT_CLOSE }, + + { -1, 0x700, 0 }, /* version break for Unicode 7.0 */ + + /* new character range with Joining_Group values */ + { 0x10ABF, UCHAR_JOINING_GROUP, U_JG_NO_JOINING_GROUP }, + { 0x10AC0, UCHAR_JOINING_GROUP, U_JG_MANICHAEAN_ALEPH }, + { 0x10AC1, UCHAR_JOINING_GROUP, U_JG_MANICHAEAN_BETH }, + { 0x10AEF, UCHAR_JOINING_GROUP, U_JG_MANICHAEAN_HUNDRED }, + { 0x10AF0, UCHAR_JOINING_GROUP, U_JG_NO_JOINING_GROUP }, + /* undefined UProperty values */ { 0x61, 0x4a7, 0 }, { 0x234bc, 0x15ed, 0 } @@ -2694,6 +2764,9 @@ TestAdditionalProperties() { if(u_getIntPropertyMaxValue(UCHAR_WORD_BREAK)!=(int32_t)U_WB_COUNT-1) { log_err("error: u_getIntPropertyMaxValue(UCHAR_WORD_BREAK) wrong\n"); } + if(u_getIntPropertyMaxValue(UCHAR_BIDI_PAIRED_BRACKET_TYPE)!=(int32_t)U_BPT_COUNT-1) { + log_err("error: u_getIntPropertyMaxValue(UCHAR_BIDI_PAIRED_BRACKET_TYPE) wrong\n"); + } /*JB#2410*/ if( u_getIntPropertyMaxValue(0x2345)!=-1) { log_err("error: u_getIntPropertyMaxValue(0x2345) wrong\n"); @@ -2782,8 +2855,6 @@ TestNumericProperties(void) { int32_t type; double numValue; } values[]={ - { 0x12456, U_NT_NUMERIC, -1. }, - { 0x12457, U_NT_NUMERIC, -1. }, { 0x0F33, U_NT_NUMERIC, -1./2. }, { 0x0C66, U_NT_DECIMAL, 0 }, { 0x96f6, U_NT_NUMERIC, 0 }, @@ -2846,7 +2917,7 @@ TestNumericProperties(void) { UChar32 c; int32_t i, type; - for(i=0; i