Back to index

glibc  2.9
Classes | Functions | Variables
runptests.c File Reference
#include <sys/types.h>
#include <regex.h>
#include <stdio.h>
#include <string.h>
#include "ptestcases.h"

Go to the source code of this file.

Classes

struct  test

Functions

int main (int argc, char *argv[])

Variables

struct test tests []

Class Documentation

struct test

Definition at line 27 of file runptests.c.

Class Members
int end
const CHAR * fmt
size_t offset
int options
const char * reg
double result
int retval
int start
const char * str
const CHAR * str

Function Documentation

int main ( int  argc,
char *  argv[] 
)

Definition at line 41 of file runptests.c.

{
  size_t cnt;
  int errors = 0;

  for (cnt = 0; cnt < sizeof (tests) / sizeof (tests[0]); ++cnt)
    if (tests[cnt].str == NULL)
      {
       printf ("\n%s\n%.*s\n", tests[cnt].reg,
              (int) strlen (tests[cnt].reg),
              "-----------------------------------------------------");
      }
    else if (tests[cnt].reg == NULL)
       printf ("!!! %s\n", tests[cnt].str);
    else
      {
       regex_t re;
       regmatch_t match[20];
       int err;

       printf ("regexp: \"%s\", string: \"%s\" -> ", tests[cnt].reg,
              tests[cnt].str);

       /* Compile the expression.  */
       err = regcomp (&re, tests[cnt].reg, tests[cnt].options);
       if (err != 0)
         {
           if (tests[cnt].start == -2)
             puts ("compiling failed, OK");
           else
             {
              char buf[100];
              regerror (err, &re, buf, sizeof (buf));
              printf ("FAIL: %s\n", buf);
              ++errors;
             }

           continue;
         }
       else if (tests[cnt].start == -2)
         {
           puts ("compiling suceeds, FAIL");
           errors++;
           continue;
         }

       /* Run the actual test.  */
       err = regexec (&re, tests[cnt].str, 20, match, 0);

       if (err != 0)
         {
           if (tests[cnt].start == -1)
             puts ("no match, OK");
           else
             {
              puts ("no match, FAIL");
              ++errors;
             }
         }
       else
         {
           if (match[0].rm_so == 0 && tests[cnt].start == 0
              && match[0].rm_eo == 0 && tests[cnt].end == 0)
             puts ("match, OK");
           else if (match[0].rm_so + 1 == tests[cnt].start
                   && match[0].rm_eo == tests[cnt].end)
             puts ("match, OK");
           else
             {
              printf ("wrong match (%d to %d): FAIL\n",
                     match[0].rm_so, match[0].rm_eo);
              ++errors;
             }
         }

       /* Free all resources.  */
       regfree (&re);
      }

  printf ("\n%Zu tests, %d errors\n", cnt, errors);

  return errors != 0;
}

Here is the call graph for this function:


Variable Documentation

struct test tests[]