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 template <class Iter>
     23 void
     24 test()
     25 {
     26     {
     27     int a[] = {0};
     28     unsigned sa = sizeof(a) / sizeof(a[0]);
     29     assert(std::is_sorted(Iter(a), Iter(a)));
     30     assert(std::is_sorted(Iter(a), Iter(a+sa)));
     31     }
     32 
     33     {
     34     int a[] = {0, 0};
     35     unsigned sa = sizeof(a) / sizeof(a[0]);
     36     assert(std::is_sorted(Iter(a), Iter(a+sa)));
     37     }
     38     {
     39     int a[] = {0, 1};
     40     unsigned sa = sizeof(a) / sizeof(a[0]);
     41     assert(std::is_sorted(Iter(a), Iter(a+sa)));
     42     }
     43     {
     44     int a[] = {1, 0};
     45     unsigned sa = sizeof(a) / sizeof(a[0]);
     46     assert(!std::is_sorted(Iter(a), Iter(a+sa)));
     47     }
     48     {
     49     int a[] = {1, 1};
     50     unsigned sa = sizeof(a) / sizeof(a[0]);
     51     assert(std::is_sorted(Iter(a), Iter(a+sa)));
     52     }
     53 
     54     {
     55     int a[] = {0, 0, 0};
     56     unsigned sa = sizeof(a) / sizeof(a[0]);
     57     assert(std::is_sorted(Iter(a), Iter(a+sa)));
     58     }
     59     {
     60     int a[] = {0, 0, 1};
     61     unsigned sa = sizeof(a) / sizeof(a[0]);
     62     assert(std::is_sorted(Iter(a), Iter(a+sa)));
     63     }
     64     {
     65     int a[] = {0, 1, 0};
     66     unsigned sa = sizeof(a) / sizeof(a[0]);
     67     assert(!std::is_sorted(Iter(a), Iter(a+sa)));
     68     }
     69     {
     70     int a[] = {0, 1, 1};
     71     unsigned sa = sizeof(a) / sizeof(a[0]);
     72     assert(std::is_sorted(Iter(a), Iter(a+sa)));
     73     }
     74     {
     75     int a[] = {1, 0, 0};
     76     unsigned sa = sizeof(a) / sizeof(a[0]);
     77     assert(!std::is_sorted(Iter(a), Iter(a+sa)));
     78     }
     79     {
     80     int a[] = {1, 0, 1};
     81     unsigned sa = sizeof(a) / sizeof(a[0]);
     82     assert(!std::is_sorted(Iter(a), Iter(a+sa)));
     83     }
     84     {
     85     int a[] = {1, 1, 0};
     86     unsigned sa = sizeof(a) / sizeof(a[0]);
     87     assert(!std::is_sorted(Iter(a), Iter(a+sa)));
     88     }
     89     {
     90     int a[] = {1, 1, 1};
     91     unsigned sa = sizeof(a) / sizeof(a[0]);
     92     assert(std::is_sorted(Iter(a), Iter(a+sa)));
     93     }
     94 
     95     {
     96     int a[] = {0, 0, 0, 0};
     97     unsigned sa = sizeof(a) / sizeof(a[0]);
     98     assert(std::is_sorted(Iter(a), Iter(a+sa)));
     99     }
    100     {
    101     int a[] = {0, 0, 0, 1};
    102     unsigned sa = sizeof(a) / sizeof(a[0]);
    103     assert(std::is_sorted(Iter(a), Iter(a+sa)));
    104     }
    105     {
    106     int a[] = {0, 0, 1, 0};
    107     unsigned sa = sizeof(a) / sizeof(a[0]);
    108     assert(!std::is_sorted(Iter(a), Iter(a+sa)));
    109     }
    110     {
    111     int a[] = {0, 0, 1, 1};
    112     unsigned sa = sizeof(a) / sizeof(a[0]);
    113     assert(std::is_sorted(Iter(a), Iter(a+sa)));
    114     }
    115     {
    116     int a[] = {0, 1, 0, 0};
    117     unsigned sa = sizeof(a) / sizeof(a[0]);
    118     assert(!std::is_sorted(Iter(a), Iter(a+sa)));
    119     }
    120     {
    121     int a[] = {0, 1, 0, 1};
    122     unsigned sa = sizeof(a) / sizeof(a[0]);
    123     assert(!std::is_sorted(Iter(a), Iter(a+sa)));
    124     }
    125     {
    126     int a[] = {0, 1, 1, 0};
    127     unsigned sa = sizeof(a) / sizeof(a[0]);
    128     assert(!std::is_sorted(Iter(a), Iter(a+sa)));
    129     }
    130     {
    131     int a[] = {0, 1, 1, 1};
    132     unsigned sa = sizeof(a) / sizeof(a[0]);
    133     assert(std::is_sorted(Iter(a), Iter(a+sa)));
    134     }
    135     {
    136     int a[] = {1, 0, 0, 0};
    137     unsigned sa = sizeof(a) / sizeof(a[0]);
    138     assert(!std::is_sorted(Iter(a), Iter(a+sa)));
    139     }
    140     {
    141     int a[] = {1, 0, 0, 1};
    142     unsigned sa = sizeof(a) / sizeof(a[0]);
    143     assert(!std::is_sorted(Iter(a), Iter(a+sa)));
    144     }
    145     {
    146     int a[] = {1, 0, 1, 0};
    147     unsigned sa = sizeof(a) / sizeof(a[0]);
    148     assert(!std::is_sorted(Iter(a), Iter(a+sa)));
    149     }
    150     {
    151     int a[] = {1, 0, 1, 1};
    152     unsigned sa = sizeof(a) / sizeof(a[0]);
    153     assert(!std::is_sorted(Iter(a), Iter(a+sa)));
    154     }
    155     {
    156     int a[] = {1, 1, 0, 0};
    157     unsigned sa = sizeof(a) / sizeof(a[0]);
    158     assert(!std::is_sorted(Iter(a), Iter(a+sa)));
    159     }
    160     {
    161     int a[] = {1, 1, 0, 1};
    162     unsigned sa = sizeof(a) / sizeof(a[0]);
    163     assert(!std::is_sorted(Iter(a), Iter(a+sa)));
    164     }
    165     {
    166     int a[] = {1, 1, 1, 0};
    167     unsigned sa = sizeof(a) / sizeof(a[0]);
    168     assert(!std::is_sorted(Iter(a), Iter(a+sa)));
    169     }
    170     {
    171     int a[] = {1, 1, 1, 1};
    172     unsigned sa = sizeof(a) / sizeof(a[0]);
    173     assert(std::is_sorted(Iter(a), Iter(a+sa)));
    174     }
    175 }
    176 
    177 int main()
    178 {
    179     test<forward_iterator<const int*> >();
    180     test<bidirectional_iterator<const int*> >();
    181     test<random_access_iterator<const int*> >();
    182     test<const int*>();
    183 }
    184