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