]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/smart_ptr/test/make_local_shared_test.cpp
1 // make_local_shared_test.cpp
3 // Copyright 2007-2009, 2017 Peter Dimov
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
9 #include <boost/config.hpp>
11 #if defined( BOOST_NO_CXX11_RVALUE_REFERENCES ) || defined( BOOST_NO_CXX11_VARIADIC_TEMPLATES )
19 #include <boost/core/lightweight_test.hpp>
20 #include <boost/smart_ptr/make_local_shared.hpp>
21 #include <boost/smart_ptr/local_shared_ptr.hpp>
22 #include <boost/weak_ptr.hpp>
30 X
& operator=( X
const & );
32 void * operator new( std::size_t n
)
34 // lack of this definition causes link errors on Comeau C++
35 BOOST_ERROR( "private X::new called" );
36 return ::operator new( n
);
39 void operator delete( void * p
)
41 // lack of this definition causes link errors on MSVC
42 BOOST_ERROR( "private X::delete called" );
43 ::operator delete( p
);
52 explicit X( int a1
= 0, int a2
= 0, int a3
= 0, int a4
= 0, int a5
= 0, int a6
= 0, int a7
= 0, int a8
= 0, int a9
= 0 ): v( a1
+a2
+a3
+a4
+a5
+a6
+a7
+a8
+a9
)
65 template<class T
> static long use_count( boost::local_shared_ptr
<T
> const & p
)
67 return boost::shared_ptr
<T
>( p
).use_count() - 1;
73 boost::local_shared_ptr
< int > pi
= boost::make_local_shared
< int >();
75 BOOST_TEST( pi
.get() != 0 );
76 BOOST_TEST( pi
.local_use_count() == 1 );
77 BOOST_TEST( use_count( pi
) == 1 );
79 BOOST_TEST( *pi
== 0 );
83 boost::local_shared_ptr
< int > pi
= boost::make_local_shared_noinit
< int >();
85 BOOST_TEST( pi
.get() != 0 );
89 boost::local_shared_ptr
< int > pi
= boost::make_local_shared
< int >( 5 );
91 BOOST_TEST( pi
.get() != 0 );
92 BOOST_TEST( pi
.local_use_count() == 1 );
93 BOOST_TEST( use_count( pi
) == 1 );
95 BOOST_TEST( *pi
== 5 );
98 BOOST_TEST( X::instances
== 0 );
101 boost::local_shared_ptr
< X
> pi
= boost::make_local_shared
< X
>();
102 boost::weak_ptr
<X
> wp( pi
);
104 BOOST_TEST( X::instances
== 1 );
105 BOOST_TEST( pi
.get() != 0 );
106 BOOST_TEST( pi
.local_use_count() == 1 );
107 BOOST_TEST( use_count( pi
) == 1 );
108 BOOST_TEST( pi
->v
== 0 );
112 BOOST_TEST( X::instances
== 0 );
116 boost::local_shared_ptr
< X
> pi
= boost::make_local_shared_noinit
< X
>();
117 boost::weak_ptr
<X
> wp( pi
);
119 BOOST_TEST( X::instances
== 1 );
120 BOOST_TEST( pi
.get() != 0 );
121 BOOST_TEST( pi
.local_use_count() == 1 );
122 BOOST_TEST( use_count( pi
) == 1 );
123 BOOST_TEST( pi
->v
== 0 );
127 BOOST_TEST( X::instances
== 0 );
131 boost::local_shared_ptr
< X
> pi
= boost::make_local_shared
< X
>( 1 );
132 boost::weak_ptr
<X
> wp( pi
);
134 BOOST_TEST( X::instances
== 1 );
135 BOOST_TEST( pi
.get() != 0 );
136 BOOST_TEST( pi
.local_use_count() == 1 );
137 BOOST_TEST( use_count( pi
) == 1 );
138 BOOST_TEST( pi
->v
== 1 );
142 BOOST_TEST( X::instances
== 0 );
146 boost::local_shared_ptr
< X
> pi
= boost::make_local_shared
< X
>( 1, 2 );
147 boost::weak_ptr
<X
> wp( pi
);
149 BOOST_TEST( X::instances
== 1 );
150 BOOST_TEST( pi
.get() != 0 );
151 BOOST_TEST( pi
.local_use_count() == 1 );
152 BOOST_TEST( use_count( pi
) == 1 );
153 BOOST_TEST( pi
->v
== 1+2 );
157 BOOST_TEST( X::instances
== 0 );
161 boost::local_shared_ptr
< X
> pi
= boost::make_local_shared
< X
>( 1, 2, 3 );
162 boost::weak_ptr
<X
> wp( pi
);
164 BOOST_TEST( X::instances
== 1 );
165 BOOST_TEST( pi
.get() != 0 );
166 BOOST_TEST( pi
.local_use_count() == 1 );
167 BOOST_TEST( use_count( pi
) == 1 );
168 BOOST_TEST( pi
->v
== 1+2+3 );
172 BOOST_TEST( X::instances
== 0 );
176 boost::local_shared_ptr
< X
> pi
= boost::make_local_shared
< X
>( 1, 2, 3, 4 );
177 boost::weak_ptr
<X
> wp( pi
);
179 BOOST_TEST( X::instances
== 1 );
180 BOOST_TEST( pi
.get() != 0 );
181 BOOST_TEST( pi
.local_use_count() == 1 );
182 BOOST_TEST( use_count( pi
) == 1 );
183 BOOST_TEST( pi
->v
== 1+2+3+4 );
187 BOOST_TEST( X::instances
== 0 );
191 boost::local_shared_ptr
< X
> pi
= boost::make_local_shared
< X
>( 1, 2, 3, 4, 5 );
192 boost::weak_ptr
<X
> wp( pi
);
194 BOOST_TEST( X::instances
== 1 );
195 BOOST_TEST( pi
.get() != 0 );
196 BOOST_TEST( pi
.local_use_count() == 1 );
197 BOOST_TEST( use_count( pi
) == 1 );
198 BOOST_TEST( pi
->v
== 1+2+3+4+5 );
202 BOOST_TEST( X::instances
== 0 );
206 boost::local_shared_ptr
< X
> pi
= boost::make_local_shared
< X
>( 1, 2, 3, 4, 5, 6 );
207 boost::weak_ptr
<X
> wp( pi
);
209 BOOST_TEST( X::instances
== 1 );
210 BOOST_TEST( pi
.get() != 0 );
211 BOOST_TEST( pi
.local_use_count() == 1 );
212 BOOST_TEST( use_count( pi
) == 1 );
213 BOOST_TEST( pi
->v
== 1+2+3+4+5+6 );
217 BOOST_TEST( X::instances
== 0 );
221 boost::local_shared_ptr
< X
> pi
= boost::make_local_shared
< X
>( 1, 2, 3, 4, 5, 6, 7 );
222 boost::weak_ptr
<X
> wp( pi
);
224 BOOST_TEST( X::instances
== 1 );
225 BOOST_TEST( pi
.get() != 0 );
226 BOOST_TEST( pi
.local_use_count() == 1 );
227 BOOST_TEST( use_count( pi
) == 1 );
228 BOOST_TEST( pi
->v
== 1+2+3+4+5+6+7 );
232 BOOST_TEST( X::instances
== 0 );
236 boost::local_shared_ptr
< X
> pi
= boost::make_local_shared
< X
>( 1, 2, 3, 4, 5, 6, 7, 8 );
237 boost::weak_ptr
<X
> wp( pi
);
239 BOOST_TEST( X::instances
== 1 );
240 BOOST_TEST( pi
.get() != 0 );
241 BOOST_TEST( pi
.local_use_count() == 1 );
242 BOOST_TEST( use_count( pi
) == 1 );
243 BOOST_TEST( pi
->v
== 1+2+3+4+5+6+7+8 );
247 BOOST_TEST( X::instances
== 0 );
251 boost::local_shared_ptr
< X
> pi
= boost::make_local_shared
< X
>( 1, 2, 3, 4, 5, 6, 7, 8, 9 );
252 boost::weak_ptr
<X
> wp( pi
);
254 BOOST_TEST( X::instances
== 1 );
255 BOOST_TEST( pi
.get() != 0 );
256 BOOST_TEST( pi
.local_use_count() == 1 );
257 BOOST_TEST( use_count( pi
) == 1 );
258 BOOST_TEST( pi
->v
== 1+2+3+4+5+6+7+8+9 );
262 BOOST_TEST( X::instances
== 0 );
265 return boost::report_errors();