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 // size_type erase(const key_type& k); 14 15 #include <map> 16 #include <cassert> 17 18 #include "min_allocator.h" 19 20 int main(int, char**) 21 { 22 { 23 typedef std::map<int, double> M; 24 typedef std::pair<int, double> P; 25 typedef M::size_type R; 26 P ar[] = 27 { 28 P(1, 1.5), 29 P(2, 2.5), 30 P(3, 3.5), 31 P(4, 4.5), 32 P(5, 5.5), 33 P(6, 6.5), 34 P(7, 7.5), 35 P(8, 8.5), 36 }; 37 M m(ar, ar + sizeof(ar)/sizeof(ar[0])); 38 assert(m.size() == 8); 39 R s = m.erase(9); 40 assert(s == 0); 41 assert(m.size() == 8); 42 assert(m.begin()->first == 1); 43 assert(m.begin()->second == 1.5); 44 assert(next(m.begin())->first == 2); 45 assert(next(m.begin())->second == 2.5); 46 assert(next(m.begin(), 2)->first == 3); 47 assert(next(m.begin(), 2)->second == 3.5); 48 assert(next(m.begin(), 3)->first == 4); 49 assert(next(m.begin(), 3)->second == 4.5); 50 assert(next(m.begin(), 4)->first == 5); 51 assert(next(m.begin(), 4)->second == 5.5); 52 assert(next(m.begin(), 5)->first == 6); 53 assert(next(m.begin(), 5)->second == 6.5); 54 assert(next(m.begin(), 6)->first == 7); 55 assert(next(m.begin(), 6)->second == 7.5); 56 assert(next(m.begin(), 7)->first == 8); 57 assert(next(m.begin(), 7)->second == 8.5); 58 59 s = m.erase(4); 60 assert(m.size() == 7); 61 assert(s == 1); 62 assert(m.begin()->first == 1); 63 assert(m.begin()->second == 1.5); 64 assert(next(m.begin())->first == 2); 65 assert(next(m.begin())->second == 2.5); 66 assert(next(m.begin(), 2)->first == 3); 67 assert(next(m.begin(), 2)->second == 3.5); 68 assert(next(m.begin(), 3)->first == 5); 69 assert(next(m.begin(), 3)->second == 5.5); 70 assert(next(m.begin(), 4)->first == 6); 71 assert(next(m.begin(), 4)->second == 6.5); 72 assert(next(m.begin(), 5)->first == 7); 73 assert(next(m.begin(), 5)->second == 7.5); 74 assert(next(m.begin(), 6)->first == 8); 75 assert(next(m.begin(), 6)->second == 8.5); 76 77 s = m.erase(1); 78 assert(m.size() == 6); 79 assert(s == 1); 80 assert(m.begin()->first == 2); 81 assert(m.begin()->second == 2.5); 82 assert(next(m.begin())->first == 3); 83 assert(next(m.begin())->second == 3.5); 84 assert(next(m.begin(), 2)->first == 5); 85 assert(next(m.begin(), 2)->second == 5.5); 86 assert(next(m.begin(), 3)->first == 6); 87 assert(next(m.begin(), 3)->second == 6.5); 88 assert(next(m.begin(), 4)->first == 7); 89 assert(next(m.begin(), 4)->second == 7.5); 90 assert(next(m.begin(), 5)->first == 8); 91 assert(next(m.begin(), 5)->second == 8.5); 92 93 s = m.erase(8); 94 assert(m.size() == 5); 95 assert(s == 1); 96 assert(m.begin()->first == 2); 97 assert(m.begin()->second == 2.5); 98 assert(next(m.begin())->first == 3); 99 assert(next(m.begin())->second == 3.5); 100 assert(next(m.begin(), 2)->first == 5); 101 assert(next(m.begin(), 2)->second == 5.5); 102 assert(next(m.begin(), 3)->first == 6); 103 assert(next(m.begin(), 3)->second == 6.5); 104 assert(next(m.begin(), 4)->first == 7); 105 assert(next(m.begin(), 4)->second == 7.5); 106 107 s = m.erase(3); 108 assert(m.size() == 4); 109 assert(s == 1); 110 assert(m.begin()->first == 2); 111 assert(m.begin()->second == 2.5); 112 assert(next(m.begin())->first == 5); 113 assert(next(m.begin())->second == 5.5); 114 assert(next(m.begin(), 2)->first == 6); 115 assert(next(m.begin(), 2)->second == 6.5); 116 assert(next(m.begin(), 3)->first == 7); 117 assert(next(m.begin(), 3)->second == 7.5); 118 119 s = m.erase(6); 120 assert(m.size() == 3); 121 assert(s == 1); 122 assert(m.begin()->first == 2); 123 assert(m.begin()->second == 2.5); 124 assert(next(m.begin())->first == 5); 125 assert(next(m.begin())->second == 5.5); 126 assert(next(m.begin(), 2)->first == 7); 127 assert(next(m.begin(), 2)->second == 7.5); 128 129 s = m.erase(7); 130 assert(m.size() == 2); 131 assert(s == 1); 132 assert(m.begin()->first == 2); 133 assert(m.begin()->second == 2.5); 134 assert(next(m.begin())->first == 5); 135 assert(next(m.begin())->second == 5.5); 136 137 s = m.erase(2); 138 assert(m.size() == 1); 139 assert(s == 1); 140 assert(m.begin()->first == 5); 141 assert(m.begin()->second == 5.5); 142 143 s = m.erase(5); 144 assert(m.size() == 0); 145 assert(s == 1); 146 } 147 #if TEST_STD_VER >= 11 148 { 149 typedef std::map<int, double, std::less<int>, min_allocator<std::pair<const int, double>>> M; 150 typedef std::pair<int, double> P; 151 typedef M::size_type R; 152 P ar[] = 153 { 154 P(1, 1.5), 155 P(2, 2.5), 156 P(3, 3.5), 157 P(4, 4.5), 158 P(5, 5.5), 159 P(6, 6.5), 160 P(7, 7.5), 161 P(8, 8.5), 162 }; 163 M m(ar, ar + sizeof(ar)/sizeof(ar[0])); 164 assert(m.size() == 8); 165 R s = m.erase(9); 166 assert(s == 0); 167 assert(m.size() == 8); 168 assert(m.begin()->first == 1); 169 assert(m.begin()->second == 1.5); 170 assert(next(m.begin())->first == 2); 171 assert(next(m.begin())->second == 2.5); 172 assert(next(m.begin(), 2)->first == 3); 173 assert(next(m.begin(), 2)->second == 3.5); 174 assert(next(m.begin(), 3)->first == 4); 175 assert(next(m.begin(), 3)->second == 4.5); 176 assert(next(m.begin(), 4)->first == 5); 177 assert(next(m.begin(), 4)->second == 5.5); 178 assert(next(m.begin(), 5)->first == 6); 179 assert(next(m.begin(), 5)->second == 6.5); 180 assert(next(m.begin(), 6)->first == 7); 181 assert(next(m.begin(), 6)->second == 7.5); 182 assert(next(m.begin(), 7)->first == 8); 183 assert(next(m.begin(), 7)->second == 8.5); 184 185 s = m.erase(4); 186 assert(m.size() == 7); 187 assert(s == 1); 188 assert(m.begin()->first == 1); 189 assert(m.begin()->second == 1.5); 190 assert(next(m.begin())->first == 2); 191 assert(next(m.begin())->second == 2.5); 192 assert(next(m.begin(), 2)->first == 3); 193 assert(next(m.begin(), 2)->second == 3.5); 194 assert(next(m.begin(), 3)->first == 5); 195 assert(next(m.begin(), 3)->second == 5.5); 196 assert(next(m.begin(), 4)->first == 6); 197 assert(next(m.begin(), 4)->second == 6.5); 198 assert(next(m.begin(), 5)->first == 7); 199 assert(next(m.begin(), 5)->second == 7.5); 200 assert(next(m.begin(), 6)->first == 8); 201 assert(next(m.begin(), 6)->second == 8.5); 202 203 s = m.erase(1); 204 assert(m.size() == 6); 205 assert(s == 1); 206 assert(m.begin()->first == 2); 207 assert(m.begin()->second == 2.5); 208 assert(next(m.begin())->first == 3); 209 assert(next(m.begin())->second == 3.5); 210 assert(next(m.begin(), 2)->first == 5); 211 assert(next(m.begin(), 2)->second == 5.5); 212 assert(next(m.begin(), 3)->first == 6); 213 assert(next(m.begin(), 3)->second == 6.5); 214 assert(next(m.begin(), 4)->first == 7); 215 assert(next(m.begin(), 4)->second == 7.5); 216 assert(next(m.begin(), 5)->first == 8); 217 assert(next(m.begin(), 5)->second == 8.5); 218 219 s = m.erase(8); 220 assert(m.size() == 5); 221 assert(s == 1); 222 assert(m.begin()->first == 2); 223 assert(m.begin()->second == 2.5); 224 assert(next(m.begin())->first == 3); 225 assert(next(m.begin())->second == 3.5); 226 assert(next(m.begin(), 2)->first == 5); 227 assert(next(m.begin(), 2)->second == 5.5); 228 assert(next(m.begin(), 3)->first == 6); 229 assert(next(m.begin(), 3)->second == 6.5); 230 assert(next(m.begin(), 4)->first == 7); 231 assert(next(m.begin(), 4)->second == 7.5); 232 233 s = m.erase(3); 234 assert(m.size() == 4); 235 assert(s == 1); 236 assert(m.begin()->first == 2); 237 assert(m.begin()->second == 2.5); 238 assert(next(m.begin())->first == 5); 239 assert(next(m.begin())->second == 5.5); 240 assert(next(m.begin(), 2)->first == 6); 241 assert(next(m.begin(), 2)->second == 6.5); 242 assert(next(m.begin(), 3)->first == 7); 243 assert(next(m.begin(), 3)->second == 7.5); 244 245 s = m.erase(6); 246 assert(m.size() == 3); 247 assert(s == 1); 248 assert(m.begin()->first == 2); 249 assert(m.begin()->second == 2.5); 250 assert(next(m.begin())->first == 5); 251 assert(next(m.begin())->second == 5.5); 252 assert(next(m.begin(), 2)->first == 7); 253 assert(next(m.begin(), 2)->second == 7.5); 254 255 s = m.erase(7); 256 assert(m.size() == 2); 257 assert(s == 1); 258 assert(m.begin()->first == 2); 259 assert(m.begin()->second == 2.5); 260 assert(next(m.begin())->first == 5); 261 assert(next(m.begin())->second == 5.5); 262 263 s = m.erase(2); 264 assert(m.size() == 1); 265 assert(s == 1); 266 assert(m.begin()->first == 5); 267 assert(m.begin()->second == 5.5); 268 269 s = m.erase(5); 270 assert(m.size() == 0); 271 assert(s == 1); 272 } 273 #endif 274 275 return 0; 276 } 277