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 // vector<bool>
12 
13 // template <class Iter>
14 //   iterator insert(const_iterator position, Iter first, Iter last);
15 
16 #include <vector>
17 #include <cassert>
18 #include "test_iterators.h"
19 #include "min_allocator.h"
20 
main()21 int main()
22 {
23     {
24         std::vector<bool> v(100);
25         bool a[] = {1, 0, 0, 1, 1};
26         const unsigned N = sizeof(a)/sizeof(a[0]);
27         std::vector<bool>::iterator i = v.insert(v.cbegin() + 10, input_iterator<const bool*>(a),
28                                         input_iterator<const bool*>(a+N));
29         assert(v.size() == 100 + N);
30         assert(i == v.begin() + 10);
31         int j;
32         for (j = 0; j < 10; ++j)
33             assert(v[j] == 0);
34         for (int k = 0; k < N; ++j, ++k)
35             assert(v[j] == a[k]);
36         for (; j < v.size(); ++j)
37             assert(v[j] == 0);
38     }
39     {
40         std::vector<bool> v(100);
41         bool a[] = {1, 0, 0, 1, 1};
42         const unsigned N = sizeof(a)/sizeof(a[0]);
43         std::vector<bool>::iterator i = v.insert(v.cbegin() + 10, forward_iterator<const bool*>(a),
44                                         forward_iterator<const bool*>(a+N));
45         assert(v.size() == 100 + N);
46         assert(i == v.begin() + 10);
47         int j;
48         for (j = 0; j < 10; ++j)
49             assert(v[j] == 0);
50         for (int k = 0; k < N; ++j, ++k)
51             assert(v[j] == a[k]);
52         for (; j < 105; ++j)
53             assert(v[j] == 0);
54     }
55     {
56         std::vector<bool> v(100);
57         while(v.size() < v.capacity()) v.push_back(false);
58         size_t sz = v.size();
59         bool a[] = {1, 0, 0, 1, 1};
60         const unsigned N = sizeof(a)/sizeof(a[0]);
61         std::vector<bool>::iterator i = v.insert(v.cbegin() + 10, forward_iterator<const bool*>(a),
62                                         forward_iterator<const bool*>(a+N));
63         assert(v.size() == sz + N);
64         assert(i == v.begin() + 10);
65         int j;
66         for (j = 0; j < 10; ++j)
67             assert(v[j] == 0);
68         for (int k = 0; k < N; ++j, ++k)
69             assert(v[j] == a[k]);
70         for (; j < v.size(); ++j)
71             assert(v[j] == 0);
72     }
73     {
74         std::vector<bool> v(100);
75         while(v.size() < v.capacity()) v.push_back(false);
76         v.pop_back(); v.pop_back(); v.pop_back();
77         size_t sz = v.size();
78         bool a[] = {1, 0, 0, 1, 1};
79         const unsigned N = sizeof(a)/sizeof(a[0]);
80         std::vector<bool>::iterator i = v.insert(v.cbegin() + 10, forward_iterator<const bool*>(a),
81                                         forward_iterator<const bool*>(a+N));
82         assert(v.size() == sz + N);
83         assert(i == v.begin() + 10);
84         int j;
85         for (j = 0; j < 10; ++j)
86             assert(v[j] == 0);
87         for (int k = 0; k < N; ++j, ++k)
88             assert(v[j] == a[k]);
89         for (; j < v.size(); ++j)
90             assert(v[j] == 0);
91     }
92 #if __cplusplus >= 201103L
93     {
94         std::vector<bool, min_allocator<bool>> v(100);
95         bool a[] = {1, 0, 0, 1, 1};
96         const unsigned N = sizeof(a)/sizeof(a[0]);
97         std::vector<bool, min_allocator<bool>>::iterator i = v.insert(v.cbegin() + 10, input_iterator<const bool*>(a),
98                                         input_iterator<const bool*>(a+N));
99         assert(v.size() == 100 + N);
100         assert(i == v.begin() + 10);
101         int j;
102         for (j = 0; j < 10; ++j)
103             assert(v[j] == 0);
104         for (int k = 0; k < N; ++j, ++k)
105             assert(v[j] == a[k]);
106         for (; j < v.size(); ++j)
107             assert(v[j] == 0);
108     }
109     {
110         std::vector<bool, min_allocator<bool>> v(100);
111         bool a[] = {1, 0, 0, 1, 1};
112         const unsigned N = sizeof(a)/sizeof(a[0]);
113         std::vector<bool, min_allocator<bool>>::iterator i = v.insert(v.cbegin() + 10, forward_iterator<const bool*>(a),
114                                         forward_iterator<const bool*>(a+N));
115         assert(v.size() == 100 + N);
116         assert(i == v.begin() + 10);
117         int j;
118         for (j = 0; j < 10; ++j)
119             assert(v[j] == 0);
120         for (int k = 0; k < N; ++j, ++k)
121             assert(v[j] == a[k]);
122         for (; j < v.size(); ++j)
123             assert(v[j] == 0);
124     }
125 #endif
126 }
127