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 // <vector> 10 11 // iterator begin(); 12 // iterator end(); 13 // const_iterator begin() const; 14 // const_iterator end() const; 15 // const_iterator cbegin() const; 16 // const_iterator cend() const; 17 18 #include <vector> 19 #include <cassert> 20 #include <iterator> 21 22 #include "test_macros.h" 23 #include "min_allocator.h" 24 25 int main(int, char**) 26 { 27 using IterRefT = std::iterator_traits<std::vector<bool>::iterator>::reference; 28 ASSERT_SAME_TYPE(IterRefT, std::vector<bool>::reference); 29 30 using ConstIterRefT = std::iterator_traits<std::vector<bool>::const_iterator>::reference; 31 #if !defined(_LIBCPP_VERSION) || defined(_LIBCPP_ABI_BITSET_VECTOR_BOOL_CONST_SUBSCRIPT_RETURN_BOOL) 32 ASSERT_SAME_TYPE(ConstIterRefT, bool); 33 #else 34 ASSERT_SAME_TYPE(ConstIterRefT, std::__bit_const_reference<std::vector<bool> >); 35 #endif 36 { 37 typedef bool T; 38 typedef std::vector<T> C; 39 C c; 40 C::iterator i = c.begin(); 41 C::iterator j = c.end(); 42 assert(std::distance(i, j) == 0); 43 assert(i == j); 44 } 45 { 46 typedef bool T; 47 typedef std::vector<T> C; 48 const C c; 49 C::const_iterator i = c.begin(); 50 C::const_iterator j = c.end(); 51 assert(std::distance(i, j) == 0); 52 assert(i == j); 53 } 54 { 55 typedef bool T; 56 typedef std::vector<T> C; 57 C c; 58 C::const_iterator i = c.cbegin(); 59 C::const_iterator j = c.cend(); 60 assert(std::distance(i, j) == 0); 61 assert(i == j); 62 assert(i == c.end()); 63 } 64 { 65 typedef bool T; 66 typedef std::vector<T> C; 67 C::iterator i; 68 C::const_iterator j; 69 } 70 #if TEST_STD_VER >= 11 71 { 72 typedef bool T; 73 typedef std::vector<T, min_allocator<T>> C; 74 C c; 75 C::iterator i = c.begin(); 76 C::iterator j = c.end(); 77 assert(std::distance(i, j) == 0); 78 assert(i == j); 79 } 80 { 81 typedef bool T; 82 typedef std::vector<T, min_allocator<T>> C; 83 const C c; 84 C::const_iterator i = c.begin(); 85 C::const_iterator j = c.end(); 86 assert(std::distance(i, j) == 0); 87 assert(i == j); 88 } 89 { 90 typedef bool T; 91 typedef std::vector<T, min_allocator<T>> C; 92 C c; 93 C::const_iterator i = c.cbegin(); 94 C::const_iterator j = c.cend(); 95 assert(std::distance(i, j) == 0); 96 assert(i == j); 97 assert(i == c.end()); 98 } 99 { 100 typedef bool T; 101 typedef std::vector<T, min_allocator<T>> C; 102 C::iterator i; 103 C::const_iterator j; 104 } 105 #endif 106 #if TEST_STD_VER > 11 107 { // N3644 testing 108 std::vector<bool>::iterator ii1{}, ii2{}; 109 std::vector<bool>::iterator ii4 = ii1; 110 std::vector<bool>::const_iterator cii{}; 111 assert ( ii1 == ii2 ); 112 assert ( ii1 == ii4 ); 113 114 assert (!(ii1 != ii2 )); 115 116 assert ( (ii1 == cii )); 117 assert ( (cii == ii1 )); 118 assert (!(ii1 != cii )); 119 assert (!(cii != ii1 )); 120 assert (!(ii1 < cii )); 121 assert (!(cii < ii1 )); 122 assert ( (ii1 <= cii )); 123 assert ( (cii <= ii1 )); 124 assert (!(ii1 > cii )); 125 assert (!(cii > ii1 )); 126 assert ( (ii1 >= cii )); 127 assert ( (cii >= ii1 )); 128 assert (cii - ii1 == 0); 129 assert (ii1 - cii == 0); 130 } 131 #endif 132 133 return 0; 134 } 135