Home | History | Annotate | Download | only in is.sorted
      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