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