From: Szabolcs Nagy Date: Thu, 22 Jun 2017 23:30:21 +0000 (+0000) Subject: multi-byte functions test X-Git-Url: http://nsz.repo.hu/git/?p=libc-test;a=commitdiff_plain;h=007ed0d41e3c6ff01cef245e9b35d62d2da87a6d multi-byte functions test --- diff --git a/src/functional/clocale_mbfuncs.c b/src/functional/clocale_mbfuncs.c new file mode 100644 index 0000000..2c4935e --- /dev/null +++ b/src/functional/clocale_mbfuncs.c @@ -0,0 +1,82 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include "test.h" + +int main(void) +{ + int i, j; + mbstate_t st, st2; + wchar_t wc, map[257], wtmp[257]; + char s[MB_LEN_MAX*256]; + size_t rv; + int c; + int ni_errors=0; + + setlocale(LC_CTYPE, "C"); + + if (MB_CUR_MAX != 1) t_error("MB_CUR_MAX = %d, expected 1\n", (int)MB_CUR_MAX); + + for (i=0; i<256; i++) { + st = (mbstate_t){0}; + if (mbrtowc(&wc, &(char){i}, 1, &st) != !!i) + t_error("mbrtowc failed to convert byte %.2x to wchar_t\n", i); + if ((map[i]=btowc(i)) == WEOF) { + t_error("btowc failed to convert byte %.2x to wchar_t\n", i); + continue; + } + for (j=0; j 50) + t_error("additional %d non-image errors (not printed)\n", ni_errors); + + map[256] = 0; + st = (mbstate_t){0}; + if ((rv=wcsrtombs(s, &(const wchar_t *){map+1}, sizeof s, &st)) != 255) + t_error("wcsrtombs returned %zd, expected 255\n", rv); + if ((rv=mbsrtowcs(wtmp, &(const char *){s}, 256, &st)) != 255) + t_error("mbsrtowcs returned %zd, expected 255\n", rv); + if (memcmp(map+1, wtmp, 256*sizeof(*map))) + t_error("wcsrtombs/mbsrtowcs round trip failed\n"); + + for (i=128; i<256; i++) { + if (iswalnum(map[i])) t_error("iswalnum returned true for %.4x (%.2x)\n", map[i], i); + if (iswalpha(map[i])) t_error("iswalpha returned true for %.4x (%.2x)\n", map[i], i); + if (iswblank(map[i])) t_error("iswblank returned true for %.4x (%.2x)\n", map[i], i); + if (iswcntrl(map[i])) t_error("iswcntrl returned true for %.4x (%.2x)\n", map[i], i); + if (iswdigit(map[i])) t_error("iswdigit returned true for %.4x (%.2x)\n", map[i], i); + if (iswgraph(map[i])) t_error("iswgraph returned true for %.4x (%.2x)\n", map[i], i); + if (iswlower(map[i])) t_error("iswlower returned true for %.4x (%.2x)\n", map[i], i); + if (iswprint(map[i])) t_error("iswprint returned true for %.4x (%.2x)\n", map[i], i); + if (iswpunct(map[i])) t_error("iswpunct returned true for %.4x (%.2x)\n", map[i], i); + if (iswspace(map[i])) t_error("iswspace returned true for %.4x (%.2x)\n", map[i], i); + if (iswupper(map[i])) t_error("iswupper returned true for %.4x (%.2x)\n", map[i], i); + if (iswxdigit(map[i])) t_error("iswxdigit returned true for %.4x (%.2x)\n", map[i], i); + } + + return t_status; +}