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// <list>
11
12// iterator erase(const_iterator first, const_iterator last);
13
14#include <list>
15#include <cassert>
16
17#include "min_allocator.h"
18
19int main()
20{
21    int a1[] = {1, 2, 3};
22    {
23        std::list<int> l1(a1, a1+3);
24        std::list<int>::iterator i = l1.erase(l1.cbegin(), l1.cbegin());
25        assert(l1.size() == 3);
26        assert(distance(l1.cbegin(), l1.cend()) == 3);
27        assert(i == l1.begin());
28    }
29    {
30        std::list<int> l1(a1, a1+3);
31        std::list<int>::iterator i = l1.erase(l1.cbegin(), next(l1.cbegin()));
32        assert(l1.size() == 2);
33        assert(distance(l1.cbegin(), l1.cend()) == 2);
34        assert(i == l1.begin());
35        assert(l1 == std::list<int>(a1+1, a1+3));
36    }
37    {
38        std::list<int> l1(a1, a1+3);
39        std::list<int>::iterator i = l1.erase(l1.cbegin(), next(l1.cbegin(), 2));
40        assert(l1.size() == 1);
41        assert(distance(l1.cbegin(), l1.cend()) == 1);
42        assert(i == l1.begin());
43        assert(l1 == std::list<int>(a1+2, a1+3));
44    }
45    {
46        std::list<int> l1(a1, a1+3);
47        std::list<int>::iterator i = l1.erase(l1.cbegin(), next(l1.cbegin(), 3));
48        assert(l1.size() == 0);
49        assert(distance(l1.cbegin(), l1.cend()) == 0);
50        assert(i == l1.begin());
51    }
52#if __cplusplus >= 201103L
53    {
54        std::list<int, min_allocator<int>> l1(a1, a1+3);
55        std::list<int, min_allocator<int>>::iterator i = l1.erase(l1.cbegin(), l1.cbegin());
56        assert(l1.size() == 3);
57        assert(distance(l1.cbegin(), l1.cend()) == 3);
58        assert(i == l1.begin());
59    }
60    {
61        std::list<int, min_allocator<int>> l1(a1, a1+3);
62        std::list<int, min_allocator<int>>::iterator i = l1.erase(l1.cbegin(), next(l1.cbegin()));
63        assert(l1.size() == 2);
64        assert(distance(l1.cbegin(), l1.cend()) == 2);
65        assert(i == l1.begin());
66        assert((l1 == std::list<int, min_allocator<int>>(a1+1, a1+3)));
67    }
68    {
69        std::list<int, min_allocator<int>> l1(a1, a1+3);
70        std::list<int, min_allocator<int>>::iterator i = l1.erase(l1.cbegin(), next(l1.cbegin(), 2));
71        assert(l1.size() == 1);
72        assert(distance(l1.cbegin(), l1.cend()) == 1);
73        assert(i == l1.begin());
74        assert((l1 == std::list<int, min_allocator<int>>(a1+2, a1+3)));
75    }
76    {
77        std::list<int, min_allocator<int>> l1(a1, a1+3);
78        std::list<int, min_allocator<int>>::iterator i = l1.erase(l1.cbegin(), next(l1.cbegin(), 3));
79        assert(l1.size() == 0);
80        assert(distance(l1.cbegin(), l1.cend()) == 0);
81        assert(i == l1.begin());
82    }
83#endif
84}
85