1 //===----------------------------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 // <array> 10 11 // iterator, const_iterator 12 13 #include <array> 14 #include <iterator> 15 #include <cassert> 16 17 #include "test_macros.h" 18 19 // std::array is explicitly allowed to be initialized with A a = { init-list };. 20 // Disable the missing braces warning for this reason. 21 #include "disable_missing_braces_warning.h" 22 23 int main(int, char**) 24 { 25 { 26 typedef std::array<int, 5> C; 27 C c; 28 C::iterator i; 29 i = c.begin(); 30 C::const_iterator j; 31 j = c.cbegin(); 32 assert(i == j); 33 } 34 { 35 typedef std::array<int, 0> C; 36 C c; 37 C::iterator i; 38 i = c.begin(); 39 C::const_iterator j; 40 j = c.cbegin(); 41 assert(i == j); 42 } 43 44 #if TEST_STD_VER > 11 45 { // N3644 testing 46 { 47 typedef std::array<int, 5> C; 48 C::iterator ii1{}, ii2{}; 49 C::iterator ii4 = ii1; 50 C::const_iterator cii{}; 51 assert ( ii1 == ii2 ); 52 assert ( ii1 == ii4 ); 53 assert ( ii1 == cii ); 54 55 assert ( !(ii1 != ii2 )); 56 assert ( !(ii1 != cii )); 57 58 C c; 59 assert ( c.begin() == std::begin(c)); 60 assert ( c.cbegin() == std::cbegin(c)); 61 assert ( c.rbegin() == std::rbegin(c)); 62 assert ( c.crbegin() == std::crbegin(c)); 63 assert ( c.end() == std::end(c)); 64 assert ( c.cend() == std::cend(c)); 65 assert ( c.rend() == std::rend(c)); 66 assert ( c.crend() == std::crend(c)); 67 68 assert ( std::begin(c) != std::end(c)); 69 assert ( std::rbegin(c) != std::rend(c)); 70 assert ( std::cbegin(c) != std::cend(c)); 71 assert ( std::crbegin(c) != std::crend(c)); 72 } 73 { 74 typedef std::array<int, 0> C; 75 C::iterator ii1{}, ii2{}; 76 C::iterator ii4 = ii1; 77 C::const_iterator cii{}; 78 assert ( ii1 == ii2 ); 79 assert ( ii1 == ii4 ); 80 81 assert (!(ii1 != ii2 )); 82 83 assert ( (ii1 == cii )); 84 assert ( (cii == ii1 )); 85 assert (!(ii1 != cii )); 86 assert (!(cii != ii1 )); 87 assert (!(ii1 < cii )); 88 assert (!(cii < ii1 )); 89 assert ( (ii1 <= cii )); 90 assert ( (cii <= ii1 )); 91 assert (!(ii1 > cii )); 92 assert (!(cii > ii1 )); 93 assert ( (ii1 >= cii )); 94 assert ( (cii >= ii1 )); 95 assert (cii - ii1 == 0); 96 assert (ii1 - cii == 0); 97 98 C c; 99 assert ( c.begin() == std::begin(c)); 100 assert ( c.cbegin() == std::cbegin(c)); 101 assert ( c.rbegin() == std::rbegin(c)); 102 assert ( c.crbegin() == std::crbegin(c)); 103 assert ( c.end() == std::end(c)); 104 assert ( c.cend() == std::cend(c)); 105 assert ( c.rend() == std::rend(c)); 106 assert ( c.crend() == std::crend(c)); 107 108 assert ( std::begin(c) == std::end(c)); 109 assert ( std::rbegin(c) == std::rend(c)); 110 assert ( std::cbegin(c) == std::cend(c)); 111 assert ( std::crbegin(c) == std::crend(c)); 112 } 113 } 114 #endif 115 #if TEST_STD_VER > 14 116 { 117 typedef std::array<int, 5> C; 118 constexpr C c{0,1,2,3,4}; 119 120 static_assert ( c.begin() == std::begin(c), ""); 121 static_assert ( c.cbegin() == std::cbegin(c), ""); 122 static_assert ( c.end() == std::end(c), ""); 123 static_assert ( c.cend() == std::cend(c), ""); 124 125 static_assert ( c.rbegin() == std::rbegin(c), ""); 126 static_assert ( c.crbegin() == std::crbegin(c), ""); 127 static_assert ( c.rend() == std::rend(c), ""); 128 static_assert ( c.crend() == std::crend(c), ""); 129 130 static_assert ( std::begin(c) != std::end(c), ""); 131 static_assert ( std::rbegin(c) != std::rend(c), ""); 132 static_assert ( std::cbegin(c) != std::cend(c), ""); 133 static_assert ( std::crbegin(c) != std::crend(c), ""); 134 135 static_assert ( *c.begin() == 0, ""); 136 static_assert ( *c.rbegin() == 4, ""); 137 138 static_assert ( *std::begin(c) == 0, "" ); 139 static_assert ( *std::cbegin(c) == 0, "" ); 140 static_assert ( *std::rbegin(c) == 4, "" ); 141 static_assert ( *std::crbegin(c) == 4, "" ); 142 } 143 #endif 144 145 return 0; 146 } 147