1 //===----------------------------------------------------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
12 // iterator erase(const_iterator first, const_iterator last);
17 #include "min_allocator.h"
18 #include "asan_testing.h"
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));
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));
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));
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));
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]));
74 #if __cplusplus >= 201103L
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));
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));
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));
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));
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]));