5d0aabd00df4a69e3b63bca160ce25924bf36428
[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
44   const char *regex[21] = {
45     "ab(c|d)+c*(a(b|c)+d)+(bla)+",
46     "(bla)*",
47     "b(lab)*la",
48     "(ab)*",
49     "ab(c|d)+c*(a(b|c)+d)+(bla)(bla)*",
50     "z(abc|def)?xyz",
51     "1*0(0|1)*",
52     "a+X*y+c|p|R|Z*K*y*R+w|Y*6+n+h*k*w+V*F|W*B*e*",
53     "(cd|ab)*",
54     "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)",
55     "abc(1|0)*def",
56     "ab|ac",
57     "(ab)(ab)*",
58     "ab|cd|ef|gh",
59     "a|b|c|d|e|f|g",
60     "(ab)|(ac)",
61     "a(b|c)",
62     "a*a",
63     "ab?(abcd)?",
64     "(ab|cs|df|sdf)*",
65     "a|aa*a"
66   };
67   char *canonical_regex;
68   struct GNUNET_REGEX_Automaton *dfa;
69
70   error = 0;
71
72   for (i = 0; i < 21; i++)
73   {
74     dfa = GNUNET_REGEX_construct_dfa (regex[i], strlen (regex[i]));
75     canonical_regex = GNUNET_strdup (GNUNET_REGEX_get_canonical_regex (dfa));
76     GNUNET_REGEX_automaton_destroy (dfa);
77
78     dfa =
79         GNUNET_REGEX_construct_dfa (canonical_regex, strlen (canonical_regex));
80     error +=
81         (0 ==
82          strcmp (canonical_regex,
83                  GNUNET_REGEX_get_canonical_regex (dfa))) ? 0 : 1;
84     GNUNET_free (canonical_regex);
85     GNUNET_REGEX_automaton_destroy (dfa);
86   }
87
88   return error;
89 }