| //===-- sanitizer_common_test.cc ------------------------------------------===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file is a part of ThreadSanitizer/AddressSanitizer runtime. |
| // |
| //===----------------------------------------------------------------------===// |
| #include "sanitizer_common/sanitizer_common.h" |
| #include "gtest/gtest.h" |
| |
| namespace __sanitizer { |
| |
| static bool IsSorted(const uptr *array, uptr n) { |
| for (uptr i = 1; i < n; i++) { |
| if (array[i] < array[i - 1]) return false; |
| } |
| return true; |
| } |
| |
| TEST(SanitizerCommon, SortTest) { |
| uptr array[100]; |
| uptr n = 100; |
| // Already sorted. |
| for (uptr i = 0; i < n; i++) { |
| array[i] = i; |
| } |
| SortArray(array, n); |
| EXPECT_TRUE(IsSorted(array, n)); |
| // Reverse order. |
| for (uptr i = 0; i < n; i++) { |
| array[i] = n - 1 - i; |
| } |
| SortArray(array, n); |
| EXPECT_TRUE(IsSorted(array, n)); |
| // Mixed order. |
| for (uptr i = 0; i < n; i++) { |
| array[i] = (i % 2 == 0) ? i : n - 1 - i; |
| } |
| SortArray(array, n); |
| EXPECT_TRUE(IsSorted(array, n)); |
| // All equal. |
| for (uptr i = 0; i < n; i++) { |
| array[i] = 42; |
| } |
| SortArray(array, n); |
| EXPECT_TRUE(IsSorted(array, n)); |
| // All but one sorted. |
| for (uptr i = 0; i < n - 1; i++) { |
| array[i] = i; |
| } |
| array[n - 1] = 42; |
| SortArray(array, n); |
| EXPECT_TRUE(IsSorted(array, n)); |
| // Minimal case - sort three elements. |
| array[0] = 1; |
| array[1] = 0; |
| SortArray(array, 2); |
| EXPECT_TRUE(IsSorted(array, 2)); |
| } |
| |
| } // namespace sanitizer |