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 // <vector> 11 12 // iterator begin(); 13 // iterator end(); 14 // const_iterator begin() const; 15 // const_iterator end() const; 16 // const_iterator cbegin() const; 17 // const_iterator cend() const; 18 19 #include <vector> 20 #include <cassert> 21 #include <iterator> 22 23 #include "min_allocator.h" 24 25 struct A 26 { 27 int first; 28 int second; 29 }; 30 31 int main() 32 { 33 { 34 typedef int T; 35 typedef std::vector<T> C; 36 C c; 37 C::iterator i = c.begin(); 38 C::iterator j = c.end(); 39 assert(std::distance(i, j) == 0); 40 assert(i == j); 41 } 42 { 43 typedef int T; 44 typedef std::vector<T> C; 45 const C c; 46 C::const_iterator i = c.begin(); 47 C::const_iterator j = c.end(); 48 assert(std::distance(i, j) == 0); 49 assert(i == j); 50 } 51 { 52 typedef int T; 53 typedef std::vector<T> C; 54 C c; 55 C::const_iterator i = c.cbegin(); 56 C::const_iterator j = c.cend(); 57 assert(std::distance(i, j) == 0); 58 assert(i == j); 59 assert(i == c.end()); 60 } 61 { 62 typedef int T; 63 typedef std::vector<T> C; 64 const T t[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 65 C c(std::begin(t), std::end(t)); 66 C::iterator i = c.begin(); 67 assert(*i == 0); 68 ++i; 69 assert(*i == 1); 70 *i = 10; 71 assert(*i == 10); 72 assert(std::distance(c.begin(), c.end()) == 10); 73 } 74 { 75 typedef int T; 76 typedef std::vector<T> C; 77 C::iterator i; 78 C::const_iterator j; 79 } 80 #if __cplusplus >= 201103L 81 { 82 typedef int T; 83 typedef std::vector<T, min_allocator<T>> C; 84 C c; 85 C::iterator i = c.begin(); 86 C::iterator j = c.end(); 87 assert(std::distance(i, j) == 0); 88 assert(i == j); 89 } 90 { 91 typedef int T; 92 typedef std::vector<T, min_allocator<T>> C; 93 const C c; 94 C::const_iterator i = c.begin(); 95 C::const_iterator j = c.end(); 96 assert(std::distance(i, j) == 0); 97 assert(i == j); 98 } 99 { 100 typedef int T; 101 typedef std::vector<T, min_allocator<T>> C; 102 C c; 103 C::const_iterator i = c.cbegin(); 104 C::const_iterator j = c.cend(); 105 assert(std::distance(i, j) == 0); 106 assert(i == j); 107 assert(i == c.end()); 108 } 109 { 110 typedef int T; 111 typedef std::vector<T, min_allocator<T>> C; 112 const T t[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 113 C c(std::begin(t), std::end(t)); 114 C::iterator i = c.begin(); 115 assert(*i == 0); 116 ++i; 117 assert(*i == 1); 118 *i = 10; 119 assert(*i == 10); 120 assert(std::distance(c.begin(), c.end()) == 10); 121 } 122 { 123 typedef int T; 124 typedef std::vector<T, min_allocator<T>> C; 125 C::iterator i; 126 C::const_iterator j; 127 } 128 { 129 typedef A T; 130 typedef std::vector<T, min_allocator<T>> C; 131 C c = {A{1, 2}}; 132 C::iterator i = c.begin(); 133 i->first = 3; 134 C::const_iterator j = i; 135 assert(j->first == 3); 136 } 137 #endif 138 #if _LIBCPP_STD_VER > 11 139 { // N3644 testing 140 typedef std::vector<int> C; 141 C::iterator ii1{}, ii2{}; 142 C::iterator ii4 = ii1; 143 C::const_iterator cii{}; 144 assert ( ii1 == ii2 ); 145 assert ( ii1 == ii4 ); 146 147 assert (!(ii1 != ii2 )); 148 149 assert ( (ii1 == cii )); 150 assert ( (cii == ii1 )); 151 assert (!(ii1 != cii )); 152 assert (!(cii != ii1 )); 153 assert (!(ii1 < cii )); 154 assert (!(cii < ii1 )); 155 assert ( (ii1 <= cii )); 156 assert ( (cii <= ii1 )); 157 assert (!(ii1 > cii )); 158 assert (!(cii > ii1 )); 159 assert ( (ii1 >= cii )); 160 assert ( (cii >= ii1 )); 161 assert (cii - ii1 == 0); 162 assert (ii1 - cii == 0); 163 } 164 #endif 165 } 166