//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is dual licensed under the MIT and the University of Illinois Open // Source Licenses. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // insert_iterator // requires CopyConstructible // insert_iterator& // operator=(const Cont::value_type& value); #include #include #include #include "nasty_containers.hpp" template void test(C c1, typename C::difference_type j, typename C::value_type x1, typename C::value_type x2, typename C::value_type x3, const C& c2) { std::insert_iterator q(c1, c1.begin() + j); q = x1; q = x2; q = x3; assert(c1 == c2); } template void insert3at(C& c, typename C::iterator i, typename C::value_type x1, typename C::value_type x2, typename C::value_type x3) { i = c.insert(i, x1); i = c.insert(++i, x2); c.insert(++i, x3); } int main() { { typedef std::vector C; C c1; for (int i = 0; i < 3; ++i) c1.push_back(i); C c2 = c1; insert3at(c2, c2.begin(), 'a', 'b', 'c'); test(c1, 0, 'a', 'b', 'c', c2); c2 = c1; insert3at(c2, c2.begin()+1, 'a', 'b', 'c'); test(c1, 1, 'a', 'b', 'c', c2); c2 = c1; insert3at(c2, c2.begin()+2, 'a', 'b', 'c'); test(c1, 2, 'a', 'b', 'c', c2); c2 = c1; insert3at(c2, c2.begin()+3, 'a', 'b', 'c'); test(c1, 3, 'a', 'b', 'c', c2); } { typedef nasty_vector C; C c1; for (int i = 0; i < 3; ++i) c1.push_back(i); C c2 = c1; insert3at(c2, c2.begin(), 'a', 'b', 'c'); test(c1, 0, 'a', 'b', 'c', c2); c2 = c1; insert3at(c2, c2.begin()+1, 'a', 'b', 'c'); test(c1, 1, 'a', 'b', 'c', c2); c2 = c1; insert3at(c2, c2.begin()+2, 'a', 'b', 'c'); test(c1, 2, 'a', 'b', 'c', c2); c2 = c1; insert3at(c2, c2.begin()+3, 'a', 'b', 'c'); test(c1, 3, 'a', 'b', 'c', c2); } }