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 // <set>
11 
12 // class set
13 
14 // size_type erase(const key_type& k);
15 
16 #include <set>
17 #include <cassert>
18 
19 #include "../../min_allocator.h"
20 
21 int main()
22 {
23     {
24         typedef std::set<int> M;
25         typedef int V;
26         typedef M::size_type I;
27         V ar[] =
28         {
29             1,
30             2,
31             3,
32             4,
33             5,
34             6,
35             7,
36             8
37         };
38         M m(ar, ar + sizeof(ar)/sizeof(ar[0]));
39         assert(m.size() == 8);
40         I i = m.erase(9);
41         assert(m.size() == 8);
42         assert(i == 0);
43         assert(*next(m.begin(), 0) == 1);
44         assert(*next(m.begin(), 1) == 2);
45         assert(*next(m.begin(), 2) == 3);
46         assert(*next(m.begin(), 3) == 4);
47         assert(*next(m.begin(), 4) == 5);
48         assert(*next(m.begin(), 5) == 6);
49         assert(*next(m.begin(), 6) == 7);
50         assert(*next(m.begin(), 7) == 8);
51 
52         i = m.erase(4);
53         assert(m.size() == 7);
54         assert(i == 1);
55         assert(*next(m.begin(), 0) == 1);
56         assert(*next(m.begin(), 1) == 2);
57         assert(*next(m.begin(), 2) == 3);
58         assert(*next(m.begin(), 3) == 5);
59         assert(*next(m.begin(), 4) == 6);
60         assert(*next(m.begin(), 5) == 7);
61         assert(*next(m.begin(), 6) == 8);
62 
63         i = m.erase(1);
64         assert(m.size() == 6);
65         assert(i == 1);
66         assert(*next(m.begin(), 0) == 2);
67         assert(*next(m.begin(), 1) == 3);
68         assert(*next(m.begin(), 2) == 5);
69         assert(*next(m.begin(), 3) == 6);
70         assert(*next(m.begin(), 4) == 7);
71         assert(*next(m.begin(), 5) == 8);
72 
73         i = m.erase(8);
74         assert(m.size() == 5);
75         assert(i == 1);
76         assert(*next(m.begin(), 0) == 2);
77         assert(*next(m.begin(), 1) == 3);
78         assert(*next(m.begin(), 2) == 5);
79         assert(*next(m.begin(), 3) == 6);
80         assert(*next(m.begin(), 4) == 7);
81 
82         i = m.erase(3);
83         assert(m.size() == 4);
84         assert(i == 1);
85         assert(*next(m.begin(), 0) == 2);
86         assert(*next(m.begin(), 1) == 5);
87         assert(*next(m.begin(), 2) == 6);
88         assert(*next(m.begin(), 3) == 7);
89 
90         i = m.erase(6);
91         assert(m.size() == 3);
92         assert(i == 1);
93         assert(*next(m.begin(), 0) == 2);
94         assert(*next(m.begin(), 1) == 5);
95         assert(*next(m.begin(), 2) == 7);
96 
97         i = m.erase(7);
98         assert(m.size() == 2);
99         assert(i == 1);
100         assert(*next(m.begin(), 0) == 2);
101         assert(*next(m.begin(), 1) == 5);
102 
103         i = m.erase(2);
104         assert(m.size() == 1);
105         assert(i == 1);
106         assert(*next(m.begin(), 0) == 5);
107 
108         i = m.erase(5);
109         assert(m.size() == 0);
110         assert(i == 1);
111     }
112 #if __cplusplus >= 201103L
113     {
114         typedef std::set<int, std::less<int>, min_allocator<int>> M;
115         typedef int V;
116         typedef M::size_type I;
117         V ar[] =
118         {
119             1,
120             2,
121             3,
122             4,
123             5,
124             6,
125             7,
126             8
127         };
128         M m(ar, ar + sizeof(ar)/sizeof(ar[0]));
129         assert(m.size() == 8);
130         I i = m.erase(9);
131         assert(m.size() == 8);
132         assert(i == 0);
133         assert(*next(m.begin(), 0) == 1);
134         assert(*next(m.begin(), 1) == 2);
135         assert(*next(m.begin(), 2) == 3);
136         assert(*next(m.begin(), 3) == 4);
137         assert(*next(m.begin(), 4) == 5);
138         assert(*next(m.begin(), 5) == 6);
139         assert(*next(m.begin(), 6) == 7);
140         assert(*next(m.begin(), 7) == 8);
141 
142         i = m.erase(4);
143         assert(m.size() == 7);
144         assert(i == 1);
145         assert(*next(m.begin(), 0) == 1);
146         assert(*next(m.begin(), 1) == 2);
147         assert(*next(m.begin(), 2) == 3);
148         assert(*next(m.begin(), 3) == 5);
149         assert(*next(m.begin(), 4) == 6);
150         assert(*next(m.begin(), 5) == 7);
151         assert(*next(m.begin(), 6) == 8);
152 
153         i = m.erase(1);
154         assert(m.size() == 6);
155         assert(i == 1);
156         assert(*next(m.begin(), 0) == 2);
157         assert(*next(m.begin(), 1) == 3);
158         assert(*next(m.begin(), 2) == 5);
159         assert(*next(m.begin(), 3) == 6);
160         assert(*next(m.begin(), 4) == 7);
161         assert(*next(m.begin(), 5) == 8);
162 
163         i = m.erase(8);
164         assert(m.size() == 5);
165         assert(i == 1);
166         assert(*next(m.begin(), 0) == 2);
167         assert(*next(m.begin(), 1) == 3);
168         assert(*next(m.begin(), 2) == 5);
169         assert(*next(m.begin(), 3) == 6);
170         assert(*next(m.begin(), 4) == 7);
171 
172         i = m.erase(3);
173         assert(m.size() == 4);
174         assert(i == 1);
175         assert(*next(m.begin(), 0) == 2);
176         assert(*next(m.begin(), 1) == 5);
177         assert(*next(m.begin(), 2) == 6);
178         assert(*next(m.begin(), 3) == 7);
179 
180         i = m.erase(6);
181         assert(m.size() == 3);
182         assert(i == 1);
183         assert(*next(m.begin(), 0) == 2);
184         assert(*next(m.begin(), 1) == 5);
185         assert(*next(m.begin(), 2) == 7);
186 
187         i = m.erase(7);
188         assert(m.size() == 2);
189         assert(i == 1);
190         assert(*next(m.begin(), 0) == 2);
191         assert(*next(m.begin(), 1) == 5);
192 
193         i = m.erase(2);
194         assert(m.size() == 1);
195         assert(i == 1);
196         assert(*next(m.begin(), 0) == 5);
197 
198         i = m.erase(5);
199         assert(m.size() == 0);
200         assert(i == 1);
201     }
202 #endif
203 }
204