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