diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2012-10-14 00:05:10 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2012-10-14 00:05:10 -0700 |
commit | 294f3cbdeec84b1e347e8fd8f8954a6e2391d879 (patch) | |
tree | adc2f3fda5b2708a547dcf77c912116e18f40b3b | |
parent | b8d7c0968c095d25fded0e2dfea1a16b1fd42911 (diff) | |
download | glibc-hjl/pr14716.tar.gz glibc-hjl/pr14716.tar.xz glibc-hjl/pr14716.zip |
Add a testcase for BZ #14716 hjl/pr14716
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | string/test-memmem.c | 35 |
2 files changed, 40 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog index 9343ce283a..78be918c6e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2012-10-14 H.J. Lu <hongjiu.lu@intel.com> + + [BZ #14716] + * string/test-memmem.c (check_result): New function. + (do_one_test): Use it. + (check1): New function. + (test_main): Use it. + 2012-10-12 H.J. Lu <hongjiu.lu@intel.com> * sysdeps/x86/bits/byteswap.h: Include <bits/types.h>. diff --git a/string/test-memmem.c b/string/test-memmem.c index 4076029d1b..5f32a0e791 100644 --- a/string/test-memmem.c +++ b/string/test-memmem.c @@ -56,8 +56,8 @@ simple_memmem (const void *haystack, size_t haystack_len, const void *needle, return NULL; } -static void -do_one_test (impl_t *impl, const void *haystack, size_t haystack_len, +static int +check_result (impl_t *impl, const void *haystack, size_t haystack_len, const void *needle, size_t needle_len, const void *expected) { void *res; @@ -68,9 +68,20 @@ do_one_test (impl_t *impl, const void *haystack, size_t haystack_len, error (0, 0, "Wrong result in function %s %p %p", impl->name, res, expected); ret = 1; - return; + return -1; } + return 0; +} + +static void +do_one_test (impl_t *impl, const void *haystack, size_t haystack_len, + const void *needle, size_t needle_len, const void *expected) +{ + if (check_result (impl, haystack, haystack_len, needle, needle_len, + expected) < 0) + return; + if (HP_TIMING_AVAIL) { hp_timing_t start __attribute ((unused)); @@ -145,6 +156,22 @@ do_random_tests (void) } } +static void +check1 (void) +{ + + const char search_buf_data[5] = { 0x56, 0x34, 0x12, 0x78, 0x78 }; + const char pattern[2] = { 0x78, 0x56 }; + void *search_buf = (void *) buf1 + page_size - sizeof search_buf_data; + void *exp_result; + + memcpy (search_buf, search_buf_data, sizeof search_buf_data); + exp_result = simple_memmem (search_buf, sizeof search_buf_data, + pattern, sizeof pattern); + FOR_EACH_IMPL (impl, 0) + check_result (impl, search_buf, sizeof search_buf_data, + pattern, sizeof pattern, exp_result); +} static const char *const strs[] = { @@ -161,6 +188,8 @@ test_main (void) test_init (); + check1 (); + printf ("%23s", ""); FOR_EACH_IMPL (impl, 0) printf ("\t%s", impl->name); |