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 // <map> 11 12 // class map 13 14 // iterator begin(); 15 // const_iterator begin() const; 16 // iterator end(); 17 // const_iterator end() const; 18 // 19 // reverse_iterator rbegin(); 20 // const_reverse_iterator rbegin() const; 21 // reverse_iterator rend(); 22 // const_reverse_iterator rend() const; 23 // 24 // const_iterator cbegin() const; 25 // const_iterator cend() const; 26 // const_reverse_iterator crbegin() const; 27 // const_reverse_iterator crend() const; 28 29 #include <map> 30 #include <cassert> 31 #include <cstddef> 32 33 #include "test_macros.h" 34 #include "min_allocator.h" 35 36 int main() 37 { 38 { 39 typedef std::pair<const int, double> V; 40 V ar[] = 41 { 42 V(1, 1), 43 V(1, 1.5), 44 V(1, 2), 45 V(2, 1), 46 V(2, 1.5), 47 V(2, 2), 48 V(3, 1), 49 V(3, 1.5), 50 V(3, 2), 51 V(4, 1), 52 V(4, 1.5), 53 V(4, 2), 54 V(5, 1), 55 V(5, 1.5), 56 V(5, 2), 57 V(6, 1), 58 V(6, 1.5), 59 V(6, 2), 60 V(7, 1), 61 V(7, 1.5), 62 V(7, 2), 63 V(8, 1), 64 V(8, 1.5), 65 V(8, 2) 66 }; 67 std::map<int, double> m(ar, ar+sizeof(ar)/sizeof(ar[0])); 68 assert(static_cast<std::size_t>(std::distance(m.begin(), m.end())) == m.size()); 69 assert(static_cast<std::size_t>(std::distance(m.rbegin(), m.rend())) == m.size()); 70 std::map<int, double>::iterator i; 71 i = m.begin(); 72 std::map<int, double>::const_iterator k = i; 73 assert(i == k); 74 for (int j = 1; static_cast<std::size_t>(j) <= m.size(); ++j, ++i) 75 { 76 assert(i->first == j); 77 assert(i->second == 1); 78 i->second = 2.5; 79 assert(i->second == 2.5); 80 } 81 } 82 { 83 typedef std::pair<const int, double> V; 84 V ar[] = 85 { 86 V(1, 1), 87 V(1, 1.5), 88 V(1, 2), 89 V(2, 1), 90 V(2, 1.5), 91 V(2, 2), 92 V(3, 1), 93 V(3, 1.5), 94 V(3, 2), 95 V(4, 1), 96 V(4, 1.5), 97 V(4, 2), 98 V(5, 1), 99 V(5, 1.5), 100 V(5, 2), 101 V(6, 1), 102 V(6, 1.5), 103 V(6, 2), 104 V(7, 1), 105 V(7, 1.5), 106 V(7, 2), 107 V(8, 1), 108 V(8, 1.5), 109 V(8, 2) 110 }; 111 const std::map<int, double> m(ar, ar+sizeof(ar)/sizeof(ar[0])); 112 assert(static_cast<std::size_t>(std::distance(m.begin(), m.end())) == m.size()); 113 assert(static_cast<std::size_t>(std::distance(m.cbegin(), m.cend())) == m.size()); 114 assert(static_cast<std::size_t>(std::distance(m.rbegin(), m.rend())) == m.size()); 115 assert(static_cast<std::size_t>(std::distance(m.crbegin(), m.crend())) == m.size()); 116 std::map<int, double>::const_iterator i; 117 i = m.begin(); 118 for (int j = 1; static_cast<std::size_t>(j) <= m.size(); ++j, ++i) 119 { 120 assert(i->first == j); 121 assert(i->second == 1); 122 } 123 } 124 #if TEST_STD_VER >= 11 125 { 126 typedef std::pair<const int, double> V; 127 V ar[] = 128 { 129 V(1, 1), 130 V(1, 1.5), 131 V(1, 2), 132 V(2, 1), 133 V(2, 1.5), 134 V(2, 2), 135 V(3, 1), 136 V(3, 1.5), 137 V(3, 2), 138 V(4, 1), 139 V(4, 1.5), 140 V(4, 2), 141 V(5, 1), 142 V(5, 1.5), 143 V(5, 2), 144 V(6, 1), 145 V(6, 1.5), 146 V(6, 2), 147 V(7, 1), 148 V(7, 1.5), 149 V(7, 2), 150 V(8, 1), 151 V(8, 1.5), 152 V(8, 2) 153 }; 154 std::map<int, double, std::less<int>, min_allocator<V>> m(ar, ar+sizeof(ar)/sizeof(ar[0])); 155 assert(static_cast<std::size_t>(std::distance(m.begin(), m.end())) == m.size()); 156 assert(static_cast<std::size_t>(std::distance(m.rbegin(), m.rend())) == m.size()); 157 std::map<int, double, std::less<int>, min_allocator<V>>::iterator i; 158 i = m.begin(); 159 std::map<int, double, std::less<int>, min_allocator<V>>::const_iterator k = i; 160 assert(i == k); 161 for (int j = 1; static_cast<std::size_t>(j) <= m.size(); ++j, ++i) 162 { 163 assert(i->first == j); 164 assert(i->second == 1); 165 i->second = 2.5; 166 assert(i->second == 2.5); 167 } 168 } 169 { 170 typedef std::pair<const int, double> V; 171 V ar[] = 172 { 173 V(1, 1), 174 V(1, 1.5), 175 V(1, 2), 176 V(2, 1), 177 V(2, 1.5), 178 V(2, 2), 179 V(3, 1), 180 V(3, 1.5), 181 V(3, 2), 182 V(4, 1), 183 V(4, 1.5), 184 V(4, 2), 185 V(5, 1), 186 V(5, 1.5), 187 V(5, 2), 188 V(6, 1), 189 V(6, 1.5), 190 V(6, 2), 191 V(7, 1), 192 V(7, 1.5), 193 V(7, 2), 194 V(8, 1), 195 V(8, 1.5), 196 V(8, 2) 197 }; 198 const std::map<int, double, std::less<int>, min_allocator<V>> m(ar, ar+sizeof(ar)/sizeof(ar[0])); 199 assert(static_cast<std::size_t>(std::distance(m.begin(), m.end())) == m.size()); 200 assert(static_cast<std::size_t>(std::distance(m.cbegin(), m.cend())) == m.size()); 201 assert(static_cast<std::size_t>(std::distance(m.rbegin(), m.rend())) == m.size()); 202 assert(static_cast<std::size_t>(std::distance(m.crbegin(), m.crend())) == m.size()); 203 std::map<int, double, std::less<int>, min_allocator<V>>::const_iterator i; 204 i = m.begin(); 205 for (int j = 1; static_cast<std::size_t>(j) <= m.size(); ++j, ++i) 206 { 207 assert(i->first == j); 208 assert(i->second == 1); 209 } 210 } 211 #endif 212 #if TEST_STD_VER > 11 213 { // N3644 testing 214 typedef std::map<int, double> C; 215 C::iterator ii1{}, ii2{}; 216 C::iterator ii4 = ii1; 217 C::const_iterator cii{}; 218 assert ( ii1 == ii2 ); 219 assert ( ii1 == ii4 ); 220 221 assert (!(ii1 != ii2 )); 222 223 assert ( (ii1 == cii )); 224 assert ( (cii == ii1 )); 225 assert (!(ii1 != cii )); 226 assert (!(cii != ii1 )); 227 } 228 #endif 229 } 230