1 //===----------------------------------------------------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // UNSUPPORTED: c++98, c++03
14 // template <class... Args> iterator emplace(const_iterator pos, Args&&... args);
19 #include "test_macros.h"
20 #include "test_allocator.h"
21 #include "min_allocator.h"
22 #include "asan_testing.h"
30 A& operator=(const A&);
52 int geti() const {return i_;}
53 double getd() const {return d_;}
60 std::vector<A>::iterator i = c.emplace(c.cbegin(), 2, 3.5);
61 assert(i == c.begin());
62 assert(c.size() == 1);
63 assert(c.front().geti() == 2);
64 assert(c.front().getd() == 3.5);
65 assert(is_contiguous_container_asan_correct(c));
66 i = c.emplace(c.cend(), 3, 4.5);
67 assert(i == c.end()-1);
68 assert(c.size() == 2);
69 assert(c.front().geti() == 2);
70 assert(c.front().getd() == 3.5);
71 assert(c.back().geti() == 3);
72 assert(c.back().getd() == 4.5);
73 assert(is_contiguous_container_asan_correct(c));
74 i = c.emplace(c.cbegin()+1, 4, 6.5);
75 assert(i == c.begin()+1);
76 assert(c.size() == 3);
77 assert(c.front().geti() == 2);
78 assert(c.front().getd() == 3.5);
79 assert(c[1].geti() == 4);
80 assert(c[1].getd() == 6.5);
81 assert(c.back().geti() == 3);
82 assert(c.back().getd() == 4.5);
83 assert(is_contiguous_container_asan_correct(c));
86 std::vector<A, limited_allocator<A, 7> > c;
87 std::vector<A, limited_allocator<A, 7> >::iterator i = c.emplace(c.cbegin(), 2, 3.5);
88 assert(i == c.begin());
89 assert(c.size() == 1);
90 assert(c.front().geti() == 2);
91 assert(c.front().getd() == 3.5);
92 assert(is_contiguous_container_asan_correct(c));
93 i = c.emplace(c.cend(), 3, 4.5);
94 assert(i == c.end()-1);
95 assert(c.size() == 2);
96 assert(c.front().geti() == 2);
97 assert(c.front().getd() == 3.5);
98 assert(c.back().geti() == 3);
99 assert(c.back().getd() == 4.5);
100 assert(is_contiguous_container_asan_correct(c));
101 i = c.emplace(c.cbegin()+1, 4, 6.5);
102 assert(i == c.begin()+1);
103 assert(c.size() == 3);
104 assert(c.front().geti() == 2);
105 assert(c.front().getd() == 3.5);
106 assert(c[1].geti() == 4);
107 assert(c[1].getd() == 6.5);
108 assert(c.back().geti() == 3);
109 assert(c.back().getd() == 4.5);
110 assert(is_contiguous_container_asan_correct(c));
113 std::vector<A, min_allocator<A>> c;
114 std::vector<A, min_allocator<A>>::iterator i = c.emplace(c.cbegin(), 2, 3.5);
115 assert(i == c.begin());
116 assert(c.size() == 1);
117 assert(c.front().geti() == 2);
118 assert(c.front().getd() == 3.5);
119 i = c.emplace(c.cend(), 3, 4.5);
120 assert(i == c.end()-1);
121 assert(c.size() == 2);
122 assert(c.front().geti() == 2);
123 assert(c.front().getd() == 3.5);
124 assert(c.back().geti() == 3);
125 assert(c.back().getd() == 4.5);
126 i = c.emplace(c.cbegin()+1, 4, 6.5);
127 assert(i == c.begin()+1);
128 assert(c.size() == 3);
129 assert(c.front().geti() == 2);
130 assert(c.front().getd() == 3.5);
131 assert(c[1].geti() == 4);
132 assert(c[1].getd() == 6.5);
133 assert(c.back().geti() == 3);
134 assert(c.back().getd() == 4.5);