1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===//
2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant//                     The LLVM Compiler Infrastructure
4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details.
7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===//
9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// <set>
11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// class set
13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// iterator erase(const_iterator position);
15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <set>
17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert>
18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
19061d0cc4db18d17bf01ed14c5db0be098205bd47Marshall Clow#include "min_allocator.h"
2070342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant
21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main()
22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{
23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef std::set<int> M;
25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef int V;
26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef M::iterator I;
27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        V ar[] =
28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        {
29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            1,
30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            2,
31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            3,
32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            4,
33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            5,
34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            6,
35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            7,
36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            8
37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        };
38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        M m(ar, ar + sizeof(ar)/sizeof(ar[0]));
39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(m.size() == 8);
40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        I i = m.erase(next(m.cbegin(), 3));
41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(m.size() == 7);
42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(i == next(m.begin(), 3));
43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(m.begin(), 0) == 1);
44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(m.begin(), 1) == 2);
45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(m.begin(), 2) == 3);
46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(m.begin(), 3) == 5);
47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(m.begin(), 4) == 6);
48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(m.begin(), 5) == 7);
49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(m.begin(), 6) == 8);
50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        i = m.erase(next(m.cbegin(), 0));
52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(m.size() == 6);
53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(i == m.begin());
54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(m.begin(), 0) == 2);
55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(m.begin(), 1) == 3);
56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(m.begin(), 2) == 5);
57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(m.begin(), 3) == 6);
58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(m.begin(), 4) == 7);
59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(m.begin(), 5) == 8);
60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        i = m.erase(next(m.cbegin(), 5));
62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(m.size() == 5);
63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(i == m.end());
64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(m.begin(), 0) == 2);
65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(m.begin(), 1) == 3);
66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(m.begin(), 2) == 5);
67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(m.begin(), 3) == 6);
68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(m.begin(), 4) == 7);
69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        i = m.erase(next(m.cbegin(), 1));
71bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(m.size() == 4);
72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(i == next(m.begin()));
73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(m.begin(), 0) == 2);
74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(m.begin(), 1) == 5);
75bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(m.begin(), 2) == 6);
76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(m.begin(), 3) == 7);
77bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
78bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        i = m.erase(next(m.cbegin(), 2));
79bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(m.size() == 3);
80bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(i == next(m.begin(), 2));
81bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(m.begin(), 0) == 2);
82bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(m.begin(), 1) == 5);
83bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(m.begin(), 2) == 7);
84bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
85bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        i = m.erase(next(m.cbegin(), 2));
86bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(m.size() == 2);
87bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(i == next(m.begin(), 2));
88bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(m.begin(), 0) == 2);
89bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(m.begin(), 1) == 5);
90bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
91bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        i = m.erase(next(m.cbegin(), 0));
92bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(m.size() == 1);
93bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(i == next(m.begin(), 0));
94bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(m.begin(), 0) == 5);
95bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
96bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        i = m.erase(m.cbegin());
97bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(m.size() == 0);
98bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(i == m.begin());
99bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(i == m.end());
100bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
10170342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant#if __cplusplus >= 201103L
10270342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant    {
10370342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        typedef std::set<int, std::less<int>, min_allocator<int>> M;
10470342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        typedef int V;
10570342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        typedef M::iterator I;
10670342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        V ar[] =
10770342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        {
10870342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant            1,
10970342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant            2,
11070342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant            3,
11170342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant            4,
11270342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant            5,
11370342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant            6,
11470342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant            7,
11570342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant            8
11670342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        };
11770342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        M m(ar, ar + sizeof(ar)/sizeof(ar[0]));
11870342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(m.size() == 8);
11970342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        I i = m.erase(next(m.cbegin(), 3));
12070342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(m.size() == 7);
12170342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(i == next(m.begin(), 3));
12270342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(*next(m.begin(), 0) == 1);
12370342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(*next(m.begin(), 1) == 2);
12470342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(*next(m.begin(), 2) == 3);
12570342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(*next(m.begin(), 3) == 5);
12670342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(*next(m.begin(), 4) == 6);
12770342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(*next(m.begin(), 5) == 7);
12870342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(*next(m.begin(), 6) == 8);
12970342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant
13070342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        i = m.erase(next(m.cbegin(), 0));
13170342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(m.size() == 6);
13270342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(i == m.begin());
13370342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(*next(m.begin(), 0) == 2);
13470342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(*next(m.begin(), 1) == 3);
13570342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(*next(m.begin(), 2) == 5);
13670342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(*next(m.begin(), 3) == 6);
13770342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(*next(m.begin(), 4) == 7);
13870342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(*next(m.begin(), 5) == 8);
13970342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant
14070342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        i = m.erase(next(m.cbegin(), 5));
14170342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(m.size() == 5);
14270342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(i == m.end());
14370342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(*next(m.begin(), 0) == 2);
14470342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(*next(m.begin(), 1) == 3);
14570342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(*next(m.begin(), 2) == 5);
14670342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(*next(m.begin(), 3) == 6);
14770342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(*next(m.begin(), 4) == 7);
14870342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant
14970342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        i = m.erase(next(m.cbegin(), 1));
15070342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(m.size() == 4);
15170342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(i == next(m.begin()));
15270342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(*next(m.begin(), 0) == 2);
15370342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(*next(m.begin(), 1) == 5);
15470342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(*next(m.begin(), 2) == 6);
15570342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(*next(m.begin(), 3) == 7);
15670342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant
15770342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        i = m.erase(next(m.cbegin(), 2));
15870342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(m.size() == 3);
15970342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(i == next(m.begin(), 2));
16070342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(*next(m.begin(), 0) == 2);
16170342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(*next(m.begin(), 1) == 5);
16270342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(*next(m.begin(), 2) == 7);
16370342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant
16470342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        i = m.erase(next(m.cbegin(), 2));
16570342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(m.size() == 2);
16670342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(i == next(m.begin(), 2));
16770342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(*next(m.begin(), 0) == 2);
16870342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(*next(m.begin(), 1) == 5);
16970342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant
17070342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        i = m.erase(next(m.cbegin(), 0));
17170342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(m.size() == 1);
17270342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(i == next(m.begin(), 0));
17370342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(*next(m.begin(), 0) == 5);
17470342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant
17570342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        i = m.erase(m.cbegin());
17670342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(m.size() == 0);
17770342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(i == m.begin());
17870342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant        assert(i == m.end());
17970342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant    }
18070342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant#endif
181bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}
182