Blame posix/transbug.c

Packit 6c4009
#include <stdio.h>
Packit 6c4009
#include <ctype.h>
Packit 6c4009
#include <errno.h>
Packit 6c4009
#include <locale.h>
Packit 6c4009
#include <regex.h>
Packit 6c4009
#include <stdlib.h>
Packit 6c4009
#include <unistd.h>
Packit 6c4009
#include <string.h>
Packit 6c4009
Packit 6c4009
/* lowercase chars mapped to uppercase */
Packit 6c4009
static const char casetable[] = {
Packit 6c4009
  '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
Packit 6c4009
  '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
Packit 6c4009
  '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
Packit 6c4009
  '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
Packit 6c4009
  /* ' '     '!'     '"'     '#'     '$'     '%'     '&'     ''' */
Packit 6c4009
  '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
Packit 6c4009
  /* '('     ')'     '*'     '+'     ','     '-'     '.'     '/' */
Packit 6c4009
  '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
Packit 6c4009
  /* '0'     '1'     '2'     '3'     '4'     '5'     '6'     '7' */
Packit 6c4009
  '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
Packit 6c4009
  /* '8'     '9'     ':'     ';'     '<'     '='     '>'     '?' */
Packit 6c4009
  '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
Packit 6c4009
  /* '@'     'A'     'B'     'C'     'D'     'E'     'F'     'G' */
Packit 6c4009
  '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
Packit 6c4009
  /* 'H'     'I'     'J'     'K'     'L'     'M'     'N'     'O' */
Packit 6c4009
  '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
Packit 6c4009
  /* 'P'     'Q'     'R'     'S'     'T'     'U'     'V'     'W' */
Packit 6c4009
  '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
Packit 6c4009
  /* 'X'     'Y'     'Z'     '['     '\'     ']'     '^'     '_' */
Packit 6c4009
  '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
Packit 6c4009
  /* '`'     'a'     'b'     'c'     'd'     'e'     'f'     'g' */
Packit 6c4009
  '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
Packit 6c4009
  /* 'h'     'i'     'j'     'k'     'l'     'm'     'n'     'o' */
Packit 6c4009
  '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
Packit 6c4009
  /* 'p'     'q'     'r'     's'     't'     'u'     'v'     'w' */
Packit 6c4009
  '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
Packit 6c4009
  /* 'x'     'y'     'z'     '{'     '|'     '}'     '~' */
Packit 6c4009
  '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
Packit 6c4009
Packit 6c4009
  /* Latin 1: */
Packit 6c4009
  '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
Packit 6c4009
  '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
Packit 6c4009
  '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
Packit 6c4009
  '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
Packit 6c4009
  '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
Packit 6c4009
  '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
Packit 6c4009
  '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
Packit 6c4009
  '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
Packit 6c4009
  '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
Packit 6c4009
  '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
Packit 6c4009
  '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\327',
Packit 6c4009
  '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\337',
Packit 6c4009
  '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
Packit 6c4009
  '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
Packit 6c4009
  '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
Packit 6c4009
  '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',
Packit 6c4009
};
Packit 6c4009
Packit 6c4009
Packit 6c4009
static int
Packit 6c4009
run_test (const char *pattern, struct re_registers *regs)
Packit 6c4009
{
Packit 6c4009
  static char text[] = "1111AAAA2222bbbb";
Packit 6c4009
Packit 6c4009
  struct re_pattern_buffer pat;
Packit 6c4009
Packit 6c4009
  const char *err;
Packit 6c4009
  int res;
Packit 6c4009
  int start2;
Packit 6c4009
Packit 6c4009
  memset (&pat, '\0', sizeof (pat));
Packit 6c4009
  memset (regs, '\0', 2 * sizeof (regs[0]));
Packit 6c4009
  pat.allocated = 0;		/* regex will allocate the buffer */
Packit 6c4009
  pat.fastmap = (char *) malloc (256);
Packit 6c4009
  if (pat.fastmap == NULL)
Packit 6c4009
    {
Packit 6c4009
      puts ("out of memory");
Packit 6c4009
      exit (1);
Packit 6c4009
    }
Packit 6c4009
Packit 6c4009
  pat.translate = (unsigned char *) casetable;
Packit 6c4009
Packit 6c4009
  err = re_compile_pattern (pattern, strlen (pattern), &pat;;
Packit 6c4009
  if (err != NULL)
Packit 6c4009
    {
Packit 6c4009
      fprintf (stderr, "/%s/: %s\n", pattern, err);
Packit 6c4009
      exit (1);
Packit 6c4009
    }
Packit 6c4009
  res = re_search (&pat, text, strlen (text), 0, strlen (text), &regs[0]);
Packit 6c4009
  if (res < 0)
Packit 6c4009
    printf ("search 1: res = %d\n", res);
Packit 6c4009
  else
Packit 6c4009
    printf ("search 1: res = %d, start = %d, end = %d\n",
Packit 6c4009
	    res, regs[0].start[0], regs[0].end[0]);
Packit 6c4009
Packit 6c4009
  if (regs[0].end == NULL)
Packit 6c4009
    start2 = 8;
Packit 6c4009
  else
Packit 6c4009
    start2 = regs[0].end[0] + 1;
Packit 6c4009
  regs[1] = regs[0];
Packit 6c4009
  res = re_search (&pat, text, strlen (text), start2, strlen (text), &regs[1]);
Packit 6c4009
  if (res < 0)
Packit 6c4009
    printf ("search 2: res = %d\n", res);
Packit 6c4009
  else
Packit 6c4009
    printf ("search 2: res = %d, start = %d, end = %d\n",
Packit 6c4009
	    res, regs[1].start[0], regs[1].end[0]);
Packit 6c4009
Packit 6c4009
  return res < 0 ? 1 : 0;
Packit 6c4009
}
Packit 6c4009
Packit 6c4009
Packit 6c4009
static int
Packit 6c4009
do_test (void)
Packit 6c4009
{
Packit 6c4009
  static const char lower[] = "[[:lower:]]+";
Packit 6c4009
  static const char upper[] = "[[:upper:]]+";
Packit 6c4009
  struct re_registers regs[4];
Packit 6c4009
Packit 6c4009
  setlocale (LC_ALL, "C");
Packit 6c4009
Packit 6c4009
  (void) re_set_syntax (RE_SYNTAX_GNU_AWK);
Packit 6c4009
Packit 6c4009
  int result;
Packit 6c4009
#define CHECK(exp) \
Packit 6c4009
  if (exp) { puts (#exp); result = 1; }
Packit 6c4009
Packit 6c4009
  result = run_test (lower, regs);
Packit 6c4009
  result |= run_test (upper, &regs[2]);
Packit 6c4009
  if (! result)
Packit 6c4009
    {
Packit 6c4009
      CHECK (regs[0].start[0] != regs[2].start[0]);
Packit 6c4009
      CHECK (regs[0].end[0] != regs[2].end[0]);
Packit 6c4009
      CHECK (regs[1].start[0] != regs[3].start[0]);
Packit 6c4009
      CHECK (regs[1].end[0] != regs[3].end[0]);
Packit 6c4009
    }
Packit 6c4009
Packit 6c4009
  return result;
Packit 6c4009
}
Packit 6c4009
Packit 6c4009
#define TEST_FUNCTION do_test ()
Packit 6c4009
#include "../test-skeleton.c"