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