diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/regex/Makefile.am | 9 | ||||
-rw-r--r-- | src/regex/regex.c | 10 | ||||
-rw-r--r-- | src/regex/test_regex_proofs.c | 84 |
3 files changed, 101 insertions, 2 deletions
diff --git a/src/regex/Makefile.am b/src/regex/Makefile.am index 8c73c607c..cb9bc093a 100644 --- a/src/regex/Makefile.am +++ b/src/regex/Makefile.am | |||
@@ -20,7 +20,8 @@ libgnunetregex_la_LDFLAGS = \ | |||
20 | 20 | ||
21 | check_PROGRAMS = \ | 21 | check_PROGRAMS = \ |
22 | test_regex_eval_api \ | 22 | test_regex_eval_api \ |
23 | test_regex_iterate_api | 23 | test_regex_iterate_api \ |
24 | test_regex_proofs | ||
24 | 25 | ||
25 | if ENABLE_TEST_RUN | 26 | if ENABLE_TEST_RUN |
26 | TESTS = $(check_PROGRAMS) | 27 | TESTS = $(check_PROGRAMS) |
@@ -38,5 +39,11 @@ test_regex_iterate_api_LDADD = \ | |||
38 | $(top_builddir)/src/regex/libgnunetregex.la \ | 39 | $(top_builddir)/src/regex/libgnunetregex.la \ |
39 | $(top_builddir)/src/util/libgnunetutil.la | 40 | $(top_builddir)/src/util/libgnunetutil.la |
40 | 41 | ||
42 | test_regex_proofs_SOURCES = \ | ||
43 | test_regex_proofs.c | ||
44 | test_regex_proofs_LDADD = \ | ||
45 | $(top_builddir)/src/regex/libgnunetregex.la \ | ||
46 | $(top_builddir)/src/util/libgnunetutil.la | ||
47 | |||
41 | EXTRA_DIST = | 48 | EXTRA_DIST = |
42 | # test_regex_data.conf | 49 | # test_regex_data.conf |
diff --git a/src/regex/regex.c b/src/regex/regex.c index bf65703b4..b0fb4c175 100644 --- a/src/regex/regex.c +++ b/src/regex/regex.c | |||
@@ -919,7 +919,15 @@ remove_epsilon (const char *str) | |||
919 | return GNUNET_strdup (str); | 919 | return GNUNET_strdup (str); |
920 | } | 920 | } |
921 | 921 | ||
922 | 922 | /** | |
923 | * Compare 'str1', starting from position 'k', with whole 'str2' | ||
924 | * | ||
925 | * @param str1 first string to compare, starting from position 'k' | ||
926 | * @param str2 second string for comparison | ||
927 | * @param k starting position in 'str1' | ||
928 | * | ||
929 | * @return -1 if any of the strings is NULL, 0 if equal, non 0 otherwise | ||
930 | */ | ||
923 | static int | 931 | static int |
924 | strkcmp (const char *str1, const char *str2, size_t k) | 932 | strkcmp (const char *str1, const char *str2, size_t k) |
925 | { | 933 | { |
diff --git a/src/regex/test_regex_proofs.c b/src/regex/test_regex_proofs.c new file mode 100644 index 000000000..47cc4ee5b --- /dev/null +++ b/src/regex/test_regex_proofs.c | |||
@@ -0,0 +1,84 @@ | |||
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 | } | ||