Merge "string_test: Adding memcpy test for overlapping mem"
diff --git a/app/stringtests/string_tests.c b/app/stringtests/string_tests.c
index 6664346..d3a4df9 100644
--- a/app/stringtests/string_tests.c
+++ b/app/stringtests/string_tests.c
@@ -133,6 +133,40 @@
}
}
+static void validate_memcpy_overlap(void)
+{
+ size_t srcalign, dstalign, size;
+ const size_t maxsize = 256;
+ int comp;
+
+ printf("testing memcpy for correctness in overlap cases\n");
+
+ for (dstalign = 0; dstalign < 64; dstalign++) {
+ for (size = 0; size < maxsize; size++) {
+
+ fillbuf(src, maxsize * 2, 567);
+ fillbuf(src2, maxsize * 2, 567);
+
+ /* Case one will check cpy memory is the same - fwd*/
+ memcpy(src + dstalign, src, size);
+ comp = memcmp(src + dstalign, src2, size);
+ if (comp != 0) {
+ printf("ERROR (Case1): dstalign %zu, size %zu, ret %d\n", dstalign, size, comp);
+ }
+
+ fillbuf(src, maxsize * 2, 8588485);
+ fillbuf(src2, maxsize * 2, 8588485);
+
+ /* Case two will check cpy memory is the same - bkwd*/
+ memcpy(src, src + dstalign, size);
+ comp = memcmp(src, src2 + dstalign, size);
+ if (comp != 0) {
+ printf("ERROR (Case2): dstalign %zu, size %zu, ret %d\n", dstalign, size, comp);
+ }
+ }
+ }
+}
+
static time_t bench_memset_routine(void *memset_routine(void *, int, size_t), size_t dstalign)
{
int i;
@@ -218,6 +252,8 @@
validate_memcpy();
} else if (!strcmp(argv[2].str, "memset")) {
validate_memset();
+ } else if (!strcmp(argv[2].str, "memcpy_overlap")) {
+ validate_memcpy_overlap();
}
} else if (!strcmp(argv[1].str, "bench")) {
if (!strcmp(argv[2].str, "memcpy")) {