>From 54237dcc0ce907673513e4812a1bb270d54737fb Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 23 Sep 2015 12:26:38 -0700 Subject: [PATCH] Test that c_iscntrl agrees with iscntrl, etc. Suggested by Daniel Richard G. in: http://lists.gnu.org/archive/html/bug-gnulib/2015-09/msg00034.html * modules/c-ctype-tests (Depends-on): Add ctype. * tests/test-c-ctype.c: Include . (NCHARS): New constant. (test_agree_with_C_locale): New function. (main): Use it. (test_all): Use named constants. --- ChangeLog | 10 ++++++++ modules/c-ctype-tests | 2 +- tests/test-c-ctype.c | 65 ++++++++++++++++++++++++++++++++++++++------------- 3 files changed, 60 insertions(+), 17 deletions(-) diff --git a/ChangeLog b/ChangeLog index 493c915..7eca2c4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,15 @@ 2015-09-23 Paul Eggert + Test that c_iscntrl agrees with iscntrl, etc. + Suggested by Daniel Richard G. in: + http://lists.gnu.org/archive/html/bug-gnulib/2015-09/msg00034.html + * modules/c-ctype-tests (Depends-on): Add ctype. + * tests/test-c-ctype.c: Include . + (NCHARS): New constant. + (test_agree_with_C_locale): New function. + (main): Use it. + (test_all): Use named constants. + c-ctype: improve c_isascii testing * tests/test-c-ctype.c (test_all): Port c_isascii test to EBCDIC. Add a test to count the number of ASCII characters. diff --git a/modules/c-ctype-tests b/modules/c-ctype-tests index 196f529..cb65ee3 100644 --- a/modules/c-ctype-tests +++ b/modules/c-ctype-tests @@ -3,10 +3,10 @@ tests/test-c-ctype.c tests/macros.h Depends-on: +ctype configure.ac: Makefile.am: TESTS += test-c-ctype check_PROGRAMS += test-c-ctype - diff --git a/tests/test-c-ctype.c b/tests/test-c-ctype.c index 80eb69d..481cbbb 100644 --- a/tests/test-c-ctype.c +++ b/tests/test-c-ctype.c @@ -20,11 +20,14 @@ #include "c-ctype.h" +#include #include #include #include "macros.h" +enum { NCHARS = UCHAR_MAX + 1 }; + static char to_char (int c) { @@ -34,30 +37,58 @@ to_char (int c) } static void +test_agree_with_C_locale (void) +{ + int c; + + for (c = 0; c <= UCHAR_MAX; c++) + { + ASSERT (c_isascii (c) == (isascii (c) != 0)); + if (c_isascii (c)) + { + ASSERT (c_isalnum (c) == (isalnum (c) != 0)); + ASSERT (c_isalpha (c) == (isalpha (c) != 0)); + ASSERT (c_isblank (c) == (isblank (c) != 0)); + ASSERT (c_iscntrl (c) == (iscntrl (c) != 0)); + ASSERT (c_isdigit (c) == (isdigit (c) != 0)); + ASSERT (c_islower (c) == (islower (c) != 0)); + ASSERT (c_isgraph (c) == (isgraph (c) != 0)); + ASSERT (c_isprint (c) == (isprint (c) != 0)); + ASSERT (c_ispunct (c) == (ispunct (c) != 0)); + ASSERT (c_isspace (c) == (isspace (c) != 0)); + ASSERT (c_isupper (c) == (isupper (c) != 0)); + ASSERT (c_isxdigit (c) == (isxdigit (c) != 0)); + ASSERT (c_tolower (c) == tolower (c)); + ASSERT (c_toupper (c) == toupper (c)); + } + } +} + +static void test_all (void) { int c; int n_isascii = 0; - for (c = -0x80; c < 0x100; c++) + for (c = SCHAR_MIN; c <= UCHAR_MAX; c++) { if (c < 0) { - ASSERT (c_isascii (c) == c_isascii (c + 0x100)); - ASSERT (c_isalnum (c) == c_isalnum (c + 0x100)); - ASSERT (c_isalpha (c) == c_isalpha (c + 0x100)); - ASSERT (c_isblank (c) == c_isblank (c + 0x100)); - ASSERT (c_iscntrl (c) == c_iscntrl (c + 0x100)); - ASSERT (c_isdigit (c) == c_isdigit (c + 0x100)); - ASSERT (c_islower (c) == c_islower (c + 0x100)); - ASSERT (c_isgraph (c) == c_isgraph (c + 0x100)); - ASSERT (c_isprint (c) == c_isprint (c + 0x100)); - ASSERT (c_ispunct (c) == c_ispunct (c + 0x100)); - ASSERT (c_isspace (c) == c_isspace (c + 0x100)); - ASSERT (c_isupper (c) == c_isupper (c + 0x100)); - ASSERT (c_isxdigit (c) == c_isxdigit (c + 0x100)); - ASSERT (to_char (c_tolower (c)) == to_char (c_tolower (c + 0x100))); - ASSERT (to_char (c_toupper (c)) == to_char (c_toupper (c + 0x100))); + ASSERT (c_isascii (c) == c_isascii (c + NCHARS)); + ASSERT (c_isalnum (c) == c_isalnum (c + NCHARS)); + ASSERT (c_isalpha (c) == c_isalpha (c + NCHARS)); + ASSERT (c_isblank (c) == c_isblank (c + NCHARS)); + ASSERT (c_iscntrl (c) == c_iscntrl (c + NCHARS)); + ASSERT (c_isdigit (c) == c_isdigit (c + NCHARS)); + ASSERT (c_islower (c) == c_islower (c + NCHARS)); + ASSERT (c_isgraph (c) == c_isgraph (c + NCHARS)); + ASSERT (c_isprint (c) == c_isprint (c + NCHARS)); + ASSERT (c_ispunct (c) == c_ispunct (c + NCHARS)); + ASSERT (c_isspace (c) == c_isspace (c + NCHARS)); + ASSERT (c_isupper (c) == c_isupper (c + NCHARS)); + ASSERT (c_isxdigit (c) == c_isxdigit (c + NCHARS)); + ASSERT (to_char (c_tolower (c)) == to_char (c_tolower (c + NCHARS))); + ASSERT (to_char (c_toupper (c)) == to_char (c_toupper (c + NCHARS))); } if (0 <= c) @@ -394,6 +425,8 @@ test_all (void) int main () { + test_agree_with_C_locale (); + test_all (); setlocale (LC_ALL, "de_DE"); -- 2.1.0