]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/smart_ptr/test/make_shared_test.cpp
9e3cdd3fc7b1f92075bda3ac9be2c7124d33f681
1 // make_shared_test.cpp
3 // Copyright 2007-2009 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/detail/lightweight_test.hpp>
10 #include <boost/make_shared.hpp>
11 #include <boost/shared_ptr.hpp>
12 #include <boost/weak_ptr.hpp>
20 X
& operator=( X
const & );
22 void * operator new( std::size_t n
)
24 // lack of this definition causes link errors on Comeau C++
25 BOOST_ERROR( "private X::new called" );
26 return ::operator new( n
);
29 void operator delete( void * p
)
31 // lack of this definition causes link errors on MSVC
32 BOOST_ERROR( "private X::delete called" );
33 ::operator delete( p
);
42 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
)
58 boost::shared_ptr
< int > pi
= boost::make_shared
< int >();
60 BOOST_TEST( pi
.get() != 0 );
61 BOOST_TEST( pi
.use_count() == 1 );
63 BOOST_TEST( *pi
== 0 );
67 boost::shared_ptr
< int > pi
= boost::make_shared_noinit
< int >();
69 BOOST_TEST( pi
.get() != 0 );
70 BOOST_TEST( pi
.use_count() == 1 );
74 boost::shared_ptr
< int > pi
= boost::make_shared
< int >( 5 );
76 BOOST_TEST( pi
.get() != 0 );
77 BOOST_TEST( pi
.use_count() == 1 );
79 BOOST_TEST( *pi
== 5 );
82 BOOST_TEST( X::instances
== 0 );
85 boost::shared_ptr
< X
> pi
= boost::make_shared
< X
>();
86 boost::weak_ptr
<X
> wp( pi
);
88 BOOST_TEST( X::instances
== 1 );
89 BOOST_TEST( pi
.get() != 0 );
90 BOOST_TEST( pi
.use_count() == 1 );
91 BOOST_TEST( pi
->v
== 0 );
95 BOOST_TEST( X::instances
== 0 );
99 boost::shared_ptr
< X
> pi
= boost::make_shared_noinit
< X
>();
100 boost::weak_ptr
<X
> wp( pi
);
102 BOOST_TEST( X::instances
== 1 );
103 BOOST_TEST( pi
.get() != 0 );
104 BOOST_TEST( pi
.use_count() == 1 );
105 BOOST_TEST( pi
->v
== 0 );
109 BOOST_TEST( X::instances
== 0 );
113 boost::shared_ptr
< X
> pi
= boost::make_shared
< X
>( 1 );
114 boost::weak_ptr
<X
> wp( pi
);
116 BOOST_TEST( X::instances
== 1 );
117 BOOST_TEST( pi
.get() != 0 );
118 BOOST_TEST( pi
.use_count() == 1 );
119 BOOST_TEST( pi
->v
== 1 );
123 BOOST_TEST( X::instances
== 0 );
127 boost::shared_ptr
< X
> pi
= boost::make_shared
< X
>( 1, 2 );
128 boost::weak_ptr
<X
> wp( pi
);
130 BOOST_TEST( X::instances
== 1 );
131 BOOST_TEST( pi
.get() != 0 );
132 BOOST_TEST( pi
.use_count() == 1 );
133 BOOST_TEST( pi
->v
== 1+2 );
137 BOOST_TEST( X::instances
== 0 );
141 boost::shared_ptr
< X
> pi
= boost::make_shared
< X
>( 1, 2, 3 );
142 boost::weak_ptr
<X
> wp( pi
);
144 BOOST_TEST( X::instances
== 1 );
145 BOOST_TEST( pi
.get() != 0 );
146 BOOST_TEST( pi
.use_count() == 1 );
147 BOOST_TEST( pi
->v
== 1+2+3 );
151 BOOST_TEST( X::instances
== 0 );
155 boost::shared_ptr
< X
> pi
= boost::make_shared
< X
>( 1, 2, 3, 4 );
156 boost::weak_ptr
<X
> wp( pi
);
158 BOOST_TEST( X::instances
== 1 );
159 BOOST_TEST( pi
.get() != 0 );
160 BOOST_TEST( pi
.use_count() == 1 );
161 BOOST_TEST( pi
->v
== 1+2+3+4 );
165 BOOST_TEST( X::instances
== 0 );
169 boost::shared_ptr
< X
> pi
= boost::make_shared
< X
>( 1, 2, 3, 4, 5 );
170 boost::weak_ptr
<X
> wp( pi
);
172 BOOST_TEST( X::instances
== 1 );
173 BOOST_TEST( pi
.get() != 0 );
174 BOOST_TEST( pi
.use_count() == 1 );
175 BOOST_TEST( pi
->v
== 1+2+3+4+5 );
179 BOOST_TEST( X::instances
== 0 );
183 boost::shared_ptr
< X
> pi
= boost::make_shared
< X
>( 1, 2, 3, 4, 5, 6 );
184 boost::weak_ptr
<X
> wp( pi
);
186 BOOST_TEST( X::instances
== 1 );
187 BOOST_TEST( pi
.get() != 0 );
188 BOOST_TEST( pi
.use_count() == 1 );
189 BOOST_TEST( pi
->v
== 1+2+3+4+5+6 );
193 BOOST_TEST( X::instances
== 0 );
197 boost::shared_ptr
< X
> pi
= boost::make_shared
< X
>( 1, 2, 3, 4, 5, 6, 7 );
198 boost::weak_ptr
<X
> wp( pi
);
200 BOOST_TEST( X::instances
== 1 );
201 BOOST_TEST( pi
.get() != 0 );
202 BOOST_TEST( pi
.use_count() == 1 );
203 BOOST_TEST( pi
->v
== 1+2+3+4+5+6+7 );
207 BOOST_TEST( X::instances
== 0 );
211 boost::shared_ptr
< X
> pi
= boost::make_shared
< X
>( 1, 2, 3, 4, 5, 6, 7, 8 );
212 boost::weak_ptr
<X
> wp( pi
);
214 BOOST_TEST( X::instances
== 1 );
215 BOOST_TEST( pi
.get() != 0 );
216 BOOST_TEST( pi
.use_count() == 1 );
217 BOOST_TEST( pi
->v
== 1+2+3+4+5+6+7+8 );
221 BOOST_TEST( X::instances
== 0 );
225 boost::shared_ptr
< X
> pi
= boost::make_shared
< X
>( 1, 2, 3, 4, 5, 6, 7, 8, 9 );
226 boost::weak_ptr
<X
> wp( pi
);
228 BOOST_TEST( X::instances
== 1 );
229 BOOST_TEST( pi
.get() != 0 );
230 BOOST_TEST( pi
.use_count() == 1 );
231 BOOST_TEST( pi
->v
== 1+2+3+4+5+6+7+8+9 );
235 BOOST_TEST( X::instances
== 0 );
238 return boost::report_errors();