sanitizer_common_test.cc revision 67f5c81639ab0ba0d7d9048b7206b424b577c90b
1//===-- sanitizer_common_test.cc ------------------------------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file is a part of ThreadSanitizer/AddressSanitizer runtime. 11// 12//===----------------------------------------------------------------------===// 13#include "sanitizer_common/sanitizer_common.h" 14#include "sanitizer_common/sanitizer_libc.h" 15#include "gtest/gtest.h" 16 17namespace __sanitizer { 18 19static bool IsSorted(const uptr *array, uptr n) { 20 for (uptr i = 1; i < n; i++) { 21 if (array[i] < array[i - 1]) return false; 22 } 23 return true; 24} 25 26TEST(SanitizerCommon, SortTest) { 27 uptr array[100]; 28 uptr n = 100; 29 // Already sorted. 30 for (uptr i = 0; i < n; i++) { 31 array[i] = i; 32 } 33 SortArray(array, n); 34 EXPECT_TRUE(IsSorted(array, n)); 35 // Reverse order. 36 for (uptr i = 0; i < n; i++) { 37 array[i] = n - 1 - i; 38 } 39 SortArray(array, n); 40 EXPECT_TRUE(IsSorted(array, n)); 41 // Mixed order. 42 for (uptr i = 0; i < n; i++) { 43 array[i] = (i % 2 == 0) ? i : n - 1 - i; 44 } 45 SortArray(array, n); 46 EXPECT_TRUE(IsSorted(array, n)); 47 // All equal. 48 for (uptr i = 0; i < n; i++) { 49 array[i] = 42; 50 } 51 SortArray(array, n); 52 EXPECT_TRUE(IsSorted(array, n)); 53 // All but one sorted. 54 for (uptr i = 0; i < n - 1; i++) { 55 array[i] = i; 56 } 57 array[n - 1] = 42; 58 SortArray(array, n); 59 EXPECT_TRUE(IsSorted(array, n)); 60 // Minimal case - sort three elements. 61 array[0] = 1; 62 array[1] = 0; 63 SortArray(array, 2); 64 EXPECT_TRUE(IsSorted(array, 2)); 65} 66 67TEST(SanitizerCommon, MmapAlignedOrDie) { 68 uptr PageSize = GetPageSizeCached(); 69 for (uptr size = 1; size <= 32; size *= 2) { 70 for (uptr alignment = 1; alignment <= 32; alignment *= 2) { 71 for (int iter = 0; iter < 100; iter++) { 72 uptr res = (uptr)MmapAlignedOrDie( 73 size * PageSize, alignment * PageSize, "MmapAlignedOrDieTest"); 74 EXPECT_EQ(0U, res % (alignment * PageSize)); 75 memset((void*)res, 1, size * PageSize); 76 UnmapOrDie((void*)res, size * PageSize); 77 } 78 } 79 } 80} 81 82#ifdef __linux__ 83TEST(SanitizerCommon, SanitizerSetThreadName) { 84 const char *names[] = { 85 "0123456789012", 86 "01234567890123", 87 "012345678901234", // Larger names will be truncated on linux. 88 }; 89 90 for (size_t i = 0; i < ARRAY_SIZE(names); i++) { 91 EXPECT_TRUE(SanitizerSetThreadName(names[i])); 92 char buff[100]; 93 EXPECT_TRUE(SanitizerGetThreadName(buff, sizeof(buff) - 1)); 94 EXPECT_EQ(0, internal_strcmp(buff, names[i])); 95 } 96} 97#endif 98 99} // namespace sanitizer 100