insert_iter_value.pass.cpp (3081B)
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 12 // iterator insert(const_iterator position, const value_type& x); 13 14 #include <vector> 15 #include <cassert> 16 #include <cstddef> 17 18 #include "test_macros.h" 19 #include "test_allocator.h" 20 #include "min_allocator.h" 21 #include "asan_testing.h" 22 23 int main() 24 { 25 { 26 std::vector<int> v(100); 27 std::vector<int>::iterator i = v.insert(v.cbegin() + 10, 1); 28 assert(v.size() == 101); 29 assert(is_contiguous_container_asan_correct(v)); 30 assert(i == v.begin() + 10); 31 int j; 32 for (j = 0; j < 10; ++j) 33 assert(v[j] == 0); 34 assert(v[j] == 1); 35 for (++j; j < 101; ++j) 36 assert(v[j] == 0); 37 } 38 { 39 std::vector<int> v(100); 40 while(v.size() < v.capacity()) v.push_back(0); // force reallocation 41 size_t sz = v.size(); 42 std::vector<int>::iterator i = v.insert(v.cbegin() + 10, 1); 43 assert(v.size() == sz + 1); 44 assert(is_contiguous_container_asan_correct(v)); 45 assert(i == v.begin() + 10); 46 std::size_t j; 47 for (j = 0; j < 10; ++j) 48 assert(v[j] == 0); 49 assert(v[j] == 1); 50 for (++j; j < v.size(); ++j) 51 assert(v[j] == 0); 52 } 53 { 54 std::vector<int> v(100); 55 while(v.size() < v.capacity()) v.push_back(0); 56 v.pop_back(); v.pop_back(); // force no reallocation 57 size_t sz = v.size(); 58 std::vector<int>::iterator i = v.insert(v.cbegin() + 10, 1); 59 assert(v.size() == sz + 1); 60 assert(is_contiguous_container_asan_correct(v)); 61 assert(i == v.begin() + 10); 62 std::size_t j; 63 for (j = 0; j < 10; ++j) 64 assert(v[j] == 0); 65 assert(v[j] == 1); 66 for (++j; j < v.size(); ++j) 67 assert(v[j] == 0); 68 } 69 { 70 std::vector<int, limited_allocator<int, 300> > v(100); 71 std::vector<int, limited_allocator<int, 300> >::iterator i = v.insert(v.cbegin() + 10, 1); 72 assert(v.size() == 101); 73 assert(is_contiguous_container_asan_correct(v)); 74 assert(i == v.begin() + 10); 75 int j; 76 for (j = 0; j < 10; ++j) 77 assert(v[j] == 0); 78 assert(v[j] == 1); 79 for (++j; j < 101; ++j) 80 assert(v[j] == 0); 81 } 82 #if TEST_STD_VER >= 11 83 { 84 std::vector<int, min_allocator<int>> v(100); 85 std::vector<int, min_allocator<int>>::iterator i = v.insert(v.cbegin() + 10, 1); 86 assert(v.size() == 101); 87 assert(is_contiguous_container_asan_correct(v)); 88 assert(i == v.begin() + 10); 89 int j; 90 for (j = 0; j < 10; ++j) 91 assert(v[j] == 0); 92 assert(v[j] == 1); 93 for (++j; j < 101; ++j) 94 assert(v[j] == 0); 95 } 96 #endif 97 }