1 //===----------------------------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 // <vector>
10 // vector<bool>
11 
12 // iterator erase(const_iterator first, const_iterator last);
13 
14 #include <vector>
15 #include <cassert>
16 
17 #include "min_allocator.h"
18 
19 int main(int, char**)
20 {
21     bool a1[] = {1, 0, 1};
22     {
23         std::vector<bool> l1(a1, a1+3);
24         std::vector<bool>::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::vector<bool> l1(a1, a1+3);
31         std::vector<bool>::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::vector<bool>(a1+1, a1+3));
36     }
37     {
38         std::vector<bool> l1(a1, a1+3);
39         std::vector<bool>::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::vector<bool>(a1+2, a1+3));
44     }
45     {
46         std::vector<bool> l1(a1, a1+3);
47         std::vector<bool>::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 TEST_STD_VER >= 11
53     {
54         std::vector<bool, min_allocator<bool>> l1(a1, a1+3);
55         std::vector<bool, min_allocator<bool>>::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::vector<bool, min_allocator<bool>> l1(a1, a1+3);
62         std::vector<bool, min_allocator<bool>>::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::vector<bool, min_allocator<bool>>(a1+1, a1+3)));
67     }
68     {
69         std::vector<bool, min_allocator<bool>> l1(a1, a1+3);
70         std::vector<bool, min_allocator<bool>>::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::vector<bool, min_allocator<bool>>(a1+2, a1+3)));
75     }
76     {
77         std::vector<bool, min_allocator<bool>> l1(a1, a1+3);
78         std::vector<bool, min_allocator<bool>>::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   return 0;
86 }
87