From bd82d030011cd8b9655e5ded6b6df9343b42a6bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Frings-F=C3=BCrst?= Date: Wed, 4 Feb 2015 14:09:54 +0100 Subject: Imported Upstream version 3.22 --- src/tc-memmem.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 src/tc-memmem.c (limited to 'src/tc-memmem.c') diff --git a/src/tc-memmem.c b/src/tc-memmem.c new file mode 100644 index 0000000..9c59c7f --- /dev/null +++ b/src/tc-memmem.c @@ -0,0 +1,73 @@ +/* + * speed test HX_memmem + * Copyright Jan Engelhardt + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the WTF Public License version 2 or + * (at your option) any later version. + */ +#include +#include +#include +#include +#include +#include + +static unsigned int size = 1048576 * 64; +static const char filler_text[] = + "Slhrdlu cringle tongle flonging blobbity bleep blingmangl"; + +static void long_scan(void) +{ + struct timespec start, stop, delta; + char *filler2, *p; + + filler2 = malloc(size); + if (filler2 == NULL) + abort(); + memset(filler2, 'l', size); + filler2[size-2] = 'a'; + + clock_gettime(CLOCK_THREAD_CPUTIME_ID, &start); + p = HX_memmem(filler2, strlen(filler2), "al", 2); + clock_gettime(CLOCK_THREAD_CPUTIME_ID, &stop); + printf("long_scan: filler2=%p p=%p\n", filler2, p); + HX_timespec_sub(&delta, &stop, &start); + printf("long_scan: " HX_TIMESPEC_FMT "\n", HX_TIMESPEC_EXP(&delta)); +} + +int main(void) +{ + unsigned int i; + char *haystack; + struct timespec start, stop, delta; + + if (HX_init() <= 0) + abort(); + haystack = malloc(size); + if (haystack == NULL) + abort(); + memset(haystack, 'A', size); + haystack[size-1] = haystack[size-2] = 'Z'; + printf("Init done\n"); + printf("Start=%p End=%p\n", filler_text, + filler_text + ARRAY_SIZE(filler_text)); + printf("%p\n", HX_memmem(filler_text, strlen(filler_text), "nangl", 5)); + printf("%p\n", HX_memmem(filler_text, strlen(filler_text), "angl", 4)); + printf("%p\n", HX_memmem(filler_text, strlen(filler_text), "ngl", 3)); + printf("%p\n", HX_memmem(filler_text, strlen(filler_text), "ngl", 3)); + + long_scan(); + + for (i = 0; i < 10; ++i) { + printf("Search length %u...", i); + clock_gettime(CLOCK_THREAD_CPUTIME_ID, &start); + HX_memmem(haystack, size, haystack + size - i, i); + clock_gettime(CLOCK_THREAD_CPUTIME_ID, &stop); + HX_timespec_sub(&delta, &stop, &start); + printf(HX_TIMESPEC_FMT "\n", HX_TIMESPEC_EXP(&delta)); + } + + HX_exit(); + return EXIT_SUCCESS; +} -- cgit v1.2.3