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