erase_iter.pass.cpp revision b64f8b07c104c6cc986570ac8ee0ed16a9f23976
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
19int main()
20{
21    {
22        typedef std::map<int, double> M;
23        typedef std::pair<int, double> P;
24        typedef M::iterator I;
25        P ar[] =
26        {
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        I i = m.erase(next(m.cbegin(), 3));
39        assert(m.size() == 7);
40        assert(i == next(m.begin(), 3));
41        assert(m.begin()->first == 1);
42        assert(m.begin()->second == 1.5);
43        assert(next(m.begin())->first == 2);
44        assert(next(m.begin())->second == 2.5);
45        assert(next(m.begin(), 2)->first == 3);
46        assert(next(m.begin(), 2)->second == 3.5);
47        assert(next(m.begin(), 3)->first == 5);
48        assert(next(m.begin(), 3)->second == 5.5);
49        assert(next(m.begin(), 4)->first == 6);
50        assert(next(m.begin(), 4)->second == 6.5);
51        assert(next(m.begin(), 5)->first == 7);
52        assert(next(m.begin(), 5)->second == 7.5);
53        assert(next(m.begin(), 6)->first == 8);
54        assert(next(m.begin(), 6)->second == 8.5);
55
56        i = m.erase(next(m.cbegin(), 0));
57        assert(m.size() == 6);
58        assert(i == m.begin());
59        assert(m.begin()->first == 2);
60        assert(m.begin()->second == 2.5);
61        assert(next(m.begin())->first == 3);
62        assert(next(m.begin())->second == 3.5);
63        assert(next(m.begin(), 2)->first == 5);
64        assert(next(m.begin(), 2)->second == 5.5);
65        assert(next(m.begin(), 3)->first == 6);
66        assert(next(m.begin(), 3)->second == 6.5);
67        assert(next(m.begin(), 4)->first == 7);
68        assert(next(m.begin(), 4)->second == 7.5);
69        assert(next(m.begin(), 5)->first == 8);
70        assert(next(m.begin(), 5)->second == 8.5);
71
72        i = m.erase(next(m.cbegin(), 5));
73        assert(m.size() == 5);
74        assert(i == m.end());
75        assert(m.begin()->first == 2);
76        assert(m.begin()->second == 2.5);
77        assert(next(m.begin())->first == 3);
78        assert(next(m.begin())->second == 3.5);
79        assert(next(m.begin(), 2)->first == 5);
80        assert(next(m.begin(), 2)->second == 5.5);
81        assert(next(m.begin(), 3)->first == 6);
82        assert(next(m.begin(), 3)->second == 6.5);
83        assert(next(m.begin(), 4)->first == 7);
84        assert(next(m.begin(), 4)->second == 7.5);
85
86        i = m.erase(next(m.cbegin(), 1));
87        assert(m.size() == 4);
88        assert(i == next(m.begin()));
89        assert(m.begin()->first == 2);
90        assert(m.begin()->second == 2.5);
91        assert(next(m.begin())->first == 5);
92        assert(next(m.begin())->second == 5.5);
93        assert(next(m.begin(), 2)->first == 6);
94        assert(next(m.begin(), 2)->second == 6.5);
95        assert(next(m.begin(), 3)->first == 7);
96        assert(next(m.begin(), 3)->second == 7.5);
97
98        i = m.erase(next(m.cbegin(), 2));
99        assert(m.size() == 3);
100        assert(i == next(m.begin(), 2));
101        assert(m.begin()->first == 2);
102        assert(m.begin()->second == 2.5);
103        assert(next(m.begin())->first == 5);
104        assert(next(m.begin())->second == 5.5);
105        assert(next(m.begin(), 2)->first == 7);
106        assert(next(m.begin(), 2)->second == 7.5);
107
108        i = m.erase(next(m.cbegin(), 2));
109        assert(m.size() == 2);
110        assert(i == next(m.begin(), 2));
111        assert(m.begin()->first == 2);
112        assert(m.begin()->second == 2.5);
113        assert(next(m.begin())->first == 5);
114        assert(next(m.begin())->second == 5.5);
115
116        i = m.erase(next(m.cbegin(), 0));
117        assert(m.size() == 1);
118        assert(i == next(m.begin(), 0));
119        assert(m.begin()->first == 5);
120        assert(m.begin()->second == 5.5);
121
122        i = m.erase(m.cbegin());
123        assert(m.size() == 0);
124        assert(i == m.begin());
125        assert(i == m.end());
126    }
127}
128