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

source code of libcxx/test/std/containers/associative/map/map.modifiers/erase_key.pass.cpp