Blame posix/runtests.c

Packit Service 82fcde
/***********************************************************
Packit Service 82fcde
Packit Service 82fcde
Copyright 1995 by Tom Lord
Packit Service 82fcde
Packit Service 82fcde
                        All Rights Reserved
Packit Service 82fcde
Packit Service 82fcde
Permission to use, copy, modify, and distribute this software and its
Packit Service 82fcde
documentation for any purpose and without fee is hereby granted,
Packit Service 82fcde
provided that the above copyright notice appear in all copies and that
Packit Service 82fcde
both that copyright notice and this permission notice appear in
Packit Service 82fcde
supporting documentation, and that the name of the copyright holder not be
Packit Service 82fcde
used in advertising or publicity pertaining to distribution of the
Packit Service 82fcde
software without specific, written prior permission.
Packit Service 82fcde
Packit Service 82fcde
Tom Lord DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
Packit Service 82fcde
INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
Packit Service 82fcde
EVENT SHALL TOM LORD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
Packit Service 82fcde
CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
Packit Service 82fcde
USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
Packit Service 82fcde
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
Packit Service 82fcde
PERFORMANCE OF THIS SOFTWARE.
Packit Service 82fcde
Packit Service 82fcde
******************************************************************/
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde

Packit Service 82fcde
#include <sys/types.h>
Packit Service 82fcde
#include <regex.h>
Packit Service 82fcde
#include <stdio.h>
Packit Service 82fcde
#include <stdlib.h>
Packit Service 82fcde
#include <string.h>
Packit Service 82fcde
Packit Service 82fcde

Packit Service 82fcde
Packit Service 82fcde
struct a_test
Packit Service 82fcde
{
Packit Service 82fcde
  int expected;
Packit Service 82fcde
  const char * pattern;
Packit Service 82fcde
  const char * data;
Packit Service 82fcde
};
Packit Service 82fcde
Packit Service 82fcde
static const struct a_test the_tests[] =
Packit Service 82fcde
{
Packit Service 82fcde
#include "testcases.h"
Packit Service 82fcde
  {-1, 0, 0}
Packit Service 82fcde
};
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde

Packit Service 82fcde
Packit Service 82fcde
static int
Packit Service 82fcde
run_a_test (int id, const struct a_test * t)
Packit Service 82fcde
{
Packit Service 82fcde
  static const char * last_pattern = 0;
Packit Service 82fcde
  static regex_t r;
Packit Service 82fcde
  int err;
Packit Service 82fcde
  char errmsg[100];
Packit Service 82fcde
  int x;
Packit Service 82fcde
  regmatch_t regs[10];
Packit Service 82fcde
Packit Service 82fcde
  if (!last_pattern || strcmp (last_pattern, t->pattern))
Packit Service 82fcde
    {
Packit Service 82fcde
      if (last_pattern)
Packit Service 82fcde
	regfree (&r);
Packit Service 82fcde
      last_pattern = t->pattern;
Packit Service 82fcde
      err = regcomp (&r, t->pattern, REG_EXTENDED);
Packit Service 82fcde
      if (err)
Packit Service 82fcde
	{
Packit Service 82fcde
	  if (t->expected == 2)
Packit Service 82fcde
	    {
Packit Service 82fcde
	      puts (" OK.");
Packit Service 82fcde
	      return 0;
Packit Service 82fcde
	    }
Packit Service 82fcde
	  if (last_pattern)
Packit Service 82fcde
	    regfree (&r);
Packit Service 82fcde
	  last_pattern = NULL;
Packit Service 82fcde
	  regerror (err, &r, errmsg, 100);
Packit Service 82fcde
	  printf (" FAIL: %s.\n", errmsg);
Packit Service 82fcde
	  return 1;
Packit Service 82fcde
	}
Packit Service 82fcde
      else if (t->expected == 2)
Packit Service 82fcde
	{
Packit Service 82fcde
	  printf ("test %d\n", id);
Packit Service 82fcde
	  printf ("pattern \"%s\" successfull compilation not expected\n",
Packit Service 82fcde
		  t->pattern);
Packit Service 82fcde
	  return 1;
Packit Service 82fcde
	}
Packit Service 82fcde
    }
Packit Service 82fcde
Packit Service 82fcde
  err = regexec (&r, t->data, 10, regs, 0);
Packit Service 82fcde
Packit Service 82fcde
  if (err != t->expected)
Packit Service 82fcde
    {
Packit Service 82fcde
      printf ("test %d\n", id);
Packit Service 82fcde
      printf ("pattern \"%s\" data \"%s\" wanted %d got %d\n",
Packit Service 82fcde
	      t->pattern, t->data, t->expected, err);
Packit Service 82fcde
      for (x = 0; x < 10; ++x)
Packit Service 82fcde
	printf ("reg %d == (%d, %d) %.*s\n",
Packit Service 82fcde
		x,
Packit Service 82fcde
		regs[x].rm_so,
Packit Service 82fcde
		regs[x].rm_eo,
Packit Service 82fcde
		regs[x].rm_eo - regs[x].rm_so,
Packit Service 82fcde
		t->data + regs[x].rm_so);
Packit Service 82fcde
      return 1;
Packit Service 82fcde
    }
Packit Service 82fcde
  puts (" OK.");
Packit Service 82fcde
  return 0;
Packit Service 82fcde
}
Packit Service 82fcde
Packit Service 82fcde

Packit Service 82fcde
Packit Service 82fcde
int
Packit Service 82fcde
main (int argc, char * argv[])
Packit Service 82fcde
{
Packit Service 82fcde
  int x;
Packit Service 82fcde
  int lo;
Packit Service 82fcde
  int hi;
Packit Service 82fcde
  int res = 0;
Packit Service 82fcde
Packit Service 82fcde
  lo = 0;
Packit Service 82fcde
  hi = (sizeof (the_tests) / sizeof (the_tests[0])) - 1;
Packit Service 82fcde
Packit Service 82fcde
  if (argc > 1)
Packit Service 82fcde
    {
Packit Service 82fcde
      lo = atoi (argv[1]);
Packit Service 82fcde
      hi = lo + 1;
Packit Service 82fcde
Packit Service 82fcde
      if (argc > 2)
Packit Service 82fcde
	hi = atoi (argv[2]);
Packit Service 82fcde
    }
Packit Service 82fcde
Packit Service 82fcde
  for (x = lo; x < hi; ++x)
Packit Service 82fcde
    {
Packit Service 82fcde
      printf ("#%d:", x);
Packit Service 82fcde
      res |= run_a_test (x, &the_tests[x]);
Packit Service 82fcde
    }
Packit Service 82fcde
  return res != 0;
Packit Service 82fcde
}