aboutsummaryrefslogtreecommitdiff
path: root/src/regex/test_regex_eval_api.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/regex/test_regex_eval_api.c')
-rw-r--r--src/regex/test_regex_eval_api.c436
1 files changed, 217 insertions, 219 deletions
diff --git a/src/regex/test_regex_eval_api.c b/src/regex/test_regex_eval_api.c
index f8565b380..88a05f912 100644
--- a/src/regex/test_regex_eval_api.c
+++ b/src/regex/test_regex_eval_api.c
@@ -11,12 +11,12 @@
11 WITHOUT ANY WARRANTY; without even the implied warranty of 11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details. 13 Affero General Public License for more details.
14 14
15 You should have received a copy of the GNU Affero General Public License 15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>. 16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17 17
18 SPDX-License-Identifier: AGPL3.0-or-later 18 SPDX-License-Identifier: AGPL3.0-or-later
19*/ 19 */
20/** 20/**
21 * @file regex/test_regex_eval_api.c 21 * @file regex/test_regex_eval_api.c
22 * @brief test for regex.c 22 * @brief test for regex.c
@@ -29,14 +29,12 @@
29#include "regex_test_lib.h" 29#include "regex_test_lib.h"
30#include "regex_internal.h" 30#include "regex_internal.h"
31 31
32enum Match_Result 32enum Match_Result {
33{
34 match = 0, 33 match = 0,
35 nomatch = 1 34 nomatch = 1
36}; 35};
37 36
38struct Regex_String_Pair 37struct Regex_String_Pair {
39{
40 char *regex; 38 char *regex;
41 int string_count; 39 int string_count;
42 char *strings[20]; 40 char *strings[20];
@@ -57,8 +55,8 @@ struct Regex_String_Pair
57 * @return 0 on success, non 0 otherwise. 55 * @return 0 on success, non 0 otherwise.
58 */ 56 */
59int 57int
60test_random (unsigned int rx_length, unsigned int max_str_len, 58test_random(unsigned int rx_length, unsigned int max_str_len,
61 unsigned int str_count) 59 unsigned int str_count)
62{ 60{
63 unsigned int i; 61 unsigned int i;
64 char *rand_rx; 62 char *rand_rx;
@@ -75,108 +73,108 @@ test_random (unsigned int rx_length, unsigned int max_str_len,
75 char *canonical_regex = NULL; 73 char *canonical_regex = NULL;
76 74
77 /* At least one string is needed for matching */ 75 /* At least one string is needed for matching */
78 GNUNET_assert (str_count > 0); 76 GNUNET_assert(str_count > 0);
79 /* The string should be at least as long as the regex itself */ 77 /* The string should be at least as long as the regex itself */
80 GNUNET_assert (max_str_len >= rx_length); 78 GNUNET_assert(max_str_len >= rx_length);
81 79
82 /* Generate random regex and a string that matches the regex */ 80 /* Generate random regex and a string that matches the regex */
83 matching_str = GNUNET_malloc (rx_length + 1); 81 matching_str = GNUNET_malloc(rx_length + 1);
84 rand_rx = REGEX_TEST_generate_random_regex (rx_length, matching_str); 82 rand_rx = REGEX_TEST_generate_random_regex(rx_length, matching_str);
85 83
86 /* Now match */ 84 /* Now match */
87 result = 0; 85 result = 0;
88 for (i = 0; i < str_count; i++) 86 for (i = 0; i < str_count; i++)
89 {
90 if (0 < i)
91 { 87 {
92 matching_str = REGEX_TEST_generate_random_string (max_str_len); 88 if (0 < i)
93 } 89 {
94 90 matching_str = REGEX_TEST_generate_random_string(max_str_len);
95 /* Match string using DFA */ 91 }
96 dfa = REGEX_INTERNAL_construct_dfa (rand_rx, strlen (rand_rx), 0); 92
97 if (NULL == dfa) 93 /* Match string using DFA */
98 { 94 dfa = REGEX_INTERNAL_construct_dfa(rand_rx, strlen(rand_rx), 0);
99 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Constructing DFA failed\n"); 95 if (NULL == dfa)
100 goto error; 96 {
101 } 97 GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Constructing DFA failed\n");
102 98 goto error;
103 eval = REGEX_INTERNAL_eval (dfa, matching_str); 99 }
104 /* save the canonical regex for later comparison */ 100
105 canonical_regex = GNUNET_strdup (REGEX_INTERNAL_get_canonical_regex (dfa)); 101 eval = REGEX_INTERNAL_eval(dfa, matching_str);
106 REGEX_INTERNAL_automaton_destroy (dfa); 102 /* save the canonical regex for later comparison */
107 103 canonical_regex = GNUNET_strdup(REGEX_INTERNAL_get_canonical_regex(dfa));
108 /* Match string using glibc regex */ 104 REGEX_INTERNAL_automaton_destroy(dfa);
109 if (0 != regcomp (&rx, rand_rx, REG_EXTENDED)) 105
110 { 106 /* Match string using glibc regex */
111 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 107 if (0 != regcomp(&rx, rand_rx, REG_EXTENDED))
112 "Could not compile regex using regcomp: %s\n", rand_rx); 108 {
113 goto error; 109 GNUNET_log(GNUNET_ERROR_TYPE_ERROR,
114 } 110 "Could not compile regex using regcomp: %s\n", rand_rx);
115 111 goto error;
116 eval_check = regexec (&rx, matching_str, 1, matchptr, 0); 112 }
117 regfree (&rx); 113
118 114 eval_check = regexec(&rx, matching_str, 1, matchptr, 0);
119 /* We only want to match the whole string, because that's what our DFA does, 115 regfree(&rx);
120 * too. */ 116
121 if (eval_check == 0 && 117 /* We only want to match the whole string, because that's what our DFA does,
122 (matchptr[0].rm_so != 0 || matchptr[0].rm_eo != strlen (matching_str))) 118 * too. */
123 eval_check = 1; 119 if (eval_check == 0 &&
124 120 (matchptr[0].rm_so != 0 || matchptr[0].rm_eo != strlen(matching_str)))
125 /* Match canonical regex */ 121 eval_check = 1;
126 dfa = 122
127 REGEX_INTERNAL_construct_dfa (canonical_regex, strlen (canonical_regex), 123 /* Match canonical regex */
128 0); 124 dfa =
129 if (NULL == dfa) 125 REGEX_INTERNAL_construct_dfa(canonical_regex, strlen(canonical_regex),
130 { 126 0);
131 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Constructing DFA failed\n"); 127 if (NULL == dfa)
132 goto error; 128 {
133 } 129 GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Constructing DFA failed\n");
134 130 goto error;
135 eval_canonical = REGEX_INTERNAL_eval (dfa, matching_str); 131 }
136 REGEX_INTERNAL_automaton_destroy (dfa); 132
137 133 eval_canonical = REGEX_INTERNAL_eval(dfa, matching_str);
138 if (0 != regcomp (&rx, canonical_regex, REG_EXTENDED)) 134 REGEX_INTERNAL_automaton_destroy(dfa);
139 { 135
140 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 136 if (0 != regcomp(&rx, canonical_regex, REG_EXTENDED))
141 "Could not compile regex using regcomp: %s\n", 137 {
142 canonical_regex); 138 GNUNET_log(GNUNET_ERROR_TYPE_ERROR,
143 goto error; 139 "Could not compile regex using regcomp: %s\n",
144 } 140 canonical_regex);
145 141 goto error;
146 eval_canonical_check = regexec (&rx, matching_str, 1, matchptr, 0); 142 }
147 regfree (&rx); 143
148 144 eval_canonical_check = regexec(&rx, matching_str, 1, matchptr, 0);
149 /* We only want to match the whole string, because that's what our DFA does, 145 regfree(&rx);
150 * too. */ 146
151 if (eval_canonical_check == 0 && 147 /* We only want to match the whole string, because that's what our DFA does,
152 (matchptr[0].rm_so != 0 || matchptr[0].rm_eo != strlen (matching_str))) 148 * too. */
153 eval_canonical_check = 1; 149 if (eval_canonical_check == 0 &&
154 150 (matchptr[0].rm_so != 0 || matchptr[0].rm_eo != strlen(matching_str)))
155 /* compare results */ 151 eval_canonical_check = 1;
156 if (eval_check != eval || eval_canonical != eval_canonical_check) 152
157 { 153 /* compare results */
158 regerror (eval_check, &rx, error, sizeof error); 154 if (eval_check != eval || eval_canonical != eval_canonical_check)
159 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Unexpected result:\nregex: %s\ncanonical_regex: %s\n\ 155 {
156 regerror(eval_check, &rx, error, sizeof error);
157 GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Unexpected result:\nregex: %s\ncanonical_regex: %s\n\
160 string: %s\ngnunet regex: %i\nglibc regex: %i\n\ 158 string: %s\ngnunet regex: %i\nglibc regex: %i\n\
161 canonical regex: %i\ncanonical regex glibc: %i\n\ 159 canonical regex: %i\ncanonical regex glibc: %i\n\
162 glibc error: %s\n\n", rand_rx, canonical_regex, matching_str, 160 glibc error: %s\n\n", rand_rx, canonical_regex, matching_str,
163 eval, eval_check, eval_canonical, eval_canonical_check, error); 161 eval, eval_check, eval_canonical, eval_canonical_check, error);
164 result += 1; 162 result += 1;
163 }
164 GNUNET_free(canonical_regex);
165 GNUNET_free(matching_str);
166 canonical_regex = NULL;
167 matching_str = NULL;
165 } 168 }
166 GNUNET_free (canonical_regex);
167 GNUNET_free (matching_str);
168 canonical_regex = NULL;
169 matching_str = NULL;
170 }
171 169
172 GNUNET_free (rand_rx); 170 GNUNET_free(rand_rx);
173 171
174 return result; 172 return result;
175 173
176error: 174error:
177 GNUNET_free_non_null (matching_str); 175 GNUNET_free_non_null(matching_str);
178 GNUNET_free_non_null (rand_rx); 176 GNUNET_free_non_null(rand_rx);
179 GNUNET_free_non_null (canonical_regex); 177 GNUNET_free_non_null(canonical_regex);
180 return -1; 178 return -1;
181} 179}
182 180
@@ -193,8 +191,8 @@ error:
193 * @return 0 on successfull, non 0 otherwise 191 * @return 0 on successfull, non 0 otherwise
194 */ 192 */
195int 193int
196test_automaton (struct REGEX_INTERNAL_Automaton *a, regex_t * rx, 194test_automaton(struct REGEX_INTERNAL_Automaton *a, regex_t * rx,
197 struct Regex_String_Pair *rxstr) 195 struct Regex_String_Pair *rxstr)
198{ 196{
199 int result; 197 int result;
200 int eval; 198 int eval;
@@ -204,48 +202,48 @@ test_automaton (struct REGEX_INTERNAL_Automaton *a, regex_t * rx,
204 int i; 202 int i;
205 203
206 if (NULL == a) 204 if (NULL == a)
207 { 205 {
208 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Automaton was NULL\n"); 206 GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Automaton was NULL\n");
209 return 1; 207 return 1;
210 } 208 }
211 209
212 result = 0; 210 result = 0;
213 211
214 for (i = 0; i < rxstr->string_count; i++) 212 for (i = 0; i < rxstr->string_count; i++)
215 {
216 eval = REGEX_INTERNAL_eval (a, rxstr->strings[i]);
217 eval_check = regexec (rx, rxstr->strings[i], 1, matchptr, 0);
218
219 /* We only want to match the whole string, because that's what our DFA does,
220 * too. */
221 if (eval_check == 0 &&
222 (matchptr[0].rm_so != 0 ||
223 matchptr[0].rm_eo != strlen (rxstr->strings[i])))
224 eval_check = 1;
225
226 if ((rxstr->expected_results[i] == match && (0 != eval || 0 != eval_check))
227 || (rxstr->expected_results[i] == nomatch &&
228 (0 == eval || 0 == eval_check)))
229 { 213 {
230 result = 1; 214 eval = REGEX_INTERNAL_eval(a, rxstr->strings[i]);
231 regerror (eval_check, rx, error, sizeof error); 215 eval_check = regexec(rx, rxstr->strings[i], 1, matchptr, 0);
232 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 216
233 "Unexpected result:\nregex: %s\ncanonical_regex: %s\n" 217 /* We only want to match the whole string, because that's what our DFA does,
234 "string: %s\nexpected result: %i\n" 218 * too. */
235 "gnunet regex: %i\nglibc regex: %i\nglibc error: %s\n" 219 if (eval_check == 0 &&
236 "rm_so: %i\nrm_eo: %i\n\n", rxstr->regex, 220 (matchptr[0].rm_so != 0 ||
237 REGEX_INTERNAL_get_canonical_regex (a), rxstr->strings[i], 221 matchptr[0].rm_eo != strlen(rxstr->strings[i])))
238 rxstr->expected_results[i], eval, eval_check, error, 222 eval_check = 1;
239 matchptr[0].rm_so, matchptr[0].rm_eo); 223
224 if ((rxstr->expected_results[i] == match && (0 != eval || 0 != eval_check))
225 || (rxstr->expected_results[i] == nomatch &&
226 (0 == eval || 0 == eval_check)))
227 {
228 result = 1;
229 regerror(eval_check, rx, error, sizeof error);
230 GNUNET_log(GNUNET_ERROR_TYPE_ERROR,
231 "Unexpected result:\nregex: %s\ncanonical_regex: %s\n"
232 "string: %s\nexpected result: %i\n"
233 "gnunet regex: %i\nglibc regex: %i\nglibc error: %s\n"
234 "rm_so: %i\nrm_eo: %i\n\n", rxstr->regex,
235 REGEX_INTERNAL_get_canonical_regex(a), rxstr->strings[i],
236 rxstr->expected_results[i], eval, eval_check, error,
237 matchptr[0].rm_so, matchptr[0].rm_eo);
238 }
240 } 239 }
241 }
242 return result; 240 return result;
243} 241}
244 242
245int 243int
246main (int argc, char *argv[]) 244main(int argc, char *argv[])
247{ 245{
248 GNUNET_log_setup ("test-regex", "WARNING", NULL); 246 GNUNET_log_setup("test-regex", "WARNING", NULL);
249 247
250 struct REGEX_INTERNAL_Automaton *a; 248 struct REGEX_INTERNAL_Automaton *a;
251 regex_t rx; 249 regex_t rx;
@@ -256,71 +254,71 @@ main (int argc, char *argv[])
256 char *check_proof; 254 char *check_proof;
257 255
258 struct Regex_String_Pair rxstr[19] = { 256 struct Regex_String_Pair rxstr[19] = {
259 {"ab?(abcd)?", 5, 257 { "ab?(abcd)?", 5,
260 {"ababcd", "abab", "aabcd", "a", "abb"}, 258 { "ababcd", "abab", "aabcd", "a", "abb" },
261 {match, nomatch, match, match, nomatch}}, 259 { match, nomatch, match, match, nomatch } },
262 {"ab(c|d)+c*(a(b|c)d)+", 5, 260 { "ab(c|d)+c*(a(b|c)d)+", 5,
263 {"abcdcdcdcdddddabd", "abcd", 261 { "abcdcdcdcdddddabd", "abcd",
264 "abcddddddccccccccccccccccccccccccabdacdabd", 262 "abcddddddccccccccccccccccccccccccabdacdabd",
265 "abccccca", "abcdcdcdccdabdabd"}, 263 "abccccca", "abcdcdcdccdabdabd" },
266 {match, nomatch, match, nomatch, match}}, 264 { match, nomatch, match, nomatch, match } },
267 {"ab+c*(a(bx|c)d)+", 5, 265 { "ab+c*(a(bx|c)d)+", 5,
268 {"abcdcdcdcdddddabd", "abcd", 266 { "abcdcdcdcdddddabd", "abcd",
269 "abcddddddccccccccccccccccccccccccabdacdabd", 267 "abcddddddccccccccccccccccccccccccabdacdabd",
270 "abccccca", "abcdcdcdccdabdabd"}, 268 "abccccca", "abcdcdcdccdabdabd" },
271 {nomatch, nomatch, nomatch, nomatch, nomatch}}, 269 { nomatch, nomatch, nomatch, nomatch, nomatch } },
272 {"a+X*y+c|p|R|Z*K*y*R+w|Y*6+n+h*k*w+V*F|W*B*e*", 1, 270 { "a+X*y+c|p|R|Z*K*y*R+w|Y*6+n+h*k*w+V*F|W*B*e*", 1,
273 {"kaXycQepRZKyRwY6nhkwVFWBegNVtLPj39XhJJ6bEifRSZRYZg"}, 271 { "kaXycQepRZKyRwY6nhkwVFWBegNVtLPj39XhJJ6bEifRSZRYZg" },
274 {nomatch}}, 272 { nomatch } },
275 {"k|a+X*y+c|Q*e|p|R|Z*K*y*R+w|Y*6+n+h*k*w+V*F|W*B*e*g|N+V|t+L|P*j*3*9+X*h*J|J*6|b|E*i*f*R+S|Z|R|Y*Z|g*", 1, 273 { "k|a+X*y+c|Q*e|p|R|Z*K*y*R+w|Y*6+n+h*k*w+V*F|W*B*e*g|N+V|t+L|P*j*3*9+X*h*J|J*6|b|E*i*f*R+S|Z|R|Y*Z|g*", 1,
276 {"kaXycQepRZKyRwY6nhkwVFWBegNVtLPj39XhJJ6bEifRSZRYZg"}, 274 { "kaXycQepRZKyRwY6nhkwVFWBegNVtLPj39XhJJ6bEifRSZRYZg" },
277 {nomatch}}, 275 { nomatch } },
278 {"F?W+m+2*6*c*s|P?U?a|B|y*i+t+A|V|6*C*7*e?Z*n*i|J?5+g?W*V?7*j?p?1|r?B?C+E+3+6*i+W*P?K?0|D+7?y*m+3?g?K?", 1, 276 { "F?W+m+2*6*c*s|P?U?a|B|y*i+t+A|V|6*C*7*e?Z*n*i|J?5+g?W*V?7*j?p?1|r?B?C+E+3+6*i+W*P?K?0|D+7?y*m+3?g?K?", 1,
279 {"osfjsodfonONONOnosndfsdnfsd"}, 277 { "osfjsodfonONONOnosndfsdnfsd" },
280 {nomatch}}, 278 { nomatch } },
281 {"V|M*o?x*p*d+h+b|E*m?h?Y*E*O?W*W*P+o?Z+H*M|I*q+C*a+5?5*9|b?z|G*y*k?R|p+u|8*h?B+l*H|e|L*O|1|F?v*0?5|C+", 1, 279 { "V|M*o?x*p*d+h+b|E*m?h?Y*E*O?W*W*P+o?Z+H*M|I*q+C*a+5?5*9|b?z|G*y*k?R|p+u|8*h?B+l*H|e|L*O|1|F?v*0?5|C+", 1,
282 {"VMoxpdhbEmhYEOWWPoZHMIqCa559bzGykRpu8hBlHeLO1Fv05C"}, 280 { "VMoxpdhbEmhYEOWWPoZHMIqCa559bzGykRpu8hBlHeLO1Fv05C" },
283 {nomatch}}, 281 { nomatch } },
284 {"(bla)*", 8, 282 { "(bla)*", 8,
285 {"", "bla", "blabla", "bl", "la", "b", "l", "a"}, 283 { "", "bla", "blabla", "bl", "la", "b", "l", "a" },
286 {match, match, match, nomatch, nomatch, nomatch, nomatch, nomatch}}, 284 { match, match, match, nomatch, nomatch, nomatch, nomatch, nomatch } },
287 {"ab(c|d)+c*(a(b|c)+d)+(bla)(bla)*", 8, 285 { "ab(c|d)+c*(a(b|c)+d)+(bla)(bla)*", 8,
288 {"ab", "abcabdbla", "abdcccccccccccabcbccdblablabla", "bl", "la", "b", 286 { "ab", "abcabdbla", "abdcccccccccccabcbccdblablabla", "bl", "la", "b",
289 "l", 287 "l",
290 "a"}, 288 "a" },
291 {nomatch, match, match, nomatch, nomatch, nomatch, nomatch, nomatch}}, 289 { nomatch, match, match, nomatch, nomatch, nomatch, nomatch, nomatch } },
292 {"a|aa*a", 6, 290 { "a|aa*a", 6,
293 {"", "a", "aa", "aaa", "aaaa", "aaaaa"}, 291 { "", "a", "aa", "aaa", "aaaa", "aaaaa" },
294 {nomatch, match, match, match, match, match}}, 292 { nomatch, match, match, match, match, match } },
295 {"ab(c|d)+c*(a(b|c)+d)+(bla)+", 1, 293 { "ab(c|d)+c*(a(b|c)+d)+(bla)+", 1,
296 {"abcabdblaacdbla"}, 294 { "abcabdblaacdbla" },
297 {nomatch}}, 295 { nomatch } },
298 {"(ac|b)+", 8, 296 { "(ac|b)+", 8,
299 {"b", "bb", "ac", "", "acb", "bacbacac", "acacac", "abc"}, 297 { "b", "bb", "ac", "", "acb", "bacbacac", "acacac", "abc" },
300 {match, match, match, nomatch, match, match, match, nomatch}}, 298 { match, match, match, nomatch, match, match, match, nomatch } },
301 {"(ab|c)+", 7, 299 { "(ab|c)+", 7,
302 {"", "ab", "c", "abc", "ababcc", "acc", "abac"}, 300 { "", "ab", "c", "abc", "ababcc", "acc", "abac" },
303 {nomatch, match, match, match, match, nomatch, nomatch}}, 301 { nomatch, match, match, match, match, nomatch, nomatch } },
304 {"((j|2j)K|(j|2j)AK|(j|2j)(D|e|(j|2j)A(D|e))D*K)", 1, 302 { "((j|2j)K|(j|2j)AK|(j|2j)(D|e|(j|2j)A(D|e))D*K)", 1,
305 {"", "2j2jADK", "j2jADK"}, 303 { "", "2j2jADK", "j2jADK" },
306 {nomatch, match, match}}, 304 { nomatch, match, match } },
307 {"((j|2j)K|(j|2j)(D|e|((j|2j)j|(j|2j)2j)A(D|e))D*K|(j|2j)AK)", 2, 305 { "((j|2j)K|(j|2j)(D|e|((j|2j)j|(j|2j)2j)A(D|e))D*K|(j|2j)AK)", 2,
308 {"", "2j2jjADK", "j2jADK"}, 306 { "", "2j2jjADK", "j2jADK" },
309 {nomatch, match, match}}, 307 { nomatch, match, match } },
310 {"ab(c|d)+c*(a(b|c)d)+", 1, 308 { "ab(c|d)+c*(a(b|c)d)+", 1,
311 {"abacd"}, 309 { "abacd" },
312 {nomatch}}, 310 { nomatch } },
313 {"d|5kl", 1, 311 { "d|5kl", 1,
314 {"d5kl"}, 312 { "d5kl" },
315 {nomatch}}, 313 { nomatch } },
316 {"a()b", 1, 314 { "a()b", 1,
317 {"ab"}, 315 { "ab" },
318 {match}}, 316 { match } },
319 {"GNVPN-0001-PAD(001110101001001010(0|1)*|001110101001001010000(0|1)*|001110101001001010001(0|1)*|001110101001001010010(0|1)*|001110101001001010011(0|1)*|001110101001001010100(0|1)*|001110101001001010101(0|1)*|001110101001001010110(0|1)*|001110101001001010111(0|1)*|0011101010110110(0|1)*|001110101011011000000(0|1)*|001110101011011000001(0|1)*|001110101011011000010(0|1)*|001110101011011000011(0|1)*|001110101011011000100(0|1)*|001110101011011000101(0|1)*|001110101011011000110(0|1)*|001110101011011000111(0|1)*|001110101011011001000(0|1)*|001110101011011001001(0|1)*|001110101011011001010(0|1)*|001110101011011001011(0|1)*|001110101011011001100(0|1)*|001110101011011001101(0|1)*|001110101011011001110(0|1)*|001110101011011001111(0|1)*|001110101011011010000(0|1)*|001110101011011010001(0|1)*|001110101011011010010(0|1)*|001110101011011010011(0|1)*|001110101011011010100(0|1)*|001110101011011010101(0|1)*|001110101011011010110(0|1)*|001110101011011010111(0|1)*|001110101011011011000(0|1)*|001110101011011011001(0|1)*|001110101011011011010(0|1)*|001110101011011011011(0|1)*|001110101011011011100(0|1)*|001110101011011011101(0|1)*|001110101011011011110(0|1)*|001110101011011011111(0|1)*|0011101110111101(0|1)*|001110111011110100000(0|1)*|001110111011110100001(0|1)*|001110111011110100010(0|1)*|001110111011110100011(0|1)*|001110111011110100100(0|1)*|001110111011110100101(0|1)*|001110111011110100110(0|1)*|001110111011110100111(0|1)*|001110111011110101000(0|1)*|001110111011110101001(0|1)*|001110111011110101010(0|1)*|001110111011110101011(0|1)*|001110111011110101100(0|1)*|001110111011110101101(0|1)*|001110111011110101110(0|1)*|001110111011110101111(0|1)*|001110111011110110000(0|1)*|001110111011110110001(0|1)*|001110111011110110010(0|1)*|001110111011110110011(0|1)*|001110111011110110100(0|1)*|001110111011110110101(0|1)*|001110111011110110110(0|1)*|001110111011110110111(0|1)*|001110111011110111000(0|1)*|001110111011110111001(0|1)*|001110111011110111010(0|1)*|001110111011110111011(0|1)*|001110111011110111100(0|1)*|001110111011110111101(0|1)*|001110111011110111110(0|1)*|0111010001010110(0|1)*|011101000101011000000(0|1)*|011101000101011000001(0|1)*|011101000101011000010(0|1)*|011101000101011000011(0|1)*|011101000101011000100(0|1)*|011101000101011000101(0|1)*|011101000101011000110(0|1)*|011101000101011000111(0|1)*|011101000101011001000(0|1)*|011101000101011001001(0|1)*|011101000101011001010(0|1)*|011101000101011001011(0|1)*|011101000101011001100(0|1)*|011101000101011001101(0|1)*|011101000101011001110(0|1)*|011101000101011001111(0|1)*|011101000101011010000(0|1)*|011101000101011010001(0|1)*|011101000101011010010(0|1)*|011101000101011010011(0|1)*|011101000101011010100(0|1)*|011101000101011010101(0|1)*|011101000101011010110(0|1)*|011101000101011010111(0|1)*|011101000101011011000(0|1)*|011101000101011011001(0|1)*|011101000101011011010(0|1)*|011101000101011011011(0|1)*|011101000101011011100(0|1)*|011101000101011011101(0|1)*|011101000101011011110(0|1)*|011101000101011011111(0|1)*|0111010001010111(0|1)*|011101000101011100000(0|1)*|011101000101011100001(0|1)*|011101000101011100010(0|1)*|011101000101011100011(0|1)*|011101000101011100100(0|1)*|011101000101011100101(0|1)*|011101000101011100110(0|1)*|011101000101011100111(0|1)*|011101000101011101000(0|1)*|011101000101011101001(0|1)*|011101000101011101010(0|1)*|011101000101011101011(0|1)*|011101000101011101100(0|1)*|011101000101011101101(0|1)*|011101000101011101110(0|1)*|011101000101011101111(0|1)*|011101000101011110000(0|1)*|011101000101011110001(0|1)*|011101000101011110010(0|1)*|011101000101011110011(0|1)*|011101000101011110100(0|1)*|011101000101011110101(0|1)*|011101000101011110110(0|1)*|011101000101011110111(0|1)*|011101000101011111000(0|1)*|011101000101011111001(0|1)*|011101000101011111010(0|1)*|011101000101011111011(0|1)*|011101000101011111100(0|1)*|011101000101011111101(0|1)*|011101000101011111110(0|1)*|011101000101011111111(0|1)*|0111010001011000(0|1)*|011101000101100000000(0|1)*|011101000101100000001(0|1)*|011101000101100000010(0|1)*|011101000101100000011(0|1)*|011101000101100000100(0|1)*|011101000101100000101(0|1)*|011101000101100000110(0|1)*|011101000101100000111(0|1)*|011101000101100001000(0|1)*|011101000101100001001(0|1)*|011101000101100001010(0|1)*|011101000101100001011(0|1)*|011101000101100001100(0|1)*|011101000101100001101(0|1)*|011101000101100001110(0|1)*|011101000101100001111(0|1)*|011101000101100010000(0|1)*|011101000101100010001(0|1)*|011101000101100010010(0|1)*|011101000101100010011(0|1)*|011101000101100010100(0|1)*|011101000101100010101(0|1)*|011101000101100010110(0|1)*|011101000101100010111(0|1)*|011101000101100011000(0|1)*|011101000101100011001(0|1)*|011101000101100011010(0|1)*|011101000101100011011(0|1)*|011101000101100011100(0|1)*|011101000101100011101(0|1)*|011101000101100011110(0|1)*|011101000101100011111(0|1)*|01110100010110010(0|1)*|011101000101100100000(0|1)*|011101000101100100001(0|1)*|011101000101100100010(0|1)*|011101000101100100011(0|1)*|011101000101100100100(0|1)*|011101000101100100101(0|1)*|011101000101100100110(0|1)*|011101000101100100111(0|1)*|011101000101100101000(0|1)*|011101000101100101001(0|1)*|011101000101100101010(0|1)*|011101000101100101011(0|1)*|011101000101100101100(0|1)*|011101000101100101101(0|1)*|011101000101100101110(0|1)*|011101000101100101111(0|1)*|011101000101100101111000(0|1)*|1100101010011100(0|1)*|110010101001110000000(0|1)*|110010101001110000000001(0|1)*|110010101001110000000010(0|1)*|110010101001110000000110(0|1)*|110010101001110000001(0|1)*|110010101001110000001000(0|1)*|110010101001110000001001(0|1)*|110010101001110000001010(0|1)*|110010101001110000001011(0|1)*|110010101001110000001101(0|1)*|110010101001110000001110(0|1)*|110010101001110000010(0|1)*|110010101001110000011(0|1)*|110010101001110000100(0|1)*|110010101001110000101(0|1)*|110010101001110000110(0|1)*|110010101001110000111(0|1)*|110010101001110001000(0|1)*|110010101001110001001(0|1)*|110010101001110001010(0|1)*|110010101001110001011(0|1)*|110010101001110001100(0|1)*|110010101001110001101(0|1)*|110010101001110001110(0|1)*|110010101001110001111(0|1)*|110010101001110010000(0|1)*|110010101001110010001(0|1)*|110010101001110010010(0|1)*|110010101001110010011(0|1)*|110010101001110010100(0|1)*|110010101001110010101(0|1)*|110010101001110010110(0|1)*|110010101001110010111(0|1)*|110010101001110011000(0|1)*|110010101001110011001(0|1)*|110010101001110011010(0|1)*|110010101001110011011(0|1)*|110010101001110011100(0|1)*|110010101001110011101(0|1)*|110010101001110011110(0|1)*|110010101001110011111(0|1)*|1101101010111010(0|1)*|110110101011101000000(0|1)*|110110101011101000000001(0|1)*|110110101011101000001000(0|1)*|110110101011101000001001(0|1)*|110110101011101000001010(0|1)*|110110101011101000001011(0|1)*|110110101011101000001100(0|1)*|110110101011101000001110(0|1)*|110110101011101000001111(0|1)*|110110101011101000010(0|1)*|110110101011101000010000(0|1)*|110110101011101000010001(0|1)*|110110101011101000010010(0|1)*|110110101011101000010011(0|1)*|110110101011101000011(0|1)*|110110101011101000100(0|1)*|110110101011101000101(0|1)*|110110101011101000110(0|1)*|110110101011101000111(0|1)*|110110101011101001000(0|1)*|110110101011101001001(0|1)*|110110101011101001010(0|1)*|110110101011101001011(0|1)*|110110101011101001100(0|1)*|110110101011101001101(0|1)*|110110101011101001110(0|1)*|110110101011101001111(0|1)*|110110101011101010000(0|1)*|110110101011101010001(0|1)*|110110101011101010010(0|1)*|110110101011101010011(0|1)*|110110101011101010100(0|1)*|110110101011101010101(0|1)*|110110101011101010110(0|1)*|110110101011101010111(0|1)*|110110101011101011000(0|1)*|110110101011101011001(0|1)*|110110101011101011010(0|1)*|110110101011101011011(0|1)*|110110101011101011100(0|1)*|110110101011101011101(0|1)*|110110101011101011110(0|1)*|110110101011101011111(0|1)*|1101101011010100(0|1)*|110110101101010000000(0|1)*|110110101101010000001(0|1)*|110110101101010000010(0|1)*|110110101101010000011(0|1)*|110110101101010000100(0|1)*|110110101101010000101(0|1)*|110110101101010000110(0|1)*|110110101101010000111(0|1)*|110110101101010001000(0|1)*|110110101101010001001(0|1)*|110110101101010001010(0|1)*|110110101101010001011(0|1)*|110110101101010001100(0|1)*|110110101101010001101(0|1)*|110110101101010001110(0|1)*|110110101101010001111(0|1)*|110110101101010010000(0|1)*|110110101101010010001(0|1)*|110110101101010010010(0|1)*|110110101101010010011(0|1)*|110110101101010010100(0|1)*|1101101011010100101000(0|1)*|110110101101010010101(0|1)*|110110101101010010110(0|1)*|110110101101010010111(0|1)*|110110101101010011000(0|1)*|110110101101010011010(0|1)*|110110101101010011011(0|1)*|110110101101010011100(0|1)*|110110101101010011101(0|1)*|110110101101010011110(0|1)*|110110101101010011111(0|1)*|1101111010100100(0|1)*|110111101010010000000(0|1)*|110111101010010000001(0|1)*|110111101010010000010(0|1)*|110111101010010000011(0|1)*|110111101010010000100(0|1)*|110111101010010000101(0|1)*|110111101010010000110(0|1)*|110111101010010000111(0|1)*|110111101010010001000(0|1)*|110111101010010001001(0|1)*|110111101010010001010(0|1)*|110111101010010001011(0|1)*|110111101010010001100(0|1)*|110111101010010001101(0|1)*|110111101010010001110(0|1)*|110111101010010001111(0|1)*|110111101010010010000(0|1)*|110111101010010010001(0|1)*|110111101010010010010(0|1)*|110111101010010010011(0|1)*|110111101010010010100(0|1)*|110111101010010010101(0|1)*|110111101010010010110(0|1)*|110111101010010010111(0|1)*|110111101010010011000(0|1)*|110111101010010011001(0|1)*|110111101010010011010(0|1)*|110111101010010011011(0|1)*|110111101010010011100(0|1)*|110111101010010011101(0|1)*|110111101010010011110(0|1)*|110111101010010011111(0|1)*|11011110101001010(0|1)*|110111101010010100000(0|1)*|110111101010010100001(0|1)*|110111101010010100010(0|1)*|110111101010010100011(0|1)*|110111101010010100100(0|1)*|110111101010010100101(0|1)*|110111101010010100110(0|1)*|110111101010010100111(0|1)*|110111101010010101000(0|1)*|110111101010010101001(0|1)*|110111101010010101010(0|1)*|110111101010010101011(0|1)*|110111101010010101100(0|1)*|110111101010010101101(0|1)*|110111101010010101110(0|1)*|110111101010010101111(0|1)*)", 317 { "GNVPN-0001-PAD(001110101001001010(0|1)*|001110101001001010000(0|1)*|001110101001001010001(0|1)*|001110101001001010010(0|1)*|001110101001001010011(0|1)*|001110101001001010100(0|1)*|001110101001001010101(0|1)*|001110101001001010110(0|1)*|001110101001001010111(0|1)*|0011101010110110(0|1)*|001110101011011000000(0|1)*|001110101011011000001(0|1)*|001110101011011000010(0|1)*|001110101011011000011(0|1)*|001110101011011000100(0|1)*|001110101011011000101(0|1)*|001110101011011000110(0|1)*|001110101011011000111(0|1)*|001110101011011001000(0|1)*|001110101011011001001(0|1)*|001110101011011001010(0|1)*|001110101011011001011(0|1)*|001110101011011001100(0|1)*|001110101011011001101(0|1)*|001110101011011001110(0|1)*|001110101011011001111(0|1)*|001110101011011010000(0|1)*|001110101011011010001(0|1)*|001110101011011010010(0|1)*|001110101011011010011(0|1)*|001110101011011010100(0|1)*|001110101011011010101(0|1)*|001110101011011010110(0|1)*|001110101011011010111(0|1)*|001110101011011011000(0|1)*|001110101011011011001(0|1)*|001110101011011011010(0|1)*|001110101011011011011(0|1)*|001110101011011011100(0|1)*|001110101011011011101(0|1)*|001110101011011011110(0|1)*|001110101011011011111(0|1)*|0011101110111101(0|1)*|001110111011110100000(0|1)*|001110111011110100001(0|1)*|001110111011110100010(0|1)*|001110111011110100011(0|1)*|001110111011110100100(0|1)*|001110111011110100101(0|1)*|001110111011110100110(0|1)*|001110111011110100111(0|1)*|001110111011110101000(0|1)*|001110111011110101001(0|1)*|001110111011110101010(0|1)*|001110111011110101011(0|1)*|001110111011110101100(0|1)*|001110111011110101101(0|1)*|001110111011110101110(0|1)*|001110111011110101111(0|1)*|001110111011110110000(0|1)*|001110111011110110001(0|1)*|001110111011110110010(0|1)*|001110111011110110011(0|1)*|001110111011110110100(0|1)*|001110111011110110101(0|1)*|001110111011110110110(0|1)*|001110111011110110111(0|1)*|001110111011110111000(0|1)*|001110111011110111001(0|1)*|001110111011110111010(0|1)*|001110111011110111011(0|1)*|001110111011110111100(0|1)*|001110111011110111101(0|1)*|001110111011110111110(0|1)*|0111010001010110(0|1)*|011101000101011000000(0|1)*|011101000101011000001(0|1)*|011101000101011000010(0|1)*|011101000101011000011(0|1)*|011101000101011000100(0|1)*|011101000101011000101(0|1)*|011101000101011000110(0|1)*|011101000101011000111(0|1)*|011101000101011001000(0|1)*|011101000101011001001(0|1)*|011101000101011001010(0|1)*|011101000101011001011(0|1)*|011101000101011001100(0|1)*|011101000101011001101(0|1)*|011101000101011001110(0|1)*|011101000101011001111(0|1)*|011101000101011010000(0|1)*|011101000101011010001(0|1)*|011101000101011010010(0|1)*|011101000101011010011(0|1)*|011101000101011010100(0|1)*|011101000101011010101(0|1)*|011101000101011010110(0|1)*|011101000101011010111(0|1)*|011101000101011011000(0|1)*|011101000101011011001(0|1)*|011101000101011011010(0|1)*|011101000101011011011(0|1)*|011101000101011011100(0|1)*|011101000101011011101(0|1)*|011101000101011011110(0|1)*|011101000101011011111(0|1)*|0111010001010111(0|1)*|011101000101011100000(0|1)*|011101000101011100001(0|1)*|011101000101011100010(0|1)*|011101000101011100011(0|1)*|011101000101011100100(0|1)*|011101000101011100101(0|1)*|011101000101011100110(0|1)*|011101000101011100111(0|1)*|011101000101011101000(0|1)*|011101000101011101001(0|1)*|011101000101011101010(0|1)*|011101000101011101011(0|1)*|011101000101011101100(0|1)*|011101000101011101101(0|1)*|011101000101011101110(0|1)*|011101000101011101111(0|1)*|011101000101011110000(0|1)*|011101000101011110001(0|1)*|011101000101011110010(0|1)*|011101000101011110011(0|1)*|011101000101011110100(0|1)*|011101000101011110101(0|1)*|011101000101011110110(0|1)*|011101000101011110111(0|1)*|011101000101011111000(0|1)*|011101000101011111001(0|1)*|011101000101011111010(0|1)*|011101000101011111011(0|1)*|011101000101011111100(0|1)*|011101000101011111101(0|1)*|011101000101011111110(0|1)*|011101000101011111111(0|1)*|0111010001011000(0|1)*|011101000101100000000(0|1)*|011101000101100000001(0|1)*|011101000101100000010(0|1)*|011101000101100000011(0|1)*|011101000101100000100(0|1)*|011101000101100000101(0|1)*|011101000101100000110(0|1)*|011101000101100000111(0|1)*|011101000101100001000(0|1)*|011101000101100001001(0|1)*|011101000101100001010(0|1)*|011101000101100001011(0|1)*|011101000101100001100(0|1)*|011101000101100001101(0|1)*|011101000101100001110(0|1)*|011101000101100001111(0|1)*|011101000101100010000(0|1)*|011101000101100010001(0|1)*|011101000101100010010(0|1)*|011101000101100010011(0|1)*|011101000101100010100(0|1)*|011101000101100010101(0|1)*|011101000101100010110(0|1)*|011101000101100010111(0|1)*|011101000101100011000(0|1)*|011101000101100011001(0|1)*|011101000101100011010(0|1)*|011101000101100011011(0|1)*|011101000101100011100(0|1)*|011101000101100011101(0|1)*|011101000101100011110(0|1)*|011101000101100011111(0|1)*|01110100010110010(0|1)*|011101000101100100000(0|1)*|011101000101100100001(0|1)*|011101000101100100010(0|1)*|011101000101100100011(0|1)*|011101000101100100100(0|1)*|011101000101100100101(0|1)*|011101000101100100110(0|1)*|011101000101100100111(0|1)*|011101000101100101000(0|1)*|011101000101100101001(0|1)*|011101000101100101010(0|1)*|011101000101100101011(0|1)*|011101000101100101100(0|1)*|011101000101100101101(0|1)*|011101000101100101110(0|1)*|011101000101100101111(0|1)*|011101000101100101111000(0|1)*|1100101010011100(0|1)*|110010101001110000000(0|1)*|110010101001110000000001(0|1)*|110010101001110000000010(0|1)*|110010101001110000000110(0|1)*|110010101001110000001(0|1)*|110010101001110000001000(0|1)*|110010101001110000001001(0|1)*|110010101001110000001010(0|1)*|110010101001110000001011(0|1)*|110010101001110000001101(0|1)*|110010101001110000001110(0|1)*|110010101001110000010(0|1)*|110010101001110000011(0|1)*|110010101001110000100(0|1)*|110010101001110000101(0|1)*|110010101001110000110(0|1)*|110010101001110000111(0|1)*|110010101001110001000(0|1)*|110010101001110001001(0|1)*|110010101001110001010(0|1)*|110010101001110001011(0|1)*|110010101001110001100(0|1)*|110010101001110001101(0|1)*|110010101001110001110(0|1)*|110010101001110001111(0|1)*|110010101001110010000(0|1)*|110010101001110010001(0|1)*|110010101001110010010(0|1)*|110010101001110010011(0|1)*|110010101001110010100(0|1)*|110010101001110010101(0|1)*|110010101001110010110(0|1)*|110010101001110010111(0|1)*|110010101001110011000(0|1)*|110010101001110011001(0|1)*|110010101001110011010(0|1)*|110010101001110011011(0|1)*|110010101001110011100(0|1)*|110010101001110011101(0|1)*|110010101001110011110(0|1)*|110010101001110011111(0|1)*|1101101010111010(0|1)*|110110101011101000000(0|1)*|110110101011101000000001(0|1)*|110110101011101000001000(0|1)*|110110101011101000001001(0|1)*|110110101011101000001010(0|1)*|110110101011101000001011(0|1)*|110110101011101000001100(0|1)*|110110101011101000001110(0|1)*|110110101011101000001111(0|1)*|110110101011101000010(0|1)*|110110101011101000010000(0|1)*|110110101011101000010001(0|1)*|110110101011101000010010(0|1)*|110110101011101000010011(0|1)*|110110101011101000011(0|1)*|110110101011101000100(0|1)*|110110101011101000101(0|1)*|110110101011101000110(0|1)*|110110101011101000111(0|1)*|110110101011101001000(0|1)*|110110101011101001001(0|1)*|110110101011101001010(0|1)*|110110101011101001011(0|1)*|110110101011101001100(0|1)*|110110101011101001101(0|1)*|110110101011101001110(0|1)*|110110101011101001111(0|1)*|110110101011101010000(0|1)*|110110101011101010001(0|1)*|110110101011101010010(0|1)*|110110101011101010011(0|1)*|110110101011101010100(0|1)*|110110101011101010101(0|1)*|110110101011101010110(0|1)*|110110101011101010111(0|1)*|110110101011101011000(0|1)*|110110101011101011001(0|1)*|110110101011101011010(0|1)*|110110101011101011011(0|1)*|110110101011101011100(0|1)*|110110101011101011101(0|1)*|110110101011101011110(0|1)*|110110101011101011111(0|1)*|1101101011010100(0|1)*|110110101101010000000(0|1)*|110110101101010000001(0|1)*|110110101101010000010(0|1)*|110110101101010000011(0|1)*|110110101101010000100(0|1)*|110110101101010000101(0|1)*|110110101101010000110(0|1)*|110110101101010000111(0|1)*|110110101101010001000(0|1)*|110110101101010001001(0|1)*|110110101101010001010(0|1)*|110110101101010001011(0|1)*|110110101101010001100(0|1)*|110110101101010001101(0|1)*|110110101101010001110(0|1)*|110110101101010001111(0|1)*|110110101101010010000(0|1)*|110110101101010010001(0|1)*|110110101101010010010(0|1)*|110110101101010010011(0|1)*|110110101101010010100(0|1)*|1101101011010100101000(0|1)*|110110101101010010101(0|1)*|110110101101010010110(0|1)*|110110101101010010111(0|1)*|110110101101010011000(0|1)*|110110101101010011010(0|1)*|110110101101010011011(0|1)*|110110101101010011100(0|1)*|110110101101010011101(0|1)*|110110101101010011110(0|1)*|110110101101010011111(0|1)*|1101111010100100(0|1)*|110111101010010000000(0|1)*|110111101010010000001(0|1)*|110111101010010000010(0|1)*|110111101010010000011(0|1)*|110111101010010000100(0|1)*|110111101010010000101(0|1)*|110111101010010000110(0|1)*|110111101010010000111(0|1)*|110111101010010001000(0|1)*|110111101010010001001(0|1)*|110111101010010001010(0|1)*|110111101010010001011(0|1)*|110111101010010001100(0|1)*|110111101010010001101(0|1)*|110111101010010001110(0|1)*|110111101010010001111(0|1)*|110111101010010010000(0|1)*|110111101010010010001(0|1)*|110111101010010010010(0|1)*|110111101010010010011(0|1)*|110111101010010010100(0|1)*|110111101010010010101(0|1)*|110111101010010010110(0|1)*|110111101010010010111(0|1)*|110111101010010011000(0|1)*|110111101010010011001(0|1)*|110111101010010011010(0|1)*|110111101010010011011(0|1)*|110111101010010011100(0|1)*|110111101010010011101(0|1)*|110111101010010011110(0|1)*|110111101010010011111(0|1)*|11011110101001010(0|1)*|110111101010010100000(0|1)*|110111101010010100001(0|1)*|110111101010010100010(0|1)*|110111101010010100011(0|1)*|110111101010010100100(0|1)*|110111101010010100101(0|1)*|110111101010010100110(0|1)*|110111101010010100111(0|1)*|110111101010010101000(0|1)*|110111101010010101001(0|1)*|110111101010010101010(0|1)*|110111101010010101011(0|1)*|110111101010010101100(0|1)*|110111101010010101101(0|1)*|110111101010010101110(0|1)*|110111101010010101111(0|1)*)",
320 2, 318 2,
321 {"GNVPN-0001-PAD1101111010100101011101010101010101", 319 { "GNVPN-0001-PAD1101111010100101011101010101010101",
322 "GNVPN-0001-PAD11001010100111000101101010101"}, 320 "GNVPN-0001-PAD11001010100111000101101010101" },
323 {match, match}} 321 { match, match } }
324 }; 322 };
325 323
326 check_nfa = 0; 324 check_nfa = 0;
@@ -328,39 +326,39 @@ main (int argc, char *argv[])
328 check_rand = 0; 326 check_rand = 0;
329 327
330 for (i = 0; i < 19; i++) 328 for (i = 0; i < 19; i++)
331 {
332 if (0 != regcomp (&rx, rxstr[i].regex, REG_EXTENDED))
333 { 329 {
334 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 330 if (0 != regcomp(&rx, rxstr[i].regex, REG_EXTENDED))
335 "Could not compile regex using regcomp()\n"); 331 {
336 return 1; 332 GNUNET_log(GNUNET_ERROR_TYPE_ERROR,
333 "Could not compile regex using regcomp()\n");
334 return 1;
335 }
336
337 /* NFA test */
338 a = REGEX_INTERNAL_construct_nfa(rxstr[i].regex, strlen(rxstr[i].regex));
339 check_nfa += test_automaton(a, &rx, &rxstr[i]);
340 REGEX_INTERNAL_automaton_destroy(a);
341
342 /* DFA test */
343 a = REGEX_INTERNAL_construct_dfa(rxstr[i].regex, strlen(rxstr[i].regex), 0);
344 check_dfa += test_automaton(a, &rx, &rxstr[i]);
345 check_proof = GNUNET_strdup(REGEX_INTERNAL_get_canonical_regex(a));
346 REGEX_INTERNAL_automaton_destroy(a);
347
348 a = REGEX_INTERNAL_construct_dfa(check_proof, strlen(check_proof), 0);
349 check_dfa += test_automaton(a, &rx, &rxstr[i]);
350 REGEX_INTERNAL_automaton_destroy(a);
351 if (0 != check_dfa)
352 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "check_proof: %s\n", check_proof);
353 GNUNET_free_non_null(check_proof);
354
355 regfree(&rx);
337 } 356 }
338 357
339 /* NFA test */
340 a = REGEX_INTERNAL_construct_nfa (rxstr[i].regex, strlen (rxstr[i].regex));
341 check_nfa += test_automaton (a, &rx, &rxstr[i]);
342 REGEX_INTERNAL_automaton_destroy (a);
343
344 /* DFA test */
345 a = REGEX_INTERNAL_construct_dfa (rxstr[i].regex, strlen (rxstr[i].regex), 0);
346 check_dfa += test_automaton (a, &rx, &rxstr[i]);
347 check_proof = GNUNET_strdup (REGEX_INTERNAL_get_canonical_regex (a));
348 REGEX_INTERNAL_automaton_destroy (a);
349
350 a = REGEX_INTERNAL_construct_dfa (check_proof, strlen (check_proof), 0);
351 check_dfa += test_automaton (a, &rx, &rxstr[i]);
352 REGEX_INTERNAL_automaton_destroy (a);
353 if (0 != check_dfa)
354 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "check_proof: %s\n", check_proof);
355 GNUNET_free_non_null (check_proof);
356
357 regfree (&rx);
358 }
359
360 /* Random tests */ 358 /* Random tests */
361 srand (time (NULL)); 359 srand(time(NULL));
362 for (i = 0; i < 20; i++) 360 for (i = 0; i < 20; i++)
363 check_rand += test_random (50, 60, 10); 361 check_rand += test_random(50, 60, 10);
364 362
365 return check_nfa + check_dfa + check_rand; 363 return check_nfa + check_dfa + check_rand;
366} 364}