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, size_type n, const value_type& x);
13
14#if _LIBCPP_DEBUG >= 1
15#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0))
16#endif
17
18#include <vector>
19#include <cassert>
20#include "../../../stack_allocator.h"
21#include "min_allocator.h"
22
23int main()
24{
25    {
26        std::vector<int> v(100);
27        std::vector<int>::iterator i = v.insert(v.cbegin() + 10, 5, 1);
28        assert(v.size() == 105);
29        assert(i == v.begin() + 10);
30        int j;
31        for (j = 0; j < 10; ++j)
32            assert(v[j] == 0);
33        for (; j < 15; ++j)
34            assert(v[j] == 1);
35        for (++j; j < 105; ++j)
36            assert(v[j] == 0);
37    }
38    {
39        std::vector<int, stack_allocator<int, 300> > v(100);
40        std::vector<int, stack_allocator<int, 300> >::iterator i = v.insert(v.cbegin() + 10, 5, 1);
41        assert(v.size() == 105);
42        assert(i == v.begin() + 10);
43        int j;
44        for (j = 0; j < 10; ++j)
45            assert(v[j] == 0);
46        for (; j < 15; ++j)
47            assert(v[j] == 1);
48        for (++j; j < 105; ++j)
49            assert(v[j] == 0);
50    }
51#if _LIBCPP_DEBUG >= 1
52    {
53        std::vector<int> c1(100);
54        std::vector<int> c2;
55        std::vector<int>::iterator i = c1.insert(c2.cbegin() + 10, 5, 1);
56        assert(false);
57    }
58#endif
59#if __cplusplus >= 201103L
60    {
61        std::vector<int, min_allocator<int>> v(100);
62        std::vector<int, min_allocator<int>>::iterator i = v.insert(v.cbegin() + 10, 5, 1);
63        assert(v.size() == 105);
64        assert(i == v.begin() + 10);
65        int j;
66        for (j = 0; j < 10; ++j)
67            assert(v[j] == 0);
68        for (; j < 15; ++j)
69            assert(v[j] == 1);
70        for (++j; j < 105; ++j)
71            assert(v[j] == 0);
72    }
73    {
74        std::vector<int, min_allocator<int>> v(100);
75        std::vector<int, min_allocator<int>>::iterator i = v.insert(v.cbegin() + 10, 5, 1);
76        assert(v.size() == 105);
77        assert(i == v.begin() + 10);
78        int j;
79        for (j = 0; j < 10; ++j)
80            assert(v[j] == 0);
81        for (; j < 15; ++j)
82            assert(v[j] == 1);
83        for (++j; j < 105; ++j)
84            assert(v[j] == 0);
85    }
86#if _LIBCPP_DEBUG >= 1
87    {
88        std::vector<int, min_allocator<int>> c1(100);
89        std::vector<int, min_allocator<int>> c2;
90        std::vector<int, min_allocator<int>>::iterator i = c1.insert(c2.cbegin() + 10, 5, 1);
91        assert(false);
92    }
93#endif
94#endif
95}
96