From 1ca5866371acd6b4bdcb1913d18cc14b7a8528c1 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Mon, 16 Jan 2023 14:30:06 +0100 Subject: [PATCH 1/2] mbrtowc, mbrtoc32 tests: Refactor. * tests/test-mbrtowc.c (main): Straighten convoluted code. * tests/test-mbrtoc32.c (main): Likewise. --- ChangeLog | 6 +++++ tests/test-mbrtoc32.c | 54 ++++++++++++++++++++++++++++++------------- tests/test-mbrtowc.c | 54 ++++++++++++++++++++++++++++++------------- 3 files changed, 82 insertions(+), 32 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9bc953423f..045e1c6247 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2023-01-16 Bruno Haible + + mbrtowc, mbrtoc32 tests: Refactor. + * tests/test-mbrtowc.c (main): Straighten convoluted code. + * tests/test-mbrtoc32.c (main): Likewise. + 2023-01-16 Paul Eggert sigpipe tests: Modernize use of 'head'. diff --git a/tests/test-mbrtoc32.c b/tests/test-mbrtoc32.c index c8f735d520..36b520f7b8 100644 --- a/tests/test-mbrtoc32.c +++ b/tests/test-mbrtoc32.c @@ -72,10 +72,6 @@ main (int argc, char *argv[]) for (c = 0; c < 0x100; c++) switch (c) { - default: - if (! (c && 1 < argc && argv[1][0] == '5')) - break; - FALLTHROUGH; case '\t': case '\v': case '\f': case ' ': case '!': case '"': case '#': case '%': case '&': case '\'': case '(': case ')': case '*': @@ -97,25 +93,23 @@ main (int argc, char *argv[]) case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': - /* c is in the ISO C "basic character set", or argv[1] starts - with '5' so we are testing all nonnull bytes. */ + /* c is in the ISO C "basic character set". */ + ASSERT (c < 0x80); + /* c is an ASCII character. */ buf[0] = c; + wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, buf, 1, &state); ASSERT (ret == 1); - if (c < 0x80) - /* c is an ASCII character. */ - ASSERT (wc == c); - else - /* argv[1] starts with '5', that is, we are testing the C or POSIX - locale. - On most platforms, the bytes 0x80..0xFF map to U+0080..U+00FF. - But on musl libc, the bytes 0x80..0xFF map to U+DF80..U+DFFF. */ - ASSERT (wc == (btowc (c) == 0xDF00 + c ? btowc (c) : c)); + ASSERT (wc == c); ASSERT (mbsinit (&state)); + ret = mbrtoc32 (NULL, buf, 1, &state); ASSERT (ret == 1); ASSERT (mbsinit (&state)); + + break; + default: break; } } @@ -368,7 +362,35 @@ main (int argc, char *argv[]) return 0; case '5': - /* C locale; tested above. */ + /* C or POSIX locale. */ + { + int c; + char buf[1]; + + memset (&state, '\0', sizeof (mbstate_t)); + for (c = 0; c < 0x100; c++) + if (c != 0) + { + /* We are testing all nonnull bytes. */ + buf[0] = c; + + wc = (char32_t) 0xBADFACE; + ret = mbrtoc32 (&wc, buf, 1, &state); + ASSERT (ret == 1); + if (c < 0x80) + /* c is an ASCII character. */ + ASSERT (wc == c); + else + /* On most platforms, the bytes 0x80..0xFF map to U+0080..U+00FF. + But on musl libc, the bytes 0x80..0xFF map to U+DF80..U+DFFF. */ + ASSERT (wc == (btowc (c) == 0xDF00 + c ? btowc (c) : c)); + ASSERT (mbsinit (&state)); + + ret = mbrtoc32 (NULL, buf, 1, &state); + ASSERT (ret == 1); + ASSERT (mbsinit (&state)); + } + } return 0; } diff --git a/tests/test-mbrtowc.c b/tests/test-mbrtowc.c index 9019ea0e71..b358d8d583 100644 --- a/tests/test-mbrtowc.c +++ b/tests/test-mbrtowc.c @@ -72,10 +72,6 @@ main (int argc, char *argv[]) for (c = 0; c < 0x100; c++) switch (c) { - default: - if (! (c && 1 < argc && argv[1][0] == '5')) - break; - FALLTHROUGH; case '\t': case '\v': case '\f': case ' ': case '!': case '"': case '#': case '%': case '&': case '\'': case '(': case ')': case '*': @@ -97,25 +93,23 @@ main (int argc, char *argv[]) case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': - /* c is in the ISO C "basic character set", or argv[1] starts - with '5' so we are testing all nonnull bytes. */ + /* c is in the ISO C "basic character set". */ + ASSERT (c < 0x80); + /* c is an ASCII character. */ buf[0] = c; + wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, buf, 1, &state); ASSERT (ret == 1); - if (c < 0x80) - /* c is an ASCII character. */ - ASSERT (wc == c); - else - /* argv[1] starts with '5', that is, we are testing the C or POSIX - locale. - On most platforms, the bytes 0x80..0xFF map to U+0080..U+00FF. - But on musl libc, the bytes 0x80..0xFF map to U+DF80..U+DFFF. */ - ASSERT (wc == (btowc (c) == 0xDF00 + c ? btowc (c) : c)); + ASSERT (wc == c); ASSERT (mbsinit (&state)); + ret = mbrtowc (NULL, buf, 1, &state); ASSERT (ret == 1); ASSERT (mbsinit (&state)); + + break; + default: break; } } @@ -349,7 +343,35 @@ main (int argc, char *argv[]) return 0; case '5': - /* C locale; tested above. */ + /* C or POSIX locale. */ + { + int c; + char buf[1]; + + memset (&state, '\0', sizeof (mbstate_t)); + for (c = 0; c < 0x100; c++) + if (c != 0) + { + /* We are testing all nonnull bytes. */ + buf[0] = c; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, buf, 1, &state); + ASSERT (ret == 1); + if (c < 0x80) + /* c is an ASCII character. */ + ASSERT (wc == c); + else + /* On most platforms, the bytes 0x80..0xFF map to U+0080..U+00FF. + But on musl libc, the bytes 0x80..0xFF map to U+DF80..U+DFFF. */ + ASSERT (wc == (btowc (c) == 0xDF00 + c ? btowc (c) : c)); + ASSERT (mbsinit (&state)); + + ret = mbrtowc (NULL, buf, 1, &state); + ASSERT (ret == 1); + ASSERT (mbsinit (&state)); + } + } return 0; } -- 2.34.1