1 //===----------------------------------------------------------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is dual licensed under the MIT and the University of Illinois Open 6 // Source Licenses. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 // <algorithm> 11 12 // template<ForwardIterator Iter> 13 // requires LessThanComparable<Iter::value_type> 14 // bool 15 // is_sorted(Iter first, Iter last); 16 17 #include <algorithm> 18 #include <cassert> 19 20 #include "test_iterators.h" 21 22 #if TEST_STD_VER > 17 23 TEST_CONSTEXPR bool test_constexpr() { 24 int ia[] = {0, 0, 1, 1}; 25 int ib[] = {1, 1, 0, 0}; 26 return std::is_sorted(std::begin(ia), std::end(ia)) 27 && !std::is_sorted(std::begin(ib), std::end(ib)); 28 } 29 #endif 30 31 template <class Iter> 32 void 33 test() 34 { 35 { 36 int a[] = {0}; 37 unsigned sa = sizeof(a) / sizeof(a[0]); 38 assert(std::is_sorted(Iter(a), Iter(a))); 39 assert(std::is_sorted(Iter(a), Iter(a+sa))); 40 } 41 42 { 43 int a[] = {0, 0}; 44 unsigned sa = sizeof(a) / sizeof(a[0]); 45 assert(std::is_sorted(Iter(a), Iter(a+sa))); 46 } 47 { 48 int a[] = {0, 1}; 49 unsigned sa = sizeof(a) / sizeof(a[0]); 50 assert(std::is_sorted(Iter(a), Iter(a+sa))); 51 } 52 { 53 int a[] = {1, 0}; 54 unsigned sa = sizeof(a) / sizeof(a[0]); 55 assert(!std::is_sorted(Iter(a), Iter(a+sa))); 56 } 57 { 58 int a[] = {1, 1}; 59 unsigned sa = sizeof(a) / sizeof(a[0]); 60 assert(std::is_sorted(Iter(a), Iter(a+sa))); 61 } 62 63 { 64 int a[] = {0, 0, 0}; 65 unsigned sa = sizeof(a) / sizeof(a[0]); 66 assert(std::is_sorted(Iter(a), Iter(a+sa))); 67 } 68 { 69 int a[] = {0, 0, 1}; 70 unsigned sa = sizeof(a) / sizeof(a[0]); 71 assert(std::is_sorted(Iter(a), Iter(a+sa))); 72 } 73 { 74 int a[] = {0, 1, 0}; 75 unsigned sa = sizeof(a) / sizeof(a[0]); 76 assert(!std::is_sorted(Iter(a), Iter(a+sa))); 77 } 78 { 79 int a[] = {0, 1, 1}; 80 unsigned sa = sizeof(a) / sizeof(a[0]); 81 assert(std::is_sorted(Iter(a), Iter(a+sa))); 82 } 83 { 84 int a[] = {1, 0, 0}; 85 unsigned sa = sizeof(a) / sizeof(a[0]); 86 assert(!std::is_sorted(Iter(a), Iter(a+sa))); 87 } 88 { 89 int a[] = {1, 0, 1}; 90 unsigned sa = sizeof(a) / sizeof(a[0]); 91 assert(!std::is_sorted(Iter(a), Iter(a+sa))); 92 } 93 { 94 int a[] = {1, 1, 0}; 95 unsigned sa = sizeof(a) / sizeof(a[0]); 96 assert(!std::is_sorted(Iter(a), Iter(a+sa))); 97 } 98 { 99 int a[] = {1, 1, 1}; 100 unsigned sa = sizeof(a) / sizeof(a[0]); 101 assert(std::is_sorted(Iter(a), Iter(a+sa))); 102 } 103 104 { 105 int a[] = {0, 0, 0, 0}; 106 unsigned sa = sizeof(a) / sizeof(a[0]); 107 assert(std::is_sorted(Iter(a), Iter(a+sa))); 108 } 109 { 110 int a[] = {0, 0, 0, 1}; 111 unsigned sa = sizeof(a) / sizeof(a[0]); 112 assert(std::is_sorted(Iter(a), Iter(a+sa))); 113 } 114 { 115 int a[] = {0, 0, 1, 0}; 116 unsigned sa = sizeof(a) / sizeof(a[0]); 117 assert(!std::is_sorted(Iter(a), Iter(a+sa))); 118 } 119 { 120 int a[] = {0, 0, 1, 1}; 121 unsigned sa = sizeof(a) / sizeof(a[0]); 122 assert(std::is_sorted(Iter(a), Iter(a+sa))); 123 } 124 { 125 int a[] = {0, 1, 0, 0}; 126 unsigned sa = sizeof(a) / sizeof(a[0]); 127 assert(!std::is_sorted(Iter(a), Iter(a+sa))); 128 } 129 { 130 int a[] = {0, 1, 0, 1}; 131 unsigned sa = sizeof(a) / sizeof(a[0]); 132 assert(!std::is_sorted(Iter(a), Iter(a+sa))); 133 } 134 { 135 int a[] = {0, 1, 1, 0}; 136 unsigned sa = sizeof(a) / sizeof(a[0]); 137 assert(!std::is_sorted(Iter(a), Iter(a+sa))); 138 } 139 { 140 int a[] = {0, 1, 1, 1}; 141 unsigned sa = sizeof(a) / sizeof(a[0]); 142 assert(std::is_sorted(Iter(a), Iter(a+sa))); 143 } 144 { 145 int a[] = {1, 0, 0, 0}; 146 unsigned sa = sizeof(a) / sizeof(a[0]); 147 assert(!std::is_sorted(Iter(a), Iter(a+sa))); 148 } 149 { 150 int a[] = {1, 0, 0, 1}; 151 unsigned sa = sizeof(a) / sizeof(a[0]); 152 assert(!std::is_sorted(Iter(a), Iter(a+sa))); 153 } 154 { 155 int a[] = {1, 0, 1, 0}; 156 unsigned sa = sizeof(a) / sizeof(a[0]); 157 assert(!std::is_sorted(Iter(a), Iter(a+sa))); 158 } 159 { 160 int a[] = {1, 0, 1, 1}; 161 unsigned sa = sizeof(a) / sizeof(a[0]); 162 assert(!std::is_sorted(Iter(a), Iter(a+sa))); 163 } 164 { 165 int a[] = {1, 1, 0, 0}; 166 unsigned sa = sizeof(a) / sizeof(a[0]); 167 assert(!std::is_sorted(Iter(a), Iter(a+sa))); 168 } 169 { 170 int a[] = {1, 1, 0, 1}; 171 unsigned sa = sizeof(a) / sizeof(a[0]); 172 assert(!std::is_sorted(Iter(a), Iter(a+sa))); 173 } 174 { 175 int a[] = {1, 1, 1, 0}; 176 unsigned sa = sizeof(a) / sizeof(a[0]); 177 assert(!std::is_sorted(Iter(a), Iter(a+sa))); 178 } 179 { 180 int a[] = {1, 1, 1, 1}; 181 unsigned sa = sizeof(a) / sizeof(a[0]); 182 assert(std::is_sorted(Iter(a), Iter(a+sa))); 183 } 184 } 185 186 int main() 187 { 188 test<forward_iterator<const int*> >(); 189 test<bidirectional_iterator<const int*> >(); 190 test<random_access_iterator<const int*> >(); 191 test<const int*>(); 192 193 #if TEST_STD_VER > 17 194 static_assert(test_constexpr()); 195 #endif 196 } 197