libcxx

libcxx mirror with random patches
git clone https://git.neptards.moe/neptards/libcxx.git
Log | Files | Refs

lexicographical_compare.pass.cpp (3699B)


      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<InputIterator Iter1, InputIterator Iter2>
     13 //   requires HasLess<Iter1::value_type, Iter2::value_type>
     14 //         && HasLess<Iter2::value_type, Iter1::value_type>
     15 //   constexpr bool             // constexpr after C++17
     16 //   lexicographical_compare(Iter1 first1, Iter1 last1, Iter2 first2, Iter2 last2);
     17 
     18 #include <algorithm>
     19 #include <cassert>
     20 
     21 #include "test_macros.h"
     22 #include "test_iterators.h"
     23 
     24 #if TEST_STD_VER > 17
     25 TEST_CONSTEXPR bool test_constexpr() {
     26     int ia[] = {1, 2, 3};
     27     int ib[] = {1, 3, 5, 2, 4, 6};
     28 
     29     return  std::lexicographical_compare(std::begin(ia), std::end(ia), std::begin(ib), std::end(ib))
     30         && !std::lexicographical_compare(std::begin(ib), std::end(ib), std::begin(ia), std::end(ia))
     31            ;
     32     }
     33 #endif
     34 
     35 template <class Iter1, class Iter2>
     36 void
     37 test()
     38 {
     39     int ia[] = {1, 2, 3, 4};
     40     const unsigned sa = sizeof(ia)/sizeof(ia[0]);
     41     int ib[] = {1, 2, 3};
     42     assert(!std::lexicographical_compare(Iter1(ia),   Iter1(ia+sa), Iter2(ib),   Iter2(ib+2)));
     43     assert( std::lexicographical_compare(Iter1(ib),   Iter1(ib+2),  Iter2(ia),   Iter2(ia+sa)));
     44     assert(!std::lexicographical_compare(Iter1(ia),   Iter1(ia+sa), Iter2(ib),   Iter2(ib+3)));
     45     assert( std::lexicographical_compare(Iter1(ib),   Iter1(ib+3),  Iter2(ia),   Iter2(ia+sa)));
     46     assert( std::lexicographical_compare(Iter1(ia),   Iter1(ia+sa), Iter2(ib+1), Iter2(ib+3)));
     47     assert(!std::lexicographical_compare(Iter1(ib+1), Iter1(ib+3),  Iter2(ia),   Iter2(ia+sa)));
     48 }
     49 
     50 int main()
     51 {
     52     test<input_iterator<const int*>, input_iterator<const int*> >();
     53     test<input_iterator<const int*>, forward_iterator<const int*> >();
     54     test<input_iterator<const int*>, bidirectional_iterator<const int*> >();
     55     test<input_iterator<const int*>, random_access_iterator<const int*> >();
     56     test<input_iterator<const int*>, const int*>();
     57 
     58     test<forward_iterator<const int*>, input_iterator<const int*> >();
     59     test<forward_iterator<const int*>, forward_iterator<const int*> >();
     60     test<forward_iterator<const int*>, bidirectional_iterator<const int*> >();
     61     test<forward_iterator<const int*>, random_access_iterator<const int*> >();
     62     test<forward_iterator<const int*>, const int*>();
     63 
     64     test<bidirectional_iterator<const int*>, input_iterator<const int*> >();
     65     test<bidirectional_iterator<const int*>, forward_iterator<const int*> >();
     66     test<bidirectional_iterator<const int*>, bidirectional_iterator<const int*> >();
     67     test<bidirectional_iterator<const int*>, random_access_iterator<const int*> >();
     68     test<bidirectional_iterator<const int*>, const int*>();
     69 
     70     test<random_access_iterator<const int*>, input_iterator<const int*> >();
     71     test<random_access_iterator<const int*>, forward_iterator<const int*> >();
     72     test<random_access_iterator<const int*>, bidirectional_iterator<const int*> >();
     73     test<random_access_iterator<const int*>, random_access_iterator<const int*> >();
     74     test<random_access_iterator<const int*>, const int*>();
     75 
     76     test<const int*, input_iterator<const int*> >();
     77     test<const int*, forward_iterator<const int*> >();
     78     test<const int*, bidirectional_iterator<const int*> >();
     79     test<const int*, random_access_iterator<const int*> >();
     80     test<const int*, const int*>();
     81 
     82 #if TEST_STD_VER > 17
     83     static_assert(test_constexpr());
     84 #endif
     85 }