Home | History | Annotate | Download | only in testsuite
      1 /* Regular expression tests.
      2    Copyright (C) 2002, 2003 Free Software Foundation, Inc.
      3    This file is part of the GNU C Library.
      4    Contributed by Jakub Jelinek <jakub (at) redhat.com>, 2002.
      5 
      6    The GNU C Library is free software; you can redistribute it and/or
      7    modify it under the terms of the GNU Lesser General Public
      8    License as published by the Free Software Foundation; either
      9    version 2.1 of the License, or (at your option) any later version.
     10 
     11    The GNU C Library is distributed in the hope that it will be useful,
     12    but WITHOUT ANY WARRANTY; without even the implied warranty of
     13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     14    Lesser General Public License for more details.
     15 
     16    You should have received a copy of the GNU Lesser General Public
     17    License along with the GNU C Library; if not, write to the Free
     18    Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
     19    02110-1301 USA.  */
     20 
     21 #ifdef HAVE_CONFIG_H
     22 #include "config.h"
     23 #endif
     24 
     25 #include <sys/types.h>
     26 #ifdef HAVE_MCHECK_H
     27 #include <mcheck.h>
     28 #endif
     29 #include <regex.h>
     30 #include <stdio.h>
     31 #include <stdlib.h>
     32 
     33 /* Tests supposed to not match.  */
     34 struct
     35 {
     36   const char *pattern;
     37   const char *string;
     38   int flags, nmatch;
     39 } tests[] = {
     40   { "^<\\([^~]*\\)\\([^~]\\)[^~]*~\\1\\(.\\).*|=.*\\3.*\\2",
     41     "<,.8~2,~so-|=-~.0,123456789<><", REG_NOSUB, 0 },
     42   /* In ERE, all carets must be treated as anchors.  */
     43   { "a^b", "a^b", REG_EXTENDED, 0 }
     44 };
     45 
     46 int
     47 main (void)
     48 {
     49   regex_t re;
     50   regmatch_t rm[4];
     51   size_t i;
     52   int n, ret = 0;
     53 
     54 #ifdef HAVE_MCHECK_H
     55   mtrace ();
     56 #endif
     57 
     58   for (i = 0; i < sizeof (tests) / sizeof (tests[0]); ++i)
     59     {
     60       n = regcomp (&re, tests[i].pattern, tests[i].flags);
     61       if (n != 0)
     62 	{
     63 	  char buf[500];
     64 	  regerror (n, &re, buf, sizeof (buf));
     65 	  printf ("regcomp %lu failed: %s\n", i, buf);
     66 	  ret = 1;
     67 	  continue;
     68 	}
     69 
     70       if (! regexec (&re, tests[i].string, tests[i].nmatch,
     71 		     tests[i].nmatch ? rm : NULL, 0))
     72 	{
     73 	  printf ("regexec %lu incorrectly matched\n", i);
     74 	  ret = 1;
     75 	}
     76 
     77       regfree (&re);
     78     }
     79 
     80   return ret;
     81 }
     82