]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/smart_ptr/test/make_shared_test.cpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / libs / smart_ptr / test / make_shared_test.cpp
1 // make_shared_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/weak_ptr.hpp>
13 #include <cstddef>
14
15 class X
16 {
17 private:
18
19 X( X const & );
20 X & operator=( X const & );
21
22 void * operator new( std::size_t n )
23 {
24 // lack of this definition causes link errors on Comeau C++
25 BOOST_ERROR( "private X::new called" );
26 return ::operator new( n );
27 }
28
29 void operator delete( void * p )
30 {
31 // lack of this definition causes link errors on MSVC
32 BOOST_ERROR( "private X::delete called" );
33 ::operator delete( p );
34 }
35
36 public:
37
38 static int instances;
39
40 int v;
41
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 )
43 {
44 ++instances;
45 }
46
47 ~X()
48 {
49 --instances;
50 }
51 };
52
53 int X::instances = 0;
54
55 int main()
56 {
57 {
58 boost::shared_ptr< int > pi = boost::make_shared< int >();
59
60 BOOST_TEST( pi.get() != 0 );
61 BOOST_TEST( pi.use_count() == 1 );
62
63 BOOST_TEST( *pi == 0 );
64 }
65
66 {
67 boost::shared_ptr< int > pi = boost::make_shared_noinit< int >();
68
69 BOOST_TEST( pi.get() != 0 );
70 BOOST_TEST( pi.use_count() == 1 );
71 }
72
73 {
74 boost::shared_ptr< int > pi = boost::make_shared< int >( 5 );
75
76 BOOST_TEST( pi.get() != 0 );
77 BOOST_TEST( pi.use_count() == 1 );
78
79 BOOST_TEST( *pi == 5 );
80 }
81
82 BOOST_TEST( X::instances == 0 );
83
84 {
85 boost::shared_ptr< X > pi = boost::make_shared< X >();
86 boost::weak_ptr<X> wp( pi );
87
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 );
92
93 pi.reset();
94
95 BOOST_TEST( X::instances == 0 );
96 }
97
98 {
99 boost::shared_ptr< X > pi = boost::make_shared_noinit< X >();
100 boost::weak_ptr<X> wp( pi );
101
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 );
106
107 pi.reset();
108
109 BOOST_TEST( X::instances == 0 );
110 }
111
112 {
113 boost::shared_ptr< X > pi = boost::make_shared< X >( 1 );
114 boost::weak_ptr<X> wp( pi );
115
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 );
120
121 pi.reset();
122
123 BOOST_TEST( X::instances == 0 );
124 }
125
126 {
127 boost::shared_ptr< X > pi = boost::make_shared< X >( 1, 2 );
128 boost::weak_ptr<X> wp( pi );
129
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 );
134
135 pi.reset();
136
137 BOOST_TEST( X::instances == 0 );
138 }
139
140 {
141 boost::shared_ptr< X > pi = boost::make_shared< X >( 1, 2, 3 );
142 boost::weak_ptr<X> wp( pi );
143
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 );
148
149 pi.reset();
150
151 BOOST_TEST( X::instances == 0 );
152 }
153
154 {
155 boost::shared_ptr< X > pi = boost::make_shared< X >( 1, 2, 3, 4 );
156 boost::weak_ptr<X> wp( pi );
157
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 );
162
163 pi.reset();
164
165 BOOST_TEST( X::instances == 0 );
166 }
167
168 {
169 boost::shared_ptr< X > pi = boost::make_shared< X >( 1, 2, 3, 4, 5 );
170 boost::weak_ptr<X> wp( pi );
171
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 );
176
177 pi.reset();
178
179 BOOST_TEST( X::instances == 0 );
180 }
181
182 {
183 boost::shared_ptr< X > pi = boost::make_shared< X >( 1, 2, 3, 4, 5, 6 );
184 boost::weak_ptr<X> wp( pi );
185
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 );
190
191 pi.reset();
192
193 BOOST_TEST( X::instances == 0 );
194 }
195
196 {
197 boost::shared_ptr< X > pi = boost::make_shared< X >( 1, 2, 3, 4, 5, 6, 7 );
198 boost::weak_ptr<X> wp( pi );
199
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 );
204
205 pi.reset();
206
207 BOOST_TEST( X::instances == 0 );
208 }
209
210 {
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 );
213
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 );
218
219 pi.reset();
220
221 BOOST_TEST( X::instances == 0 );
222 }
223
224 {
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 );
227
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 );
232
233 pi.reset();
234
235 BOOST_TEST( X::instances == 0 );
236 }
237
238 return boost::report_errors();
239 }