Blame localedata/tst-ctype.c

Packit 6c4009
/* Copyright (C) 2000-2018 Free Software Foundation, Inc.
Packit 6c4009
   This file is part of the GNU C Library.
Packit 6c4009
   Contributed by Ulrich Drepper <drepper@gnu.org>, 2000.
Packit 6c4009
Packit 6c4009
   The GNU C Library is free software; you can redistribute it and/or
Packit 6c4009
   modify it under the terms of the GNU Lesser General Public
Packit 6c4009
   License as published by the Free Software Foundation; either
Packit 6c4009
   version 2.1 of the License, or (at your option) any later version.
Packit 6c4009
Packit 6c4009
   The GNU C Library is distributed in the hope that it will be useful,
Packit 6c4009
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 6c4009
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 6c4009
   Lesser General Public License for more details.
Packit 6c4009
Packit 6c4009
   You should have received a copy of the GNU Lesser General Public
Packit 6c4009
   License along with the GNU C Library; if not, see
Packit 6c4009
   <http://www.gnu.org/licenses/>.  */
Packit 6c4009
Packit 6c4009
#include <ctype.h>
Packit 6c4009
#include <locale.h>
Packit 6c4009
#include <langinfo.h>
Packit 6c4009
#include <stdio.h>
Packit 6c4009
#include <string.h>
Packit 6c4009
Packit 6c4009
Packit 6c4009
static const char lower[] = "abcdefghijklmnopqrstuvwxyz";
Packit 6c4009
static const char upper[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
Packit 6c4009
static const char digits[] = "0123456789";
Packit 6c4009
static const char cntrl[] = "\
Packit 6c4009
\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\
Packit 6c4009
\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f ";
Packit 6c4009
Packit 6c4009
Packit 6c4009
static struct classes
Packit 6c4009
{
Packit 6c4009
  const char *name;
Packit 6c4009
  int mask;
Packit 6c4009
} classes[] =
Packit 6c4009
{
Packit 6c4009
#define ENTRY(name) { #name, _IS##name }
Packit 6c4009
  ENTRY (upper),
Packit 6c4009
  ENTRY (lower),
Packit 6c4009
  ENTRY (alpha),
Packit 6c4009
  ENTRY (digit),
Packit 6c4009
  ENTRY (xdigit),
Packit 6c4009
  ENTRY (space),
Packit 6c4009
  ENTRY (print),
Packit 6c4009
  ENTRY (graph),
Packit 6c4009
  ENTRY (blank),
Packit 6c4009
  ENTRY (cntrl),
Packit 6c4009
  ENTRY (punct),
Packit 6c4009
  ENTRY (alnum)
Packit 6c4009
};
Packit 6c4009
#define nclasses (sizeof (classes) / sizeof (classes[0]))
Packit 6c4009
Packit 6c4009
Packit 6c4009
#define FAIL(str, args...) \
Packit 6c4009
  {									      \
Packit 6c4009
    printf ("      " str "\n", ##args);					      \
Packit 6c4009
    ++errors;								      \
Packit 6c4009
  }
Packit 6c4009
Packit 6c4009
Packit 6c4009
static int
Packit 6c4009
do_test (void)
Packit 6c4009
{
Packit 6c4009
  const char *cp;
Packit 6c4009
  const char *cp2;
Packit 6c4009
  int errors = 0;
Packit 6c4009
  char *inpline = NULL;
Packit 6c4009
  size_t inplinelen = 0;
Packit 6c4009
  char *resline = NULL;
Packit 6c4009
  size_t reslinelen = 0;
Packit 6c4009
  size_t n;
Packit 6c4009
  const unsigned short int *__ctype_b;
Packit 6c4009
Packit 6c4009
  setlocale (LC_ALL, "");
Packit 6c4009
Packit 6c4009
  printf ("Testing the ctype data of the `%s' locale\n",
Packit 6c4009
	  setlocale (LC_CTYPE, NULL));
Packit 6c4009
Packit 6c4009
  __ctype_b = ((const unsigned short *) nl_langinfo (_NL_CTYPE_CLASS)) + 128;
Packit 6c4009
Packit 6c4009
#if 0
Packit 6c4009
  /* Just for debugging.  */
Packit 6c4009
Packit 6c4009
  /* Contents of the class array.  */
Packit 6c4009
  printf ("\
Packit 6c4009
upper = %04x  lower = %04x  alpha = %04x  digit = %04x  xdigit = %04x\n\
Packit 6c4009
space = %04x  print = %04x  graph = %04x  blank = %04x  cntrl  = %04x\n\
Packit 6c4009
punct = %04x  alnum = %04x\n",
Packit 6c4009
	  _ISupper, _ISlower, _ISalpha, _ISdigit, _ISxdigit,
Packit 6c4009
	  _ISspace, _ISprint, _ISgraph, _ISblank, _IScntrl,
Packit 6c4009
	  _ISpunct, _ISalnum);
Packit 6c4009
Packit 6c4009
  while (n < 256)
Packit 6c4009
    {
Packit 6c4009
      if (n % 8 == 0)
Packit 6c4009
	printf ("%02x: ", n);
Packit 6c4009
      printf ("%04x%s", __ctype_b[n], (n + 1) % 8 == 0 ? "\n" : " ");
Packit 6c4009
      ++n;
Packit 6c4009
    }
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
  puts ("  Test of ASCII character range\n    special NUL byte handling");
Packit 6c4009
  if (isupper ('\0'))
Packit 6c4009
    FAIL ("isupper ('\\0') is true");
Packit 6c4009
  if (islower ('\0'))
Packit 6c4009
    FAIL ("islower ('\\0') is true");
Packit 6c4009
  if (isalpha ('\0'))
Packit 6c4009
    FAIL ("isalpha ('\\0') is true");
Packit 6c4009
  if (isdigit ('\0'))
Packit 6c4009
    FAIL ("isdigit ('\\0') is true");
Packit 6c4009
  if (isxdigit ('\0'))
Packit 6c4009
    FAIL ("isxdigit ('\\0') is true");
Packit 6c4009
  if (isspace ('\0'))
Packit 6c4009
    FAIL ("isspace ('\\0') is true");
Packit 6c4009
  if (isprint ('\0'))
Packit 6c4009
    FAIL ("isprint ('\\0') is true");
Packit 6c4009
  if (isgraph ('\0'))
Packit 6c4009
    FAIL ("isgraph ('\\0') is true");
Packit 6c4009
  if (isblank ('\0'))
Packit 6c4009
    FAIL ("isblank ('\\0') is true");
Packit 6c4009
  if (! iscntrl ('\0'))
Packit 6c4009
    FAIL ("iscntrl ('\\0') not true");
Packit 6c4009
  if (ispunct ('\0'))
Packit 6c4009
    FAIL ("ispunct ('\\0') is true");
Packit 6c4009
  if (isalnum ('\0'))
Packit 6c4009
    FAIL ("isalnum ('\\0') is true");
Packit 6c4009
Packit 6c4009
  puts ("    islower()");
Packit 6c4009
  for (cp = lower; *cp != '\0'; ++cp)
Packit 6c4009
    if (! islower (*cp))
Packit 6c4009
      FAIL ("islower ('%c') not true", *cp);
Packit 6c4009
  for (cp = upper; *cp != '\0'; ++cp)
Packit 6c4009
    if (islower (*cp))
Packit 6c4009
      FAIL ("islower ('%c') is true", *cp);
Packit 6c4009
  for (cp = digits; *cp != '\0'; ++cp)
Packit 6c4009
    if (islower (*cp))
Packit 6c4009
      FAIL ("islower ('%c') is true", *cp);
Packit 6c4009
  for (cp = cntrl; *cp != '\0'; ++cp)
Packit 6c4009
    if (islower (*cp))
Packit 6c4009
      FAIL ("islower ('\\x%02x') is true", *cp);
Packit 6c4009
Packit 6c4009
  puts ("    isupper()");
Packit 6c4009
  for (cp = lower; *cp != '\0'; ++cp)
Packit 6c4009
    if (isupper (*cp))
Packit 6c4009
      FAIL ("isupper ('%c') is true", *cp);
Packit 6c4009
  for (cp = upper; *cp != '\0'; ++cp)
Packit 6c4009
    if (! isupper (*cp))
Packit 6c4009
      FAIL ("isupper ('%c') not true", *cp);
Packit 6c4009
  for (cp = digits; *cp != '\0'; ++cp)
Packit 6c4009
    if (isupper (*cp))
Packit 6c4009
      FAIL ("isupper ('%c') is true", *cp);
Packit 6c4009
  for (cp = cntrl; *cp != '\0'; ++cp)
Packit 6c4009
    if (isupper (*cp))
Packit 6c4009
      FAIL ("isupper ('\\x%02x') is true", *cp);
Packit 6c4009
Packit 6c4009
  puts ("    isalpha()");
Packit 6c4009
  for (cp = lower; *cp != '\0'; ++cp)
Packit 6c4009
    if (! isalpha (*cp))
Packit 6c4009
      FAIL ("isalpha ('%c') not true", *cp);
Packit 6c4009
  for (cp = upper; *cp != '\0'; ++cp)
Packit 6c4009
    if (! isalpha (*cp))
Packit 6c4009
      FAIL ("isalpha ('%c') not true", *cp);
Packit 6c4009
  for (cp = digits; *cp != '\0'; ++cp)
Packit 6c4009
    if (isalpha (*cp))
Packit 6c4009
      FAIL ("isalpha ('%c') is true", *cp);
Packit 6c4009
  for (cp = cntrl; *cp != '\0'; ++cp)
Packit 6c4009
    if (isalpha (*cp))
Packit 6c4009
      FAIL ("isalpha ('\\x%02x') is true", *cp);
Packit 6c4009
Packit 6c4009
  puts ("    isdigit()");
Packit 6c4009
  for (cp = lower; *cp != '\0'; ++cp)
Packit 6c4009
    if (isdigit (*cp))
Packit 6c4009
      FAIL ("isdigit ('%c') is true", *cp);
Packit 6c4009
  for (cp = upper; *cp != '\0'; ++cp)
Packit 6c4009
    if (isdigit (*cp))
Packit 6c4009
      FAIL ("isdigit ('%c') is true", *cp);
Packit 6c4009
  for (cp = digits; *cp != '\0'; ++cp)
Packit 6c4009
    if (! isdigit (*cp))
Packit 6c4009
      FAIL ("isdigit ('%c') not true", *cp);
Packit 6c4009
  for (cp = cntrl; *cp != '\0'; ++cp)
Packit 6c4009
    if (isdigit (*cp))
Packit 6c4009
      FAIL ("isdigit ('\\x%02x') is true", *cp);
Packit 6c4009
Packit 6c4009
  puts ("    isxdigit()");
Packit 6c4009
  for (cp = lower; *cp != '\0'; ++cp)
Packit 6c4009
    if ((! isxdigit (*cp) && cp - lower < 6)
Packit 6c4009
	|| (isxdigit (*cp) && cp - lower >= 6))
Packit 6c4009
      FAIL ("isxdigit ('%c') %s true", *cp, cp - upper < 6 ? "not" : "is");
Packit 6c4009
  for (cp = upper; *cp != '\0'; ++cp)
Packit 6c4009
    if ((! isxdigit (*cp) && cp - upper < 6)
Packit 6c4009
	|| (isxdigit (*cp) && cp - upper >= 6))
Packit 6c4009
      FAIL ("isxdigit ('%c') %s true", *cp, cp - upper < 6 ? "not" : "is");
Packit 6c4009
  for (cp = digits; *cp != '\0'; ++cp)
Packit 6c4009
    if (! isxdigit (*cp))
Packit 6c4009
      FAIL ("isxdigit ('%c') not true", *cp);
Packit 6c4009
  for (cp = cntrl; *cp != '\0'; ++cp)
Packit 6c4009
    if (isxdigit (*cp))
Packit 6c4009
      FAIL ("isxdigit ('\\x%02x') is true", *cp);
Packit 6c4009
Packit 6c4009
  puts ("    isspace()");
Packit 6c4009
  for (cp = lower; *cp != '\0'; ++cp)
Packit 6c4009
    if (isspace (*cp))
Packit 6c4009
      FAIL ("isspace ('%c') is true", *cp);
Packit 6c4009
  for (cp = upper; *cp != '\0'; ++cp)
Packit 6c4009
    if (isspace (*cp))
Packit 6c4009
      FAIL ("isspace ('%c') is true", *cp);
Packit 6c4009
  for (cp = digits; *cp != '\0'; ++cp)
Packit 6c4009
    if (isspace (*cp))
Packit 6c4009
      FAIL ("isspace ('%c') is true", *cp);
Packit 6c4009
  for (cp = cntrl; *cp != '\0'; ++cp)
Packit 6c4009
    if ((isspace (*cp) && ((*cp < '\x09' || *cp > '\x0d') && *cp != ' '))
Packit 6c4009
	|| (! isspace (*cp)
Packit 6c4009
	    && ((*cp >= '\x09' && *cp <= '\x0d') || *cp == ' ')))
Packit 6c4009
      FAIL ("isspace ('\\x%02x') %s true", *cp,
Packit 6c4009
	    (*cp < '\x09' || *cp > '\x0d') ? "is" : "not");
Packit 6c4009
Packit 6c4009
  puts ("    isprint()");
Packit 6c4009
  for (cp = lower; *cp != '\0'; ++cp)
Packit 6c4009
    if (! isprint (*cp))
Packit 6c4009
      FAIL ("isprint ('%c') not true", *cp);
Packit 6c4009
  for (cp = upper; *cp != '\0'; ++cp)
Packit 6c4009
    if (! isprint (*cp))
Packit 6c4009
      FAIL ("isprint ('%c') not true", *cp);
Packit 6c4009
  for (cp = digits; *cp != '\0'; ++cp)
Packit 6c4009
    if (! isprint (*cp))
Packit 6c4009
      FAIL ("isprint ('%c') not true", *cp);
Packit 6c4009
  for (cp = cntrl; *cp != '\0'; ++cp)
Packit 6c4009
    if ((isprint (*cp) && *cp != ' ')
Packit 6c4009
	|| (! isprint (*cp) && *cp == ' '))
Packit 6c4009
      FAIL ("isprint ('\\x%02x') is true", *cp);
Packit 6c4009
Packit 6c4009
  puts ("    isgraph()");
Packit 6c4009
  for (cp = lower; *cp != '\0'; ++cp)
Packit 6c4009
    if (! isgraph (*cp))
Packit 6c4009
      FAIL ("isgraph ('%c') not true", *cp);
Packit 6c4009
  for (cp = upper; *cp != '\0'; ++cp)
Packit 6c4009
    if (! isgraph (*cp))
Packit 6c4009
      FAIL ("isgraph ('%c') not true", *cp);
Packit 6c4009
  for (cp = digits; *cp != '\0'; ++cp)
Packit 6c4009
    if (! isgraph (*cp))
Packit 6c4009
      FAIL ("isgraph ('%c') not true", *cp);
Packit 6c4009
  for (cp = cntrl; *cp != '\0'; ++cp)
Packit 6c4009
    if (isgraph (*cp))
Packit 6c4009
      FAIL ("isgraph ('\\x%02x') is true", *cp);
Packit 6c4009
Packit 6c4009
  puts ("    isblank()");
Packit 6c4009
  for (cp = lower; *cp != '\0'; ++cp)
Packit 6c4009
    if (isblank (*cp))
Packit 6c4009
      FAIL ("isblank ('%c') is true", *cp);
Packit 6c4009
  for (cp = upper; *cp != '\0'; ++cp)
Packit 6c4009
    if (isblank (*cp))
Packit 6c4009
      FAIL ("isblank ('%c') is true", *cp);
Packit 6c4009
  for (cp = digits; *cp != '\0'; ++cp)
Packit 6c4009
    if (isblank (*cp))
Packit 6c4009
      FAIL ("isblank ('%c') is true", *cp);
Packit 6c4009
  for (cp = cntrl; *cp != '\0'; ++cp)
Packit 6c4009
    if ((isblank (*cp) && *cp != '\x09' && *cp != ' ')
Packit 6c4009
	|| (! isblank (*cp) && (*cp == '\x09' || *cp == ' ')))
Packit 6c4009
      FAIL ("isblank ('\\x%02x') %s true", *cp, *cp != '\x09' ? "is" : "not");
Packit 6c4009
Packit 6c4009
  puts ("    iscntrl()");
Packit 6c4009
  for (cp = lower; *cp != '\0'; ++cp)
Packit 6c4009
    if (iscntrl (*cp))
Packit 6c4009
      FAIL ("iscntrl ('%c') is true", *cp);
Packit 6c4009
  for (cp = upper; *cp != '\0'; ++cp)
Packit 6c4009
    if (iscntrl (*cp))
Packit 6c4009
      FAIL ("iscntrl ('%c') is true", *cp);
Packit 6c4009
  for (cp = digits; *cp != '\0'; ++cp)
Packit 6c4009
    if (iscntrl (*cp))
Packit 6c4009
      FAIL ("iscntrl ('%c') is true", *cp);
Packit 6c4009
  for (cp = cntrl; *cp != '\0'; ++cp)
Packit 6c4009
    if ((iscntrl (*cp) && *cp == ' ')
Packit 6c4009
	|| (! iscntrl (*cp) && *cp != ' '))
Packit 6c4009
      FAIL ("iscntrl ('\\x%02x') not true", *cp);
Packit 6c4009
Packit 6c4009
  puts ("    ispunct()");
Packit 6c4009
  for (cp = lower; *cp != '\0'; ++cp)
Packit 6c4009
    if (ispunct (*cp))
Packit 6c4009
      FAIL ("ispunct ('%c') is true", *cp);
Packit 6c4009
  for (cp = upper; *cp != '\0'; ++cp)
Packit 6c4009
    if (ispunct (*cp))
Packit 6c4009
      FAIL ("ispunct ('%c') is true", *cp);
Packit 6c4009
  for (cp = digits; *cp != '\0'; ++cp)
Packit 6c4009
    if (ispunct (*cp))
Packit 6c4009
      FAIL ("ispunct ('%c') is true", *cp);
Packit 6c4009
  for (cp = cntrl; *cp != '\0'; ++cp)
Packit 6c4009
    if (ispunct (*cp))
Packit 6c4009
      FAIL ("ispunct ('\\x%02x') is true", *cp);
Packit 6c4009
Packit 6c4009
  puts ("    isalnum()");
Packit 6c4009
  for (cp = lower; *cp != '\0'; ++cp)
Packit 6c4009
    if (! isalnum (*cp))
Packit 6c4009
      FAIL ("isalnum ('%c') not true", *cp);
Packit 6c4009
  for (cp = upper; *cp != '\0'; ++cp)
Packit 6c4009
    if (! isalnum (*cp))
Packit 6c4009
      FAIL ("isalnum ('%c') not true", *cp);
Packit 6c4009
  for (cp = digits; *cp != '\0'; ++cp)
Packit 6c4009
    if (! isalnum (*cp))
Packit 6c4009
      FAIL ("isalnum ('%c') not true", *cp);
Packit 6c4009
  for (cp = cntrl; *cp != '\0'; ++cp)
Packit 6c4009
    if (isalnum (*cp))
Packit 6c4009
      FAIL ("isalnum ('\\x%02x') is true", *cp);
Packit 6c4009
Packit 6c4009
Packit 6c4009
  puts ("    tolower()");
Packit 6c4009
  for (cp = lower; *cp != '\0'; ++cp)
Packit 6c4009
    if (tolower (*cp) != *cp)
Packit 6c4009
      FAIL ("tolower ('%c') != '%c'", *cp, *cp);
Packit 6c4009
  for (cp = upper, cp2 = lower; *cp != '\0'; ++cp, ++cp2)
Packit 6c4009
    if (tolower (*cp) != *cp2)
Packit 6c4009
      FAIL ("tolower ('%c') != '%c'", *cp, *cp2);
Packit 6c4009
  for (cp = digits; *cp != '\0'; ++cp)
Packit 6c4009
    if (tolower (*cp) != *cp)
Packit 6c4009
      FAIL ("tolower ('%c') != '%c'", *cp, *cp);
Packit 6c4009
  for (cp = cntrl; *cp != '\0'; ++cp)
Packit 6c4009
    if (tolower (*cp) != *cp)
Packit 6c4009
      FAIL ("tolower ('\\x%02x') != '\\x%02x'", *cp, *cp);
Packit 6c4009
Packit 6c4009
  puts ("    toupper()");
Packit 6c4009
  for (cp = lower, cp2 = upper; *cp != '\0'; ++cp, ++cp2)
Packit 6c4009
    if (toupper (*cp) != *cp2)
Packit 6c4009
      FAIL ("toupper ('%c') != '%c'", *cp, *cp2);
Packit 6c4009
  for (cp = upper; *cp != '\0'; ++cp)
Packit 6c4009
    if (toupper (*cp) != *cp)
Packit 6c4009
      FAIL ("toupper ('%c') != '%c'", *cp, *cp);
Packit 6c4009
  for (cp = digits; *cp != '\0'; ++cp)
Packit 6c4009
    if (toupper (*cp) != *cp)
Packit 6c4009
      FAIL ("toupper ('%c') != '%c'", *cp, *cp);
Packit 6c4009
  for (cp = cntrl; *cp != '\0'; ++cp)
Packit 6c4009
    if (toupper (*cp) != *cp)
Packit 6c4009
      FAIL ("toupper ('\\x%02x') != '\\x%02x'", *cp, *cp);
Packit 6c4009
Packit 6c4009
Packit 6c4009
  /* Now some locale specific tests.  */
Packit 6c4009
  while (! feof (stdin))
Packit 6c4009
    {
Packit 6c4009
      unsigned char *inp;
Packit 6c4009
      unsigned char *resp;
Packit 6c4009
Packit 6c4009
      if (getline (&inpline, &inplinelen, stdin) <= 0
Packit 6c4009
	  || getline (&resline, &reslinelen, stdin) <= 0)
Packit 6c4009
	break;
Packit 6c4009
Packit 6c4009
      inp = (unsigned char *) strchr (inpline, '\n');
Packit 6c4009
      if (inp != NULL)
Packit 6c4009
	*inp = '\0';
Packit 6c4009
      resp = (unsigned char *) strchr (resline, '\n');
Packit 6c4009
      if (resp != NULL)
Packit 6c4009
	*resp = '\0';
Packit 6c4009
Packit 6c4009
      inp = (unsigned char *) inpline;
Packit 6c4009
      while (*inp != ' ' && *inp != '\t' && *inp && *inp != '\n'
Packit 6c4009
	     && *inp != '\0')
Packit 6c4009
	++inp;
Packit 6c4009
Packit 6c4009
      if (*inp == '\0')
Packit 6c4009
	{
Packit 6c4009
	  printf ("line \"%s\" is without content\n", inpline);
Packit 6c4009
	  continue;
Packit 6c4009
	}
Packit 6c4009
      *inp++ = '\0';
Packit 6c4009
      while (*inp == ' ' || *inp == '\t')
Packit 6c4009
	++inp;
Packit 6c4009
Packit 6c4009
      /* Try all classes.  */
Packit 6c4009
      for (n = 0; n < nclasses; ++n)
Packit 6c4009
	if (strcmp (inpline, classes[n].name) == 0)
Packit 6c4009
	  break;
Packit 6c4009
Packit 6c4009
      resp = (unsigned char *) resline;
Packit 6c4009
      while (*resp == ' ' || *resp == '\t')
Packit 6c4009
	++resp;
Packit 6c4009
Packit 6c4009
      if (strlen ((char *) inp) != strlen ((char *) resp))
Packit 6c4009
	{
Packit 6c4009
	  printf ("lines \"%.20s\"... and \"%.20s\" have not the same length\n",
Packit 6c4009
		  inp, resp);
Packit 6c4009
	  continue;
Packit 6c4009
	}
Packit 6c4009
Packit 6c4009
      if (n < nclasses)
Packit 6c4009
	{
Packit 6c4009
	  if (strspn ((char *) resp, "01") != strlen ((char *) resp))
Packit 6c4009
	    {
Packit 6c4009
	      printf ("result string \"%s\" malformed\n", resp);
Packit 6c4009
	      continue;
Packit 6c4009
	    }
Packit 6c4009
Packit 6c4009
	  printf ("  Locale-specific tests for `%s'\n", inpline);
Packit 6c4009
Packit 6c4009
	  while (*inp != '\0' && *inp != '\n')
Packit 6c4009
	    {
Packit 6c4009
	      if (((__ctype_b[(unsigned int) *inp] & classes[n].mask) != 0)
Packit 6c4009
		  != (*resp != '0'))
Packit 6c4009
		{
Packit 6c4009
		  printf ("    is%s('%c' = '\\x%02x') %s true\n", inpline,
Packit 6c4009
			  *inp, *inp, *resp == '1' ? "not" : "is");
Packit 6c4009
		  ++errors;
Packit 6c4009
		}
Packit 6c4009
	      ++inp;
Packit 6c4009
	      ++resp;
Packit 6c4009
	    }
Packit 6c4009
	}
Packit 6c4009
      else if (strcmp (inpline, "tolower") == 0)
Packit 6c4009
	{
Packit 6c4009
	  while (*inp != '\0')
Packit 6c4009
	    {
Packit 6c4009
	      if (tolower (*inp) != *resp)
Packit 6c4009
		{
Packit 6c4009
		  printf ("    tolower('%c' = '\\x%02x') != '%c'\n",
Packit 6c4009
			  *inp, *inp, *resp);
Packit 6c4009
		  ++errors;
Packit 6c4009
		}
Packit 6c4009
	      ++inp;
Packit 6c4009
	      ++resp;
Packit 6c4009
	    }
Packit 6c4009
	}
Packit 6c4009
      else if (strcmp (inpline, "toupper") == 0)
Packit 6c4009
	{
Packit 6c4009
	  while (*inp != '\0')
Packit 6c4009
	    {
Packit 6c4009
	      if (toupper (*inp) != *resp)
Packit 6c4009
		{
Packit 6c4009
		  printf ("    toupper('%c' = '\\x%02x') != '%c'\n",
Packit 6c4009
			  *inp, *inp, *resp);
Packit 6c4009
		  ++errors;
Packit 6c4009
		}
Packit 6c4009
	      ++inp;
Packit 6c4009
	      ++resp;
Packit 6c4009
	    }
Packit 6c4009
	}
Packit 6c4009
      else
Packit 6c4009
	printf ("\"%s\": unknown class or map\n", inpline);
Packit 6c4009
    }
Packit 6c4009
Packit 6c4009
Packit 6c4009
  if (errors != 0)
Packit 6c4009
    {
Packit 6c4009
      printf ("  %d error%s for `%s' locale\n\n\n", errors,
Packit 6c4009
	      errors == 1 ? "" : "s", setlocale (LC_ALL, NULL));
Packit 6c4009
      return 1;
Packit 6c4009
    }
Packit 6c4009
Packit 6c4009
  printf ("  No errors for `%s' locale\n\n\n", setlocale (LC_ALL, NULL));
Packit 6c4009
  return 0;
Packit 6c4009
}
Packit 6c4009
Packit 6c4009
#define TEST_FUNCTION do_test ()
Packit 6c4009
#include "../test-skeleton.c"