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