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 
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 < 105; ++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 #if __cplusplus >= 201103L
56     {
57         std::vector<bool, min_allocator<bool>> v(100);
58         bool a[] = {1, 0, 0, 1, 1};
59         const unsigned N = sizeof(a)/sizeof(a[0]);
60         std::vector<bool, min_allocator<bool>>::iterator i = v.insert(v.cbegin() + 10, input_iterator<const bool*>(a),
61                                         input_iterator<const bool*>(a+N));
62         assert(v.size() == 100 + N);
63         assert(i == v.begin() + 10);
64         int j;
65         for (j = 0; j < 10; ++j)
66             assert(v[j] == 0);
67         for (int k = 0; k < N; ++j, ++k)
68             assert(v[j] == a[k]);
69         for (; j < 105; ++j)
70             assert(v[j] == 0);
71     }
72     {
73         std::vector<bool, min_allocator<bool>> v(100);
74         bool a[] = {1, 0, 0, 1, 1};
75         const unsigned N = sizeof(a)/sizeof(a[0]);
76         std::vector<bool, min_allocator<bool>>::iterator i = v.insert(v.cbegin() + 10, forward_iterator<const bool*>(a),
77                                         forward_iterator<const bool*>(a+N));
78         assert(v.size() == 100 + N);
79         assert(i == v.begin() + 10);
80         int j;
81         for (j = 0; j < 10; ++j)
82             assert(v[j] == 0);
83         for (int k = 0; k < N; ++j, ++k)
84             assert(v[j] == a[k]);
85         for (; j < 105; ++j)
86             assert(v[j] == 0);
87     }
88 #endif
89 }
90