new test for regex
[oweals/gnunet.git] / src / regex / test_regex_proofs.c
1 /*
2      This file is part of GNUnet
3      (C) 2012 Christian Grothoff (and other contributing authors)
4
5      GNUnet is free software; you can redistribute it and/or modify
6      it under the terms of the GNU General Public License as published
7      by the Free Software Foundation; either version 3, or (at your
8      option) any later version.
9
10      GNUnet is distributed in the hope that it will be useful, but
11      WITHOUT ANY WARRANTY; without even the implied warranty of
12      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13      General Public License for more details.
14
15      You should have received a copy of the GNU General Public License
16      along with GNUnet; see the file COPYING.  If not, write to the
17      Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18      Boston, MA 02111-1307, USA.
19 */
20 /**
21  * @file regex/test_regex_proofs.c
22  * @brief test for regex.c
23  * @author Maximilian Szengel
24  */
25 #include <regex.h>
26 #include <time.h>
27 #include "platform.h"
28 #include "gnunet_regex_lib.h"
29
30 int
31 main (int argc, char *argv[])
32 {
33   GNUNET_log_setup ("test-regex",
34 #if VERBOSE
35                     "DEBUG",
36 #else
37                     "WARNING",
38 #endif
39                     NULL);
40
41   int error;
42   int i;
43   const char *regex[21] = {
44     "ab(c|d)+c*(a(b|c)+d)+(bla)+",
45     "(bla)*",
46     "b(lab)*la",
47     "(ab)*",
48     "ab(c|d)+c*(a(b|c)+d)+(bla)(bla)*",
49     "z(abc|def)?xyz",
50     "1*0(0|1)*",
51     "a+X*y+c|p|R|Z*K*y*R+w|Y*6+n+h*k*w+V*F|W*B*e*",
52     "(cd|ab)*",
53     "abcd:(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1):(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)",
54     "abc(1|0)*def",
55     "ab|ac",
56     "(ab)(ab)*",
57     "ab|cd|ef|gh",
58     "a|b|c|d|e|f|g",
59     "(ab)|(ac)",
60     "a(b|c)",
61     "a*a",
62     "ab?(abcd)?",
63     "(ab|cs|df|sdf)*",
64     "a|aa*a"
65   };
66   char *computed_regex;
67   struct GNUNET_REGEX_Automaton *dfa;
68
69   error = 0;
70
71   for (i = 0; i < 21; i++)
72   {
73     dfa = GNUNET_REGEX_construct_dfa (regex[i], strlen (regex[i]));
74     computed_regex = GNUNET_strdup (GNUNET_REGEX_get_computed_regex (dfa));
75     GNUNET_REGEX_automaton_destroy (dfa);
76
77     dfa = GNUNET_REGEX_construct_dfa (computed_regex, strlen (computed_regex));
78     error += (0 == strcmp (computed_regex, GNUNET_REGEX_get_computed_regex (dfa))) ? 0 : 1;
79     GNUNET_free (computed_regex);
80     GNUNET_REGEX_automaton_destroy (dfa);
81   }
82   
83   return error;
84 }