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 //===----------------------------------------------------------------------===//
12 // void push_back(value_type&& x);
16 #include "../../../MoveOnly.h"
17 #include "../../../stack_allocator.h"
18 #include "min_allocator.h"
19 #include "asan_testing.h"
23 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
25 std::vector<MoveOnly> c;
26 c.push_back(MoveOnly(0));
27 assert(c.size() == 1);
28 assert(is_contiguous_container_asan_correct(c));
29 for (int j = 0; j < c.size(); ++j)
30 assert(c[j] == MoveOnly(j));
31 c.push_back(MoveOnly(1));
32 assert(c.size() == 2);
33 assert(is_contiguous_container_asan_correct(c));
34 for (int j = 0; j < c.size(); ++j)
35 assert(c[j] == MoveOnly(j));
36 c.push_back(MoveOnly(2));
37 assert(c.size() == 3);
38 assert(is_contiguous_container_asan_correct(c));
39 for (int j = 0; j < c.size(); ++j)
40 assert(c[j] == MoveOnly(j));
41 c.push_back(MoveOnly(3));
42 assert(c.size() == 4);
43 assert(is_contiguous_container_asan_correct(c));
44 for (int j = 0; j < c.size(); ++j)
45 assert(c[j] == MoveOnly(j));
46 c.push_back(MoveOnly(4));
47 assert(c.size() == 5);
48 assert(is_contiguous_container_asan_correct(c));
49 for (int j = 0; j < c.size(); ++j)
50 assert(c[j] == MoveOnly(j));
53 std::vector<MoveOnly, stack_allocator<MoveOnly, 15> > c;
54 c.push_back(MoveOnly(0));
55 assert(c.size() == 1);
56 assert(is_contiguous_container_asan_correct(c));
57 for (int j = 0; j < c.size(); ++j)
58 assert(c[j] == MoveOnly(j));
59 c.push_back(MoveOnly(1));
60 assert(c.size() == 2);
61 assert(is_contiguous_container_asan_correct(c));
62 for (int j = 0; j < c.size(); ++j)
63 assert(c[j] == MoveOnly(j));
64 c.push_back(MoveOnly(2));
65 assert(c.size() == 3);
66 assert(is_contiguous_container_asan_correct(c));
67 for (int j = 0; j < c.size(); ++j)
68 assert(c[j] == MoveOnly(j));
69 c.push_back(MoveOnly(3));
70 assert(c.size() == 4);
71 assert(is_contiguous_container_asan_correct(c));
72 for (int j = 0; j < c.size(); ++j)
73 assert(c[j] == MoveOnly(j));
74 c.push_back(MoveOnly(4));
75 assert(c.size() == 5);
76 assert(is_contiguous_container_asan_correct(c));
77 for (int j = 0; j < c.size(); ++j)
78 assert(c[j] == MoveOnly(j));
80 #if __cplusplus >= 201103L
82 std::vector<MoveOnly, min_allocator<MoveOnly>> c;
83 c.push_back(MoveOnly(0));
84 assert(c.size() == 1);
85 assert(is_contiguous_container_asan_correct(c));
86 for (int j = 0; j < c.size(); ++j)
87 assert(c[j] == MoveOnly(j));
88 c.push_back(MoveOnly(1));
89 assert(c.size() == 2);
90 assert(is_contiguous_container_asan_correct(c));
91 for (int j = 0; j < c.size(); ++j)
92 assert(c[j] == MoveOnly(j));
93 c.push_back(MoveOnly(2));
94 assert(c.size() == 3);
95 assert(is_contiguous_container_asan_correct(c));
96 for (int j = 0; j < c.size(); ++j)
97 assert(c[j] == MoveOnly(j));
98 c.push_back(MoveOnly(3));
99 assert(c.size() == 4);
100 assert(is_contiguous_container_asan_correct(c));
101 for (int j = 0; j < c.size(); ++j)
102 assert(c[j] == MoveOnly(j));
103 c.push_back(MoveOnly(4));
104 assert(c.size() == 5);
105 assert(is_contiguous_container_asan_correct(c));
106 for (int j = 0; j < c.size(); ++j)
107 assert(c[j] == MoveOnly(j));
110 #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES