diff options
author | Christopher Ferris <cferris@google.com> | 2014-06-05 18:10:59 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2014-06-05 18:10:59 +0000 |
commit | 8ac8278b0a673e30698ba4d81f495165b66acbd5 (patch) | |
tree | 4496b97573a1d8c1e1361a76aabcac63c90513c6 /tests/string_test.cpp | |
parent | 431aa4dc9282e23231ba9243f43fd3d49b5f88b3 (diff) | |
parent | fce861498c8c4720c6ad2475a73bb4c3e55d6948 (diff) | |
download | android_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.cpp | 29 |
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); |