]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/smart_ptr/test/make_shared_esft_test.cpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / smart_ptr / test / make_shared_esft_test.cpp
CommitLineData
7c673cae
FG
1// make_shared_esft_test.cpp
2//
3// Copyright 2007-2009 Peter Dimov
4//
5// Distributed under the Boost Software License, Version 1.0.
6// See accompanying file LICENSE_1_0.txt or copy at
7// http://www.boost.org/LICENSE_1_0.txt
8
9#include <boost/detail/lightweight_test.hpp>
10#include <boost/make_shared.hpp>
11#include <boost/shared_ptr.hpp>
12#include <boost/enable_shared_from_this.hpp>
13
14class X: public boost::enable_shared_from_this<X>
15{
16private:
17
18 X( X const & );
19 X & operator=( X const & );
20
21public:
22
23 static int instances;
24
25 explicit X( int = 0, int = 0, int = 0, int = 0, int = 0, int = 0, int = 0, int = 0, int = 0 )
26 {
27 ++instances;
28 }
29
30 ~X()
31 {
32 --instances;
33 }
34};
35
36int X::instances = 0;
37
38int main()
39{
40 BOOST_TEST( X::instances == 0 );
41
42 {
43 boost::shared_ptr< X > px = boost::make_shared< X >();
44 BOOST_TEST( X::instances == 1 );
45
46 try
47 {
48 boost::shared_ptr< X > qx = px->shared_from_this();
49
50 BOOST_TEST( px == qx );
51 BOOST_TEST( !( px < qx ) && !( qx < px ) );
52
53 px.reset();
54 BOOST_TEST( X::instances == 1 );
55 }
56 catch( boost::bad_weak_ptr const& )
57 {
58 BOOST_ERROR( "px->shared_from_this() failed" );
59 }
60 }
61
62 BOOST_TEST( X::instances == 0 );
63
64 {
65 boost::shared_ptr< X > px = boost::make_shared< X >( 1 );
66 BOOST_TEST( X::instances == 1 );
67
68 try
69 {
70 boost::shared_ptr< X > qx = px->shared_from_this();
71
72 BOOST_TEST( px == qx );
73 BOOST_TEST( !( px < qx ) && !( qx < px ) );
74
75 px.reset();
76 BOOST_TEST( X::instances == 1 );
77 }
78 catch( boost::bad_weak_ptr const& )
79 {
80 BOOST_ERROR( "px->shared_from_this() failed" );
81 }
82 }
83
84 BOOST_TEST( X::instances == 0 );
85
86 {
87 boost::shared_ptr< X > px = boost::make_shared< X >( 1, 2 );
88 BOOST_TEST( X::instances == 1 );
89
90 try
91 {
92 boost::shared_ptr< X > qx = px->shared_from_this();
93
94 BOOST_TEST( px == qx );
95 BOOST_TEST( !( px < qx ) && !( qx < px ) );
96
97 px.reset();
98 BOOST_TEST( X::instances == 1 );
99 }
100 catch( boost::bad_weak_ptr const& )
101 {
102 BOOST_ERROR( "px->shared_from_this() failed" );
103 }
104 }
105
106 BOOST_TEST( X::instances == 0 );
107
108 {
109 boost::shared_ptr< X > px = boost::make_shared< X >( 1, 2, 3 );
110 BOOST_TEST( X::instances == 1 );
111
112 try
113 {
114 boost::shared_ptr< X > qx = px->shared_from_this();
115
116 BOOST_TEST( px == qx );
117 BOOST_TEST( !( px < qx ) && !( qx < px ) );
118
119 px.reset();
120 BOOST_TEST( X::instances == 1 );
121 }
122 catch( boost::bad_weak_ptr const& )
123 {
124 BOOST_ERROR( "px->shared_from_this() failed" );
125 }
126 }
127
128 BOOST_TEST( X::instances == 0 );
129
130 {
131 boost::shared_ptr< X > px = boost::make_shared< X >( 1, 2, 3, 4 );
132 BOOST_TEST( X::instances == 1 );
133
134 try
135 {
136 boost::shared_ptr< X > qx = px->shared_from_this();
137
138 BOOST_TEST( px == qx );
139 BOOST_TEST( !( px < qx ) && !( qx < px ) );
140
141 px.reset();
142 BOOST_TEST( X::instances == 1 );
143 }
144 catch( boost::bad_weak_ptr const& )
145 {
146 BOOST_ERROR( "px->shared_from_this() failed" );
147 }
148 }
149
150 BOOST_TEST( X::instances == 0 );
151
152 {
153 boost::shared_ptr< X > px = boost::make_shared< X >( 1, 2, 3, 4, 5 );
154 BOOST_TEST( X::instances == 1 );
155
156 try
157 {
158 boost::shared_ptr< X > qx = px->shared_from_this();
159
160 BOOST_TEST( px == qx );
161 BOOST_TEST( !( px < qx ) && !( qx < px ) );
162
163 px.reset();
164 BOOST_TEST( X::instances == 1 );
165 }
166 catch( boost::bad_weak_ptr const& )
167 {
168 BOOST_ERROR( "px->shared_from_this() failed" );
169 }
170 }
171
172 BOOST_TEST( X::instances == 0 );
173
174 {
175 boost::shared_ptr< X > px = boost::make_shared< X >( 1, 2, 3, 4, 5, 6 );
176 BOOST_TEST( X::instances == 1 );
177
178 try
179 {
180 boost::shared_ptr< X > qx = px->shared_from_this();
181
182 BOOST_TEST( px == qx );
183 BOOST_TEST( !( px < qx ) && !( qx < px ) );
184
185 px.reset();
186 BOOST_TEST( X::instances == 1 );
187 }
188 catch( boost::bad_weak_ptr const& )
189 {
190 BOOST_ERROR( "px->shared_from_this() failed" );
191 }
192 }
193
194 BOOST_TEST( X::instances == 0 );
195
196 {
197 boost::shared_ptr< X > px = boost::make_shared< X >( 1, 2, 3, 4, 5, 6, 7 );
198 BOOST_TEST( X::instances == 1 );
199
200 try
201 {
202 boost::shared_ptr< X > qx = px->shared_from_this();
203
204 BOOST_TEST( px == qx );
205 BOOST_TEST( !( px < qx ) && !( qx < px ) );
206
207 px.reset();
208 BOOST_TEST( X::instances == 1 );
209 }
210 catch( boost::bad_weak_ptr const& )
211 {
212 BOOST_ERROR( "px->shared_from_this() failed" );
213 }
214 }
215
216 BOOST_TEST( X::instances == 0 );
217
218 {
219 boost::shared_ptr< X > px = boost::make_shared< X >( 1, 2, 3, 4, 5, 6, 7, 8 );
220 BOOST_TEST( X::instances == 1 );
221
222 try
223 {
224 boost::shared_ptr< X > qx = px->shared_from_this();
225
226 BOOST_TEST( px == qx );
227 BOOST_TEST( !( px < qx ) && !( qx < px ) );
228
229 px.reset();
230 BOOST_TEST( X::instances == 1 );
231 }
232 catch( boost::bad_weak_ptr const& )
233 {
234 BOOST_ERROR( "px->shared_from_this() failed" );
235 }
236 }
237
238 BOOST_TEST( X::instances == 0 );
239
240 {
241 boost::shared_ptr< X > px = boost::make_shared< X >( 1, 2, 3, 4, 5, 6, 7, 8, 9 );
242 BOOST_TEST( X::instances == 1 );
243
244 try
245 {
246 boost::shared_ptr< X > qx = px->shared_from_this();
247
248 BOOST_TEST( px == qx );
249 BOOST_TEST( !( px < qx ) && !( qx < px ) );
250
251 px.reset();
252 BOOST_TEST( X::instances == 1 );
253 }
254 catch( boost::bad_weak_ptr const& )
255 {
256 BOOST_ERROR( "px->shared_from_this() failed" );
257 }
258 }
259
260 BOOST_TEST( X::instances == 0 );
261
262 return boost::report_errors();
263}