aboutsummaryrefslogtreecommitdiffstats
path: root/tests/string_test.cpp
diff options
context:
space:
mode:
authorChristopher Ferris <cferris@google.com>2014-06-05 18:10:59 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2014-06-05 18:10:59 +0000
commit8ac8278b0a673e30698ba4d81f495165b66acbd5 (patch)
tree4496b97573a1d8c1e1361a76aabcac63c90513c6 /tests/string_test.cpp
parent431aa4dc9282e23231ba9243f43fd3d49b5f88b3 (diff)
parentfce861498c8c4720c6ad2475a73bb4c3e55d6948 (diff)
downloadandroid_bionic-8ac8278b0a673e30698ba4d81f495165b66acbd5.tar.gz
android_bionic-8ac8278b0a673e30698ba4d81f495165b66acbd5.tar.bz2
android_bionic-8ac8278b0a673e30698ba4d81f495165b66acbd5.zip
Merge "Fix for slm-tuned memmove (both 32- and 64-bit)."
Diffstat (limited to 'tests/string_test.cpp')
-rw-r--r--tests/string_test.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/tests/string_test.cpp b/tests/string_test.cpp
index f17e575dd..c62f43bf6 100644
--- a/tests/string_test.cpp
+++ b/tests/string_test.cpp
@@ -909,6 +909,35 @@ TEST(string, memmove) {
}
}
+TEST(string, memmove_cache_size) {
+ size_t len = 600000;
+ int max_alignment = 31;
+ int alignments[] = {0, 5, 11, 29, 30};
+ char* ptr = reinterpret_cast<char*>(malloc(sizeof(char) * len));
+ char* ptr1 = reinterpret_cast<char*>(malloc(2 * sizeof(char) * len));
+ char* glob_ptr2 = reinterpret_cast<char*>(malloc(2 * sizeof(char) * len + max_alignment));
+ size_t pos = 64;
+
+ ASSERT_TRUE(ptr != NULL);
+ ASSERT_TRUE(ptr1 != NULL);
+ ASSERT_TRUE(glob_ptr2 != NULL);
+
+ for (int i = 0; i < 5; i++) {
+ char* ptr2 = glob_ptr2 + alignments[i];
+ memset(ptr1, random() & 255, 2 * len);
+ memset(ptr1, random() & 255, len);
+ memcpy(ptr2, ptr1, 2 * len);
+ memcpy(ptr, ptr1, len);
+ memcpy(ptr1 + pos, ptr, len);
+
+ ASSERT_TRUE(memmove(ptr2 + pos, ptr, len) == ptr2 + pos);
+ ASSERT_EQ(0, memcmp(ptr2, ptr1, 2 * len));
+ }
+ free(ptr);
+ free(ptr1);
+ free(glob_ptr2);
+}
+
static void verify_memmove(char* src_copy, char* dst, char* src, size_t size) {
memset(dst, 0, size);
memcpy(src, src_copy, size);