(root)/
glibc-2.38/
ctype/
test_ctype.c
       1  /* Copyright (C) 1991-2023 Free Software Foundation, Inc.
       2     This file is part of the GNU C Library.
       3  
       4     The GNU C Library is free software; you can redistribute it and/or
       5     modify it under the terms of the GNU Lesser General Public
       6     License as published by the Free Software Foundation; either
       7     version 2.1 of the License, or (at your option) any later version.
       8  
       9     The GNU C Library is distributed in the hope that it will be useful,
      10     but WITHOUT ANY WARRANTY; without even the implied warranty of
      11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      12     Lesser General Public License for more details.
      13  
      14     You should have received a copy of the GNU Lesser General Public
      15     License along with the GNU C Library; if not, see
      16     <https://www.gnu.org/licenses/>.  */
      17  
      18  #include <limits.h>
      19  #include <ctype.h>
      20  #include <stdio.h>
      21  #include <stdlib.h>
      22  
      23  #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
      24  #define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
      25  #define XOR(e,f) (((e) && !(f)) || (!(e) && (f)))
      26  
      27  #ifdef	__GNUC__
      28  __inline
      29  #endif
      30  static void
      31  print_char (unsigned char c)
      32  {
      33    printf("%d/", (int) c);
      34    if (isgraph(c))
      35      printf("'%c'", c);
      36    else
      37      printf("'\\%.3o'", c);
      38  }
      39  
      40  int
      41  main (int argc, char **argv)
      42  {
      43    unsigned short int c;
      44    int lose = 0;
      45  
      46  #define TRYEM do {							      \
      47        TRY (isascii);							      \
      48        TRY (isalnum);							      \
      49        TRY (isalpha);							      \
      50        TRY (iscntrl);							      \
      51        TRY (isdigit);							      \
      52        TRY (isgraph);							      \
      53        TRY (islower);							      \
      54        TRY (isprint);							      \
      55        TRY (ispunct);							      \
      56        TRY (isspace);							      \
      57        TRY (isupper);							      \
      58        TRY (isxdigit);							      \
      59        TRY (isblank);							      \
      60      } while (0)
      61  
      62    for (c = 0; c <= UCHAR_MAX; ++c)
      63      {
      64        print_char (c);
      65  
      66        if (XOR (islower (c), ISLOWER (c)) || toupper (c) != TOUPPER (c))
      67  	{
      68  	  fputs (" BOGUS", stdout);
      69  	  ++lose;
      70  	}
      71  
      72  #define TRY(isfoo) if (isfoo (c)) fputs (" " #isfoo, stdout)
      73        TRYEM;
      74  #undef TRY
      75  
      76        fputs("; lower = ", stdout);
      77        print_char(tolower(c));
      78        fputs("; upper = ", stdout);
      79        print_char(toupper(c));
      80        putchar('\n');
      81      }
      82  
      83    fputs ("EOF", stdout);
      84    if (tolower (EOF) != EOF)
      85      {
      86        ++lose;
      87        printf (" tolower BOGUS %d;", tolower (EOF));
      88      }
      89    if (toupper (EOF) != EOF)
      90      {
      91        ++lose;
      92        printf (" toupper BOGUS %d;", toupper (EOF));
      93      }
      94  
      95  #define TRY(isfoo) if (isfoo (EOF)) fputs (" " #isfoo, stdout), ++lose
      96    TRYEM;
      97  #undef TRY
      98  
      99    return lose ? EXIT_FAILURE : EXIT_SUCCESS;
     100  }