Home | History | Annotate | Download | only in array
      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 // <array>
     11 
     12 // iterator, const_iterator
     13 
     14 #include <array>
     15 #include <iterator>
     16 #include <cassert>
     17 
     18 int main()
     19 {
     20     {
     21     typedef std::array<int, 5> C;
     22     C c;
     23     C::iterator i;
     24     i = c.begin();
     25     C::const_iterator j;
     26     j = c.cbegin();
     27     assert(i == j);
     28     }
     29     {
     30     typedef std::array<int, 0> C;
     31     C c;
     32     C::iterator i;
     33     i = c.begin();
     34     C::const_iterator j;
     35     j = c.cbegin();
     36     assert(i == j);
     37     }
     38 
     39 #if _LIBCPP_STD_VER > 11
     40     { // N3644 testing
     41         {
     42         typedef std::array<int, 5> C;
     43         C::iterator ii1{}, ii2{};
     44         C::iterator ii4 = ii1;
     45         C::const_iterator cii{};
     46         assert ( ii1 == ii2 );
     47         assert ( ii1 == ii4 );
     48         assert ( ii1 == cii );
     49 
     50         assert ( !(ii1 != ii2 ));
     51         assert ( !(ii1 != cii ));
     52 
     53         C c;
     54         assert ( c.begin()   == std::begin(c));
     55         assert ( c.cbegin()  == std::cbegin(c));
     56         assert ( c.rbegin()  == std::rbegin(c));
     57         assert ( c.crbegin() == std::crbegin(c));
     58         assert ( c.end()     == std::end(c));
     59         assert ( c.cend()    == std::cend(c));
     60         assert ( c.rend()    == std::rend(c));
     61         assert ( c.crend()   == std::crend(c));
     62 
     63         assert ( std::begin(c)   != std::end(c));
     64         assert ( std::rbegin(c)  != std::rend(c));
     65         assert ( std::cbegin(c)  != std::cend(c));
     66         assert ( std::crbegin(c) != std::crend(c));
     67         }
     68         {
     69         typedef std::array<int, 0> C;
     70         C::iterator ii1{}, ii2{};
     71         C::iterator ii4 = ii1;
     72         C::const_iterator cii{};
     73         assert ( ii1 == ii2 );
     74         assert ( ii1 == ii4 );
     75 
     76         assert (!(ii1 != ii2 ));
     77 
     78         assert ( (ii1 == cii ));
     79         assert ( (cii == ii1 ));
     80         assert (!(ii1 != cii ));
     81         assert (!(cii != ii1 ));
     82         assert (!(ii1 <  cii ));
     83         assert (!(cii <  ii1 ));
     84         assert ( (ii1 <= cii ));
     85         assert ( (cii <= ii1 ));
     86         assert (!(ii1 >  cii ));
     87         assert (!(cii >  ii1 ));
     88         assert ( (ii1 >= cii ));
     89         assert ( (cii >= ii1 ));
     90         assert (cii - ii1 == 0);
     91         assert (ii1 - cii == 0);
     92 
     93         C c;
     94         assert ( c.begin()   == std::begin(c));
     95         assert ( c.cbegin()  == std::cbegin(c));
     96         assert ( c.rbegin()  == std::rbegin(c));
     97         assert ( c.crbegin() == std::crbegin(c));
     98         assert ( c.end()     == std::end(c));
     99         assert ( c.cend()    == std::cend(c));
    100         assert ( c.rend()    == std::rend(c));
    101         assert ( c.crend()   == std::crend(c));
    102 
    103         assert ( std::begin(c)   == std::end(c));
    104         assert ( std::rbegin(c)  == std::rend(c));
    105         assert ( std::cbegin(c)  == std::cend(c));
    106         assert ( std::crbegin(c) == std::crend(c));
    107         }
    108     }
    109 #endif
    110 }
    111