#include "platform.h"
#include "gnunet_regex_lib.h"
-void key_iterator(void *cls, const GNUNET_HashCode *key, const char *proof,
- int accepting, unsigned int num_edges,
- const struct GNUNET_REGEX_Edge *edges)
+void
+key_iterator (void *cls, const struct GNUNET_HashCode *key, const char *proof,
+ int accepting, unsigned int num_edges,
+ const struct GNUNET_REGEX_Edge *edges)
{
- int i;
+ unsigned int i;
+ int *error = cls;
+
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Iterating... (accepting: %i)\n",
+ accepting);
+
+ if (NULL != proof)
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Proof: %s\n", proof);
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Iterating...\n");
- for (i=0; i<num_edges; i++)
+ if (NULL != key)
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Hash: %s\n", GNUNET_h2s (key));
+
+ for (i = 0; i < num_edges; i++)
{
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Edge %i: %s\n", i, edges[i].label);
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Edge %i: Label: %s Destination: %s\n",
+ i, edges[i].label, GNUNET_h2s (&edges[i].destination));
}
+
+ *error += (GNUNET_OK == GNUNET_REGEX_check_proof (proof, key)) ? 0 : 1;
}
int
NULL);
int error;
- const char *regex;
+ int i;
struct GNUNET_REGEX_Automaton *dfa;
error = 0;
- regex = "ab?(abcd)?";
- dfa = GNUNET_REGEX_construct_dfa (regex, strlen (regex));
- GNUNET_REGEX_automaton_save_graph (dfa, "dfa.dot");
- GNUNET_REGEX_iterate_all_edges (dfa, key_iterator, NULL);
- GNUNET_REGEX_automaton_destroy (dfa);
+ const char *regex[17] = {
+ "ab(c|d)+c*(a(b|c)+d)+(bla)+",
+ "(bla)*",
+ "b(lab)*la",
+ "(ab)*",
+ "ab(c|d)+c*(a(b|c)+d)+(bla)(bla)*",
+ "z(abc|def)?xyz",
+ "1*0(0|1)*",
+ "a*b*",
+ "a+X*y+c|p|R|Z*K*y*R+w|Y*6+n+h*k*w+V*F|W*B*e*",
+ "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)",
+ "abc(1|0)*def",
+ "ab|ac",
+ "(ab)(ab)*",
+ "ab|cd|ef|gh",
+ "a|b|c|d|e|f|g",
+ "(ab)|(ac)",
+ "x*|(0|1|2)(a|b|c|d)"
+ };
+
+ for (i = 0; i < 17; i++)
+ {
+ dfa = GNUNET_REGEX_construct_dfa (regex[i], strlen (regex[i]));
+ GNUNET_REGEX_iterate_all_edges (dfa, key_iterator, &error);
+ GNUNET_REGEX_automaton_destroy (dfa);
+ }
return error;
}