Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / libc++ / trunk / test / containers / sequences / vector / vector.modifiers / push_back_rvalue.pass.cpp
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 #include "asan_testing.h"
20
21 int main()
22 {
23 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
24     {
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));
51     }
52     {
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));
79     }
80 #if __cplusplus >= 201103L
81     {
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));
108     }
109 #endif
110 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
111 }