• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 // <vector>
11 
12 // iterator erase(const_iterator first, const_iterator last);
13 
14 #include <vector>
15 #include <cassert>
16 
17 #include "min_allocator.h"
18 #include "asan_testing.h"
19 
main()20 int main()
21 {
22     int a1[] = {1, 2, 3};
23     {
24         std::vector<int> l1(a1, a1+3);
25         assert(is_contiguous_container_asan_correct(l1));
26         std::vector<int>::iterator i = l1.erase(l1.cbegin(), l1.cbegin());
27         assert(l1.size() == 3);
28         assert(distance(l1.cbegin(), l1.cend()) == 3);
29         assert(i == l1.begin());
30         assert(is_contiguous_container_asan_correct(l1));
31     }
32     {
33         std::vector<int> l1(a1, a1+3);
34         assert(is_contiguous_container_asan_correct(l1));
35         std::vector<int>::iterator i = l1.erase(l1.cbegin(), next(l1.cbegin()));
36         assert(l1.size() == 2);
37         assert(distance(l1.cbegin(), l1.cend()) == 2);
38         assert(i == l1.begin());
39         assert(l1 == std::vector<int>(a1+1, a1+3));
40         assert(is_contiguous_container_asan_correct(l1));
41     }
42     {
43         std::vector<int> l1(a1, a1+3);
44         assert(is_contiguous_container_asan_correct(l1));
45         std::vector<int>::iterator i = l1.erase(l1.cbegin(), next(l1.cbegin(), 2));
46         assert(l1.size() == 1);
47         assert(distance(l1.cbegin(), l1.cend()) == 1);
48         assert(i == l1.begin());
49         assert(l1 == std::vector<int>(a1+2, a1+3));
50         assert(is_contiguous_container_asan_correct(l1));
51     }
52     {
53         std::vector<int> l1(a1, a1+3);
54         assert(is_contiguous_container_asan_correct(l1));
55         std::vector<int>::iterator i = l1.erase(l1.cbegin(), next(l1.cbegin(), 3));
56         assert(l1.size() == 0);
57         assert(distance(l1.cbegin(), l1.cend()) == 0);
58         assert(i == l1.begin());
59         assert(is_contiguous_container_asan_correct(l1));
60     }
61     {
62         std::vector<std::vector<int> > outer(2, std::vector<int>(1));
63         assert(is_contiguous_container_asan_correct(outer));
64         assert(is_contiguous_container_asan_correct(outer[0]));
65         assert(is_contiguous_container_asan_correct(outer[1]));
66         outer.erase(outer.begin(), outer.begin());
67         assert(outer.size() == 2);
68         assert(outer[0].size() == 1);
69         assert(outer[1].size() == 1);
70         assert(is_contiguous_container_asan_correct(outer));
71         assert(is_contiguous_container_asan_correct(outer[0]));
72         assert(is_contiguous_container_asan_correct(outer[1]));
73     }
74 #if __cplusplus >= 201103L
75     {
76         std::vector<int, min_allocator<int>> l1(a1, a1+3);
77         assert(is_contiguous_container_asan_correct(l1));
78         std::vector<int, min_allocator<int>>::iterator i = l1.erase(l1.cbegin(), l1.cbegin());
79         assert(l1.size() == 3);
80         assert(distance(l1.cbegin(), l1.cend()) == 3);
81         assert(i == l1.begin());
82         assert(is_contiguous_container_asan_correct(l1));
83     }
84     {
85         std::vector<int, min_allocator<int>> l1(a1, a1+3);
86         assert(is_contiguous_container_asan_correct(l1));
87         std::vector<int, min_allocator<int>>::iterator i = l1.erase(l1.cbegin(), next(l1.cbegin()));
88         assert(l1.size() == 2);
89         assert(distance(l1.cbegin(), l1.cend()) == 2);
90         assert(i == l1.begin());
91         assert((l1 == std::vector<int, min_allocator<int>>(a1+1, a1+3)));
92         assert(is_contiguous_container_asan_correct(l1));
93     }
94     {
95         std::vector<int, min_allocator<int>> l1(a1, a1+3);
96         assert(is_contiguous_container_asan_correct(l1));
97         std::vector<int, min_allocator<int>>::iterator i = l1.erase(l1.cbegin(), next(l1.cbegin(), 2));
98         assert(l1.size() == 1);
99         assert(distance(l1.cbegin(), l1.cend()) == 1);
100         assert(i == l1.begin());
101         assert((l1 == std::vector<int, min_allocator<int>>(a1+2, a1+3)));
102         assert(is_contiguous_container_asan_correct(l1));
103     }
104     {
105         std::vector<int, min_allocator<int>> l1(a1, a1+3);
106         assert(is_contiguous_container_asan_correct(l1));
107         std::vector<int, min_allocator<int>>::iterator i = l1.erase(l1.cbegin(), next(l1.cbegin(), 3));
108         assert(l1.size() == 0);
109         assert(distance(l1.cbegin(), l1.cend()) == 0);
110         assert(i == l1.begin());
111         assert(is_contiguous_container_asan_correct(l1));
112     }
113     {
114         std::vector<std::vector<int, min_allocator<int>>, min_allocator<std::vector<int, min_allocator<int>>>> outer(2, std::vector<int, min_allocator<int>>(1));
115         assert(is_contiguous_container_asan_correct(outer));
116         assert(is_contiguous_container_asan_correct(outer[0]));
117         assert(is_contiguous_container_asan_correct(outer[1]));
118         outer.erase(outer.begin(), outer.begin());
119         assert(outer.size() == 2);
120         assert(outer[0].size() == 1);
121         assert(outer[1].size() == 1);
122         assert(is_contiguous_container_asan_correct(outer));
123         assert(is_contiguous_container_asan_correct(outer[0]));
124         assert(is_contiguous_container_asan_correct(outer[1]));
125     }
126 #endif
127 }
128