Author: zooey Date: 2010-07-07 22:42:45 +0200 (Wed, 07 Jul 2010) New Revision: 37421 Changeset: http://dev.haiku-os.org/changeset/37421/haiku Modified: haiku/branches/developer/zooey/posix-locale/src/tests/system/libroot/posix/locale_test.cpp Log: * added tests for wctype functions Modified: haiku/branches/developer/zooey/posix-locale/src/tests/system/libroot/posix/locale_test.cpp =================================================================== --- haiku/branches/developer/zooey/posix-locale/src/tests/system/libroot/posix/locale_test.cpp 2010-07-07 19:37:41 UTC (rev 37420) +++ haiku/branches/developer/zooey/posix-locale/src/tests/system/libroot/posix/locale_test.cpp 2010-07-07 20:42:45 UTC (rev 37421) @@ -8,6 +8,8 @@ #include <locale.h> #include <stdio.h> #include <time.h> +//#include <wchar.h> +#include <wctype.h> void @@ -142,6 +144,74 @@ } +unsigned short +determineFullClassInfo(int i) +{ + unsigned short classInfo = 0; + + if (isblank(i)) + classInfo |= _ISblank; + if (iscntrl(i)) + classInfo |= _IScntrl; + if (ispunct(i)) + classInfo |= _ISpunct; + if (isalnum(i)) + classInfo |= _ISalnum; + if (isupper(i)) + classInfo |= _ISupper; + if (islower(i)) + classInfo |= _ISlower; + if (isalpha(i)) + classInfo |= _ISalpha; + if (isdigit(i)) + classInfo |= _ISdigit; + if (isxdigit(i)) + classInfo |= _ISxdigit; + if (isspace(i)) + classInfo |= _ISspace; + if (isprint(i)) + classInfo |= _ISprint; + if (isgraph(i)) + classInfo |= _ISgraph; + + return classInfo; +} + + +unsigned short +determineWideFullClassInfo(int i) +{ + unsigned short classInfo = 0; + + if (iswblank(i)) + classInfo |= _ISblank; + if (iswcntrl(i)) + classInfo |= _IScntrl; + if (iswpunct(i)) + classInfo |= _ISpunct; + if (iswalnum(i)) + classInfo |= _ISalnum; + if (iswupper(i)) + classInfo |= _ISupper; + if (iswlower(i)) + classInfo |= _ISlower; + if (iswalpha(i)) + classInfo |= _ISalpha; + if (iswdigit(i)) + classInfo |= _ISdigit; + if (iswxdigit(i)) + classInfo |= _ISxdigit; + if (iswspace(i)) + classInfo |= _ISspace; + if (iswprint(i)) + classInfo |= _ISprint; + if (iswgraph(i)) + classInfo |= _ISgraph; + + return classInfo; +} + + void test_posix_ctype() { @@ -254,31 +324,7 @@ printf("ctype of POSIX locale\n"); int problemCount = 0; for (int i = 0; i < 256; ++i) { - unsigned short classInfo = 0; - if (isblank(i)) - classInfo |= _ISblank; - if (iscntrl(i)) - classInfo |= _IScntrl; - if (ispunct(i)) - classInfo |= _ISpunct; - if (isalnum(i)) - classInfo |= _ISalnum; - if (isupper(i)) - classInfo |= _ISupper; - if (islower(i)) - classInfo |= _ISlower; - if (isalpha(i)) - classInfo |= _ISalpha; - if (isdigit(i)) - classInfo |= _ISdigit; - if (isxdigit(i)) - classInfo |= _ISxdigit; - if (isspace(i)) - classInfo |= _ISspace; - if (isprint(i)) - classInfo |= _ISprint; - if (isgraph(i)) - classInfo |= _ISgraph; + unsigned short classInfo = determineFullClassInfo(i); if (classInfo != classInfo_POSIX[i]) { printf("\tPROBLEM: %d = %x (expected %x)\n", i, classInfo, @@ -417,31 +463,7 @@ printf("ctype of de_DE.ISO8859-1 locale\n"); int problemCount = 0; for (int i = 0; i < 256; ++i) { - unsigned short classInfo = 0; - if (isblank(i)) - classInfo |= _ISblank; - if (iscntrl(i)) - classInfo |= _IScntrl; - if (ispunct(i)) - classInfo |= _ISpunct; - if (isalnum(i)) - classInfo |= _ISalnum; - if (isupper(i)) - classInfo |= _ISupper; - if (islower(i)) - classInfo |= _ISlower; - if (isalpha(i)) - classInfo |= _ISalpha; - if (isdigit(i)) - classInfo |= _ISdigit; - if (isxdigit(i)) - classInfo |= _ISxdigit; - if (isspace(i)) - classInfo |= _ISspace; - if (isprint(i)) - classInfo |= _ISprint; - if (isgraph(i)) - classInfo |= _ISgraph; + unsigned short classInfo = determineFullClassInfo(i); if (classInfo != classInfo_ISO8859_1[i]) { printf("\tPROBLEM: %d = %x (expected %x)\n", i, classInfo, @@ -580,31 +602,7 @@ printf("ctype of de_DE.UTF-8 locale\n"); int problemCount = 0; for (int i = 0; i < 256; ++i) { - unsigned short classInfo = 0; - if (isblank(i)) - classInfo |= _ISblank; - if (iscntrl(i)) - classInfo |= _IScntrl; - if (ispunct(i)) - classInfo |= _ISpunct; - if (isalnum(i)) - classInfo |= _ISalnum; - if (isupper(i)) - classInfo |= _ISupper; - if (islower(i)) - classInfo |= _ISlower; - if (isalpha(i)) - classInfo |= _ISalpha; - if (isdigit(i)) - classInfo |= _ISdigit; - if (isxdigit(i)) - classInfo |= _ISxdigit; - if (isspace(i)) - classInfo |= _ISspace; - if (isprint(i)) - classInfo |= _ISprint; - if (isgraph(i)) - classInfo |= _ISgraph; + unsigned short classInfo = determineFullClassInfo(i); if (classInfo != classInfo_UTF8[i]) { printf("\tPROBLEM: %d = %x (expected %x)\n", i, classInfo, @@ -640,6 +638,232 @@ } +void +test_posix_wctype() +{ + const wchar_t* text = L"Hi there, how do you do? (äÜößáéúíó€'¤¹²$%#@) 12"; + + const unsigned short int wc_POSIX[48] = { + 0x48, 0x69, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, + 0x2c, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x64, 0x6f, + 0x20, 0x79, 0x6f, 0x75, 0x20, 0x64, 0x6f, 0x3f, + 0x20, 0x28, 0xe4, 0xdc, 0xf6, 0xdf, 0xe1, 0xe9, + 0xfa, 0xed, 0xf3, 0x20ac, 0x27, 0xa4, 0xb9, 0xb2, + 0x24, 0x25, 0x23, 0x40, 0x29, 0x20, 0x31, 0x32 + }; + const unsigned short int classInfo_POSIX[48] = { + _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISupper, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISspace|_ISprint|_ISblank, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, + _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower|_ISxdigit, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower|_ISxdigit, + _ISprint|_ISgraph|_ISpunct, _ISspace|_ISprint|_ISblank, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, + _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISspace|_ISprint|_ISblank, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower|_ISxdigit, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, + _ISspace|_ISprint|_ISblank, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, + _ISspace|_ISprint|_ISblank, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower|_ISxdigit, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISpunct, + _ISspace|_ISprint|_ISblank, _ISprint|_ISgraph|_ISpunct, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISupper, + _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, + _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph, + _ISprint|_ISgraph|_ISpunct, _ISprint|_ISgraph, _ISprint|_ISgraph, _ISprint|_ISgraph, + _ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, + _ISpunct|_ISprint|_ISgraph, _ISspace|_ISprint|_ISblank, _ISprint|_ISgraph|_ISalnum|_ISdigit|_ISxdigit, _ISprint|_ISgraph|_ISalnum|_ISdigit|_ISxdigit + }; + + setlocale(LC_CTYPE, "POSIX"); + printf("wctype of POSIX locale\n"); + int problemCount = 0; + + wint_t wc = *text; + for (int i = 0; wc != 0; wc = *++text, ++i) { + unsigned short classInfo = determineWideFullClassInfo(wc); + if (wc != wc_POSIX[i]) { + printf("\tPROBLEM: wc for char #%d = %x (expected %x)\n", i, wc, + wc_POSIX[i]); + problemCount++; + } + + if (classInfo != classInfo_POSIX[i]) { + printf("\tPROBLEM: classinfo for #%d = %x (expected %x)\n", i, + classInfo, classInfo_POSIX[i]); + problemCount++; + } + } + if (problemCount) + printf("\t%d problem(s) found!\n", problemCount); + else + printf("\tall fine\n"); +} + + +void +test_iso8859_1_wctype() +{ + const wchar_t* text = L"Hi there, how do you do? (äÜößáéúíó€'¤¹²$%#@) 12"; + + const unsigned short int wc_ISO8859_1[48] = { + 0x48, 0x69, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, + 0x2c, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x64, 0x6f, + 0x20, 0x79, 0x6f, 0x75, 0x20, 0x64, 0x6f, 0x3f, + 0x20, 0x28, 0xe4, 0xdc, 0xf6, 0xdf, 0xe1, 0xe9, + 0xfa, 0xed, 0xf3, 0x20ac, 0x27, 0xa4, 0xb9, 0xb2, + 0x24, 0x25, 0x23, 0x40, 0x29, 0x20, 0x31, 0x32 + }; + const unsigned short int classInfo_ISO8859_1[48] = { + _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISupper, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISspace|_ISprint|_ISblank, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, + _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower|_ISxdigit, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower|_ISxdigit, + _ISprint|_ISgraph|_ISpunct, _ISspace|_ISprint|_ISblank, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, + _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISspace|_ISprint|_ISblank, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower|_ISxdigit, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, + _ISspace|_ISprint|_ISblank, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, + _ISspace|_ISprint|_ISblank, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower|_ISxdigit, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISpunct, + _ISspace|_ISprint|_ISblank, _ISprint|_ISgraph|_ISpunct, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISupper, + _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, + _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph, + _ISprint|_ISgraph|_ISpunct, _ISprint|_ISgraph, _ISprint|_ISgraph, _ISprint|_ISgraph, + _ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, + _ISpunct|_ISprint|_ISgraph, _ISspace|_ISprint|_ISblank, _ISprint|_ISgraph|_ISalnum|_ISdigit|_ISxdigit, _ISprint|_ISgraph|_ISalnum|_ISdigit|_ISxdigit + }; + + setlocale(LC_CTYPE, "de_DE.ISO8859-1"); + printf("wctype of de_DE.ISO8859-1 locale\n"); + int problemCount = 0; + + wint_t wc = *text; + for (int i = 0; wc != 0; wc = *++text, ++i) { + unsigned short classInfo = determineWideFullClassInfo(wc); + if (wc != wc_ISO8859_1[i]) { + printf("\tPROBLEM: wc for char #%d = %x (expected %x)\n", i, wc, + wc_ISO8859_1[i]); + problemCount++; + } + + if (classInfo != classInfo_ISO8859_1[i]) { + printf("\tPROBLEM: classinfo for #%d = %x (expected %x)\n", i, + classInfo, classInfo_ISO8859_1[i]); + problemCount++; + } + } + if (problemCount) + printf("\t%d problem(s) found!\n", problemCount); + else + printf("\tall fine\n"); +} + + +void +test_iso8859_15_wctype() +{ + const wchar_t* text = L"Hi there, how do you do? (äÜößáéúíó€'¤¹²$%#@) 12"; + + const unsigned short int wc_ISO8859_15[48] = { + 0x48, 0x69, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, + 0x2c, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x64, 0x6f, + 0x20, 0x79, 0x6f, 0x75, 0x20, 0x64, 0x6f, 0x3f, + 0x20, 0x28, 0xe4, 0xdc, 0xf6, 0xdf, 0xe1, 0xe9, + 0xfa, 0xed, 0xf3, 0x20ac, 0x27, 0xa4, 0xb9, 0xb2, + 0x24, 0x25, 0x23, 0x40, 0x29, 0x20, 0x31, 0x32 + }; + const unsigned short int classInfo_ISO8859_15[48] = { + _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISupper, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISspace|_ISprint|_ISblank, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, + _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower|_ISxdigit, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower|_ISxdigit, + _ISprint|_ISgraph|_ISpunct, _ISspace|_ISprint|_ISblank, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, + _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISspace|_ISprint|_ISblank, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower|_ISxdigit, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, + _ISspace|_ISprint|_ISblank, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, + _ISspace|_ISprint|_ISblank, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower|_ISxdigit, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISpunct, + _ISspace|_ISprint|_ISblank, _ISprint|_ISgraph|_ISpunct, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISupper, + _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, + _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph, + _ISprint|_ISgraph|_ISpunct, _ISprint|_ISgraph, _ISprint|_ISgraph, _ISprint|_ISgraph, + _ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, + _ISpunct|_ISprint|_ISgraph, _ISspace|_ISprint|_ISblank, _ISprint|_ISgraph|_ISalnum|_ISdigit|_ISxdigit, _ISprint|_ISgraph|_ISalnum|_ISdigit|_ISxdigit + }; + + setlocale(LC_CTYPE, "de_DE.ISO8859-15"); + printf("wctype of de_DE.ISO8859-15 locale\n"); + int problemCount = 0; + + wint_t wc = *text; + for (int i = 0; wc != 0; wc = *++text, ++i) { + unsigned short classInfo = determineWideFullClassInfo(wc); + if (wc != wc_ISO8859_15[i]) { + printf("\tPROBLEM: wc for char #%d = %x (expected %x)\n", i, wc, + wc_ISO8859_15[i]); + problemCount++; + } + + if (classInfo != classInfo_ISO8859_15[i]) { + printf("\tPROBLEM: classinfo for #%d = %x (expected %x)\n", i, + classInfo, classInfo_ISO8859_15[i]); + problemCount++; + } + } + if (problemCount) + printf("\t%d problem(s) found!\n", problemCount); + else + printf("\tall fine\n"); +} + + +void +test_utf8_wctype() +{ + const wchar_t* text = L"Hi there, how do you do? (äÜößáéúíó€'¤¹²$%#@) 12"; + + const unsigned short int wc_UTF8[48] = { + 0x48, 0x69, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, + 0x2c, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x64, 0x6f, + 0x20, 0x79, 0x6f, 0x75, 0x20, 0x64, 0x6f, 0x3f, + 0x20, 0x28, 0xe4, 0xdc, 0xf6, 0xdf, 0xe1, 0xe9, + 0xfa, 0xed, 0xf3, 0x20ac, 0x27, 0xa4, 0xb9, 0xb2, + 0x24, 0x25, 0x23, 0x40, 0x29, 0x20, 0x31, 0x32 + }; + const unsigned short int classInfo_UTF8[48] = { + _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISupper, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISspace|_ISprint|_ISblank, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, + _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower|_ISxdigit, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower|_ISxdigit, + _ISprint|_ISgraph|_ISpunct, _ISspace|_ISprint|_ISblank, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, + _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISspace|_ISprint|_ISblank, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower|_ISxdigit, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, + _ISspace|_ISprint|_ISblank, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, + _ISspace|_ISprint|_ISblank, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower|_ISxdigit, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISpunct, + _ISspace|_ISprint|_ISblank, _ISprint|_ISgraph|_ISpunct, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISupper, + _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, + _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph|_ISalpha|_ISalnum|_ISlower, _ISprint|_ISgraph, + _ISprint|_ISgraph|_ISpunct, _ISprint|_ISgraph, _ISprint|_ISgraph, _ISprint|_ISgraph, + _ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, + _ISpunct|_ISprint|_ISgraph, _ISspace|_ISprint|_ISblank, _ISprint|_ISgraph|_ISalnum|_ISdigit|_ISxdigit, _ISprint|_ISgraph|_ISalnum|_ISdigit|_ISxdigit + }; + + setlocale(LC_CTYPE, "de_DE.UTF-8"); + printf("wctype of de_DE.UTF-8 locale\n"); + int problemCount = 0; + + wint_t wc = *text; + for (int i = 0; wc != 0; wc = *++text, ++i) { + unsigned short classInfo = determineWideFullClassInfo(wc); + if (wc != wc_UTF8[i]) { + printf("\tPROBLEM: wc for char #%d = %x (expected %x)\n", i, wc, + wc_UTF8[i]); + problemCount++; + } + + if (classInfo != classInfo_UTF8[i]) { + printf("\tPROBLEM: classinfo for #%d = %x (expected %x)\n", i, + classInfo, classInfo_UTF8[i]); + problemCount++; + } + } + if (problemCount) + printf("\t%d problem(s) found!\n", problemCount); + else + printf("\tall fine\n"); +} + + +void +test_wctype() +{ + test_posix_wctype(); + test_iso8859_1_wctype(); + test_iso8859_15_wctype(); + test_utf8_wctype(); +} + + /* * Test several different aspects of the POSIX locale and the functions * influenced by it. @@ -651,6 +875,7 @@ test_localeconv(); test_strftime(); test_ctype(); + test_wctype(); return 0; }