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