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