X-Git-Url: https://git.saurik.com/apple/icu.git/blobdiff_plain/f3c0d7a59d99c2a94c6b8822291f0e42be3773c9..HEAD:/icuSources/test/cintltst/utf16tst.c diff --git a/icuSources/test/cintltst/utf16tst.c b/icuSources/test/cintltst/utf16tst.c index 8ce403a5..2d3cecdd 100644 --- a/icuSources/test/cintltst/utf16tst.c +++ b/icuSources/test/cintltst/utf16tst.c @@ -16,14 +16,27 @@ */ #include "unicode/utypes.h" -#include "unicode/utf16.h" #include "unicode/ustring.h" +#include "unicode/utf16.h" +#include "unicode/utf_old.h" #include "cmemory.h" #include "cstring.h" #include "cintltst.h" #include -static void printUChars(const UChar *uchars); +// Obsolete macro from obsolete unicode/utf_old.h, for some old test data. +#ifndef UTF_ERROR_VALUE +# define UTF_ERROR_VALUE 0xffff +#endif + +#if !U_HIDE_OBSOLETE_UTF_OLD_H +static void printUChars(const UChar *uchars) { + int16_t i=0; + for(i=0; i= 4 && i< 8){ - if(!UTF16_IS_LEAD(c) || UTF16_IS_SINGLE(c) || UTF16_IS_TRAIL(c) || !U16_IS_LEAD(c) || U16_IS_SINGLE(c) || U16_IS_TRAIL(c)){ + if( +#if !U_HIDE_OBSOLETE_UTF_OLD_H + !UTF16_IS_LEAD(c) || UTF16_IS_SINGLE(c) || UTF16_IS_TRAIL(c) || +#endif + !U16_IS_LEAD(c) || U16_IS_SINGLE(c) || U16_IS_TRAIL(c)){ log_err("ERROR: %x is a first surrogate\n", c); } } if(i >= 8 && i< 12){ - if(!UTF16_IS_TRAIL(c) || UTF16_IS_SINGLE(c) || UTF16_IS_LEAD(c) || !U16_IS_TRAIL(c) || U16_IS_SINGLE(c) || U16_IS_LEAD(c)){ + if( +#if !U_HIDE_OBSOLETE_UTF_OLD_H + !UTF16_IS_TRAIL(c) || UTF16_IS_SINGLE(c) || UTF16_IS_LEAD(c) || +#endif + !U16_IS_TRAIL(c) || U16_IS_SINGLE(c) || U16_IS_LEAD(c)) { log_err("ERROR: %x is a second surrogate\n", c); } } @@ -95,18 +120,26 @@ static void TestCharLength() }; int16_t i; +#if !U_HIDE_OBSOLETE_UTF_OLD_H UBool multiple; +#endif for(i=0; i 0; --offset){ setOffset=offset; +#if !U_HIDE_OBSOLETE_UTF_OLD_H UTF16_PREV_CHAR_UNSAFE(input, setOffset, c); if(setOffset != movedOffset[i+3]){ log_err("ERROR: UTF16_PREV_CHAR_UNSAFE failed to move the offset correctly at %d\n ExpectedOffset:%d Got %d\n", @@ -283,7 +338,7 @@ static void TestNextPrevChar(){ if(c != result[i+3]){ log_err("ERROR: UTF16_PREV_CHAR_UNSAFE failed for offset=%ld. Expected:%lx Got:%lx\n", offset, result[i+3], c); } - +#endif setOffset=offset; U16_PREV_UNSAFE(input, setOffset, c); if(setOffset != movedOffset[i+3]){ @@ -293,7 +348,7 @@ static void TestNextPrevChar(){ if(c != result[i+3]){ log_err("ERROR: U16_PREV_CHAR_UNSAFE failed for offset=%ld. Expected:%lx Got:%lx\n", offset, result[i+3], c); } - +#if !U_HIDE_OBSOLETE_UTF_OLD_H setOffset=offset; UTF16_PREV_CHAR_SAFE(input, 0, setOffset, c, FALSE); if(setOffset != movedOffset[i+4]){ @@ -303,17 +358,29 @@ static void TestNextPrevChar(){ if(c != result[i+4]){ log_err("ERROR: UTF16_PREV_CHAR_SAFE failed for input=%ld. Expected:%lx Got:%lx\n", offset, result[i+4], c); } - +#endif setOffset=offset; U16_PREV(input, 0, setOffset, c); if(setOffset != movedOffset[i+4]){ log_err("ERROR: U16_PREV failed to move the offset correctly at %d\n ExpectedOffset:%d Got %d\n", offset, movedOffset[i+4], setOffset); } - if(c != result[i+4]){ - log_err("ERROR: U16_PREV failed for input=%ld. Expected:%lx Got:%lx\n", offset, result[i+4], c); - } + expected = result[i+4]; + if(c != expected) { + log_err("ERROR: U16_PREV failed for input=%ld. Expected:%lx Got:%lx\n", offset, expected, c); + } + setOffset=offset; + U16_PREV_OR_FFFD(input, 0, setOffset, c); + if(setOffset != movedOffset[i+4]){ + log_err("ERROR: U16_PREV_OR_FFFD failed to move the offset correctly at %d\n ExpectedOffset:%d Got %d\n", + offset, movedOffset[i+4], setOffset); + } + if(U_IS_SURROGATE(expected)) { expected=0xfffd; } + if(c != expected) { + log_err("ERROR: U16_PREV_OR_FFFD failed for input=%ld. Expected:%lx Got:%lx\n", offset, expected, c); + } +#if !U_HIDE_OBSOLETE_UTF_OLD_H setOffset=offset; UTF16_PREV_CHAR_SAFE(input, 0, setOffset, c, TRUE); if(setOffset != movedOffset[i+5]){ @@ -323,7 +390,7 @@ static void TestNextPrevChar(){ if(c != result[i+5]){ log_err("ERROR: UTF16_PREV_CHAR_SAFE(strict) failed for input=%ld. Expected:%lx Got:%lx\n", offset, result[i+5], c); } - +#endif i=(uint16_t)(i+6); } @@ -349,14 +416,24 @@ static void TestNulTerminated() { 0 }; - UChar32 c, c2; + UChar32 c, c2, expected; int32_t i0, i=0, j, k, expectedIndex; int32_t cpIndex=0; do { i0=i; U16_NEXT(input, i, -1, c); - if(c!=result[cpIndex]) { - log_err("U16_NEXT(from %d)=U+%04x != U+%04x\n", i0, c, result[cpIndex]); + expected=result[cpIndex]; + if(c!=expected) { + log_err("U16_NEXT(from %d)=U+%04x != U+%04x\n", i0, c, expected); + } + j=i0; + U16_NEXT_OR_FFFD(input, j, -1, c); + if(U_IS_SURROGATE(expected)) { expected=0xfffd; } + if(c!=expected) { + log_err("U16_NEXT_OR_FFFD(from %d)=U+%04x != U+%04x\n", i0, c, expected); + } + if(j!=i) { + log_err("U16_NEXT_OR_FFFD() moved to index %d but U16_NEXT() moved to %d\n", j, i); } j=i0; U16_FWD_1(input, j, -1); @@ -385,6 +462,11 @@ static void TestNulTerminated() { if(c2!=c) { log_err("U16_NEXT(from %d)=U+%04x != U+%04x=U16_GET(at %d)\n", i0, c, c2, j); } + U16_GET_OR_FFFD(input, 0, j, -1, c2); + expected= U_IS_SURROGATE(c) ? 0xfffd : c; + if(c2!=expected) { + log_err("U16_NEXT_OR_FFFD(from %d)=U+%04x != U+%04x=U16_GET_OR_FFFD(at %d)\n", i0, expected, c2, j); + } /* U16_SET_CP_LIMIT moves from a non-lead byte to the limit of the code point */ k=j+1; U16_SET_CP_LIMIT(input, 0, k, -1); @@ -410,6 +492,7 @@ static void TestFwdBack(){ uint16_t offunsafe=0, offsafe=0; uint16_t i=0; +#if !U_HIDE_OBSOLETE_UTF_OLD_H while(offunsafe < UPRV_LENGTHOF(input)){ UTF16_FWD_1_UNSAFE(input, offunsafe); if(offunsafe != fwd_unsafe[i]){ @@ -417,7 +500,7 @@ static void TestFwdBack(){ } i++; } - +#endif offunsafe=0, offsafe=0; i=0; while(offunsafe < UPRV_LENGTHOF(input)){ @@ -427,7 +510,8 @@ static void TestFwdBack(){ } i++; } - +#if !U_HIDE_OBSOLETE_UTF_OLD_H + offunsafe=0, offsafe=0; i=0; while(offsafe < UPRV_LENGTHOF(input)){ UTF16_FWD_1_SAFE(input, offsafe, UPRV_LENGTHOF(input)); @@ -436,7 +520,8 @@ static void TestFwdBack(){ } i++; } - +#endif + offunsafe=0, offsafe=0; i=0; while(offsafe < UPRV_LENGTHOF(input)){ U16_FWD_1(input, offsafe, UPRV_LENGTHOF(input)); @@ -445,7 +530,7 @@ static void TestFwdBack(){ } i++; } - +#if !U_HIDE_OBSOLETE_UTF_OLD_H offunsafe=UPRV_LENGTHOF(input); offsafe=UPRV_LENGTHOF(input); i=0; @@ -456,7 +541,7 @@ static void TestFwdBack(){ } i++; } - +#endif offunsafe=UPRV_LENGTHOF(input); offsafe=UPRV_LENGTHOF(input); i=0; @@ -467,7 +552,9 @@ static void TestFwdBack(){ } i++; } - +#if !U_HIDE_OBSOLETE_UTF_OLD_H + offunsafe=UPRV_LENGTHOF(input); + offsafe=UPRV_LENGTHOF(input); i=0; while(offsafe > 0){ UTF16_BACK_1_SAFE(input,0, offsafe); @@ -476,7 +563,9 @@ static void TestFwdBack(){ } i++; } - +#endif + offunsafe=UPRV_LENGTHOF(input); + offsafe=UPRV_LENGTHOF(input); i=0; while(offsafe > 0){ U16_BACK_1(input,0, offsafe); @@ -488,13 +577,14 @@ static void TestFwdBack(){ offunsafe=0; offsafe=0; +#if !U_HIDE_OBSOLETE_UTF_OLD_H for(i=0; i 0) { +#if !U_HIDE_OBSOLETE_UTF_OLD_H setOffset=offset; UTF16_SET_CHAR_LIMIT_UNSAFE(input, setOffset); if(setOffset != limit_unsafe[i]){ log_err("ERROR: UTF16_SET_CHAR_LIMIT_UNSAFE failed for offset=%ld. Expected:%lx Got:%lx\n", offset, limit_unsafe[i], setOffset); } - +#endif setOffset=offset; U16_SET_CP_LIMIT_UNSAFE(input, setOffset); if(setOffset != limit_unsafe[i]){ @@ -613,6 +703,7 @@ static void TestSetChar(){ } static void TestAppendChar(){ +#if !U_HIDE_OBSOLETE_UTF_OLD_H static UChar s[5]={0x0061, 0x0062, 0x0063, 0x0064, 0x0000}; static uint32_t test[]={ /*append-position(unsafe), CHAR to be appended */ @@ -708,7 +799,7 @@ static void TestAppendChar(){ count++; } free(str); - +#endif } static void TestAppend() { @@ -776,27 +867,28 @@ static void TestSurrogate(){ static UChar32 s[] = {0x10000, 0x10ffff, 0x50000, 0x100000, 0x1abcd}; int i = 0; while (i < 5) { - UChar first = UTF_FIRST_SURROGATE(s[i]); - UChar second = UTF_SECOND_SURROGATE(s[i]); + UChar first = U16_LEAD(s[i]); + UChar second = U16_TRAIL(s[i]); /* algorithm from the Unicode consortium */ UChar firstresult = (UChar)(((s[i] - 0x10000) / 0x400) + 0xD800); UChar secondresult = (UChar)(((s[i] - 0x10000) % 0x400) + 0xDC00); - if (first != UTF16_LEAD(s[i]) || first != U16_LEAD(s[i]) || first != firstresult) { + if ( +#if !U_HIDE_OBSOLETE_UTF_OLD_H + first != UTF16_LEAD(s[i]) || first != UTF_FIRST_SURROGATE(s[i]) || +#endif + first != firstresult) { log_err("Failure in first surrogate in 0x%x expected to be 0x%x\n", s[i], firstresult); } - if (second != UTF16_TRAIL(s[i]) || second != U16_TRAIL(s[i]) || second != secondresult) { + if ( +#if !U_HIDE_OBSOLETE_UTF_OLD_H + second != UTF16_TRAIL(s[i]) || second != UTF_SECOND_SURROGATE(s[i]) || +#endif + second != secondresult) { log_err("Failure in second surrogate in 0x%x expected to be 0x%x\n", s[i], secondresult); } i ++; } } - -static void printUChars(const UChar *uchars){ - int16_t i=0; - for(i=0; i