Home | History | Annotate | Download | only in tests
      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 "gtest/gtest.h"
     15 
     16 namespace __sanitizer {
     17 
     18 static bool IsSorted(const uptr *array, uptr n) {
     19   for (uptr i = 1; i < n; i++) {
     20     if (array[i] < array[i - 1]) return false;
     21   }
     22   return true;
     23 }
     24 
     25 TEST(SanitizerCommon, SortTest) {
     26   uptr array[100];
     27   uptr n = 100;
     28   // Already sorted.
     29   for (uptr i = 0; i < n; i++) {
     30     array[i] = i;
     31   }
     32   SortArray(array, n);
     33   EXPECT_TRUE(IsSorted(array, n));
     34   // Reverse order.
     35   for (uptr i = 0; i < n; i++) {
     36     array[i] = n - 1 - i;
     37   }
     38   SortArray(array, n);
     39   EXPECT_TRUE(IsSorted(array, n));
     40   // Mixed order.
     41   for (uptr i = 0; i < n; i++) {
     42     array[i] = (i % 2 == 0) ? i : n - 1 - i;
     43   }
     44   SortArray(array, n);
     45   EXPECT_TRUE(IsSorted(array, n));
     46   // All equal.
     47   for (uptr i = 0; i < n; i++) {
     48     array[i] = 42;
     49   }
     50   SortArray(array, n);
     51   EXPECT_TRUE(IsSorted(array, n));
     52   // All but one sorted.
     53   for (uptr i = 0; i < n - 1; i++) {
     54     array[i] = i;
     55   }
     56   array[n - 1] = 42;
     57   SortArray(array, n);
     58   EXPECT_TRUE(IsSorted(array, n));
     59   // Minimal case - sort three elements.
     60   array[0] = 1;
     61   array[1] = 0;
     62   SortArray(array, 2);
     63   EXPECT_TRUE(IsSorted(array, 2));
     64 }
     65 
     66 }  // namespace sanitizer
     67