Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / libc++ / trunk / test / containers / sequences / vector / vector.modifiers / erase_iter_iter.pass.cpp
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
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 }