X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fregex%2Fperf-regex.c;h=bf19a2bff7953cdc527eefb9c9788a315d7b8282;hb=c0101989bb0864a3688f57370e712c91c14ab1cd;hp=72da6f2708619a65ebb8f7bc72bd88e3e502a89e;hpb=d505d8c29ee0900bdcf08bab66254384f659fd14;p=oweals%2Fgnunet.git diff --git a/src/regex/perf-regex.c b/src/regex/perf-regex.c index 72da6f270..bf19a2bff 100644 --- a/src/regex/perf-regex.c +++ b/src/regex/perf-regex.c @@ -19,14 +19,15 @@ */ /** - * @file regex/prof-regex.c + * @file src/regex/perf-regex.c * @brief Test how long it takes to create a automaton from a string regex. * @author Bartlomiej Polot */ #include #include #include "platform.h" -#include "gnunet_regex_lib.h" +#include "regex_internal_lib.h" +#include "regex_test_lib.h" static const char *exe; @@ -37,7 +38,44 @@ usage(void) } /** - * The main function to obtain peer information. + * Iterator callback function. + * + * @param cls closure. + * @param key hash for current state. + * @param proof proof for current state. + * @param accepting GNUNET_YES if this is an accepting state, GNUNET_NO if not. + * @param num_edges number of edges leaving current state. + * @param edges edges leaving current state. + */ +static void +iter (void *cls, + const struct GNUNET_HashCode *key, + const char *proof, + int accepting, + unsigned int num_edges, + const struct REGEX_BLOCK_Edge *edges) +{ + unsigned int i; + + printf ("%s: %s\n", GNUNET_h2s (key), accepting ? "ACCEPTING" : ""); + printf (" proof: %s\n", proof); + for (i = 0; i < num_edges; i++) + { + printf (" %s: %s\n", edges[i].label, GNUNET_h2s (&edges[i].destination)); + } +} + +static void +print_dfa (struct REGEX_INTERNAL_Automaton* dfa) +{ + REGEX_INTERNAL_iterate_all_edges (dfa, iter, NULL); +} + +/** + * The main function of the regex performace test. + * + * Read a set of regex from a file, combine them and create a DFA from the + * resulting combined regex. * * @param argc number of arguments from the command line * @param argv command line arguments @@ -46,38 +84,41 @@ usage(void) int main (int argc, char *const *argv) { - FILE *f; - struct GNUNET_REGEX_Automaton* dfa; - long size; + struct REGEX_INTERNAL_Automaton* dfa; + char **regexes; + char *buffer; char *regex; int compression; + long size; + GNUNET_log_setup ("perf-regex", "DEBUG", NULL); exe = argv[0]; if (3 != argc) { usage(); return 1; } - f = fopen (argv[1], "r"); - if (NULL == f) + regexes = REGEX_TEST_read_from_file (argv[1]); + + if (NULL == regexes) { - fprintf (stderr, "Can't open file %s\n", argv[1]); usage(); return 2; } - fseek (f, 0, SEEK_END); - size = ftell (f); - fseek (f, 0, SEEK_SET); - regex = GNUNET_malloc (size); - if (fread (regex, sizeof(char), size, f) != size) - { - fprintf (stderr, "Can't read file %s\n", argv[1]); - usage(); - return 3; - } + buffer = REGEX_TEST_combine (regexes); + + GNUNET_asprintf (®ex, "GNVPN-0001-PAD(%s)(0|1)*", buffer); + size = strlen (regex); + + fprintf (stderr, "Combined regex (%ld bytes):\n%s\n", size, regex); + // return 0; + compression = atoi (argv[2]); - dfa = GNUNET_REGEX_construct_dfa (regex, size, compression); - GNUNET_REGEX_automaton_destroy (dfa); + dfa = REGEX_INTERNAL_construct_dfa (regex, size, compression); + print_dfa (dfa); + REGEX_INTERNAL_automaton_destroy (dfa); + GNUNET_free (buffer); + REGEX_TEST_free_from_file (regexes); GNUNET_free (regex); return 0; }