Ticket #1884: make_shared_test.cpp

File make_shared_test.cpp, 4.6 KB (added by Frank Mori Hess, 14 years ago)
Line 
1//
2// make_shared_test.cpp
3//
4// Copyright (c) 2007 Peter Dimov
5//
6// Distributed under the Boost Software License, Version 1.0. (See
7// accompanying file LICENSE_1_0.txt or copy at
8// http://www.boost.org/LICENSE_1_0.txt)
9//
10
11#include <boost/detail/lightweight_test.hpp>
12#include <boost/make_shared.hpp>
13#include <boost/shared_ptr.hpp>
14#include <boost/weak_ptr.hpp>
15
16class X
17{
18private:
19
20 X( X const & );
21 X & operator=( X const & );
22
23public:
24
25 static int instances;
26
27 int v;
28
29 explicit X( int a1 = 0, int a2 = 0, int a3 = 0, int a4 = 0 ): v( a1+a2+a3+a4 )
30 {
31 ++instances;
32 }
33
34 ~X()
35 {
36 --instances;
37 }
38};
39
40int X::instances = 0;
41
42int main()
43{
44 {
45 boost::shared_ptr< int > pi = boost::make_shared< int >();
46
47 BOOST_TEST( pi.get() != 0 );
48 BOOST_TEST( *pi == 0 );
49 }
50
51 {
52 boost::shared_ptr< int > pi = boost::allocate_shared< int >( std::allocator<int>() );
53
54 BOOST_TEST( pi.get() != 0 );
55 BOOST_TEST( *pi == 0 );
56 }
57
58 {
59 boost::shared_ptr< int > pi = boost::make_shared< int >( 5 );
60
61 BOOST_TEST( pi.get() != 0 );
62 BOOST_TEST( *pi == 5 );
63 }
64
65 {
66 boost::shared_ptr< int > pi = boost::allocate_shared< int >( std::allocator<int>(), 5 );
67
68 BOOST_TEST( pi.get() != 0 );
69 BOOST_TEST( *pi == 5 );
70 }
71
72 BOOST_TEST( X::instances == 0 );
73
74 {
75 boost::shared_ptr< X > pi = boost::make_shared< X >();
76 boost::weak_ptr<X> wp( pi );
77
78 BOOST_TEST( X::instances == 1 );
79 BOOST_TEST( pi.get() != 0 );
80 BOOST_TEST( pi->v == 0 );
81
82 pi.reset();
83
84 BOOST_TEST( X::instances == 0 );
85 }
86
87
88 {
89 boost::shared_ptr< X > pi = boost::allocate_shared< X >( std::allocator<void>() );
90 boost::weak_ptr<X> wp( pi );
91
92 BOOST_TEST( X::instances == 1 );
93 BOOST_TEST( pi.get() != 0 );
94 BOOST_TEST( pi->v == 0 );
95
96 pi.reset();
97
98 BOOST_TEST( X::instances == 0 );
99 }
100
101 {
102 boost::shared_ptr< X > pi = boost::make_shared< X >( 1 );
103 boost::weak_ptr<X> wp( pi );
104
105 BOOST_TEST( X::instances == 1 );
106 BOOST_TEST( pi.get() != 0 );
107 BOOST_TEST( pi->v == 1 );
108
109 pi.reset();
110
111 BOOST_TEST( X::instances == 0 );
112 }
113
114 {
115 boost::shared_ptr< X > pi = boost::allocate_shared< X >( std::allocator<void>(), 1 );
116 boost::weak_ptr<X> wp( pi );
117
118 BOOST_TEST( X::instances == 1 );
119 BOOST_TEST( pi.get() != 0 );
120 BOOST_TEST( pi->v == 1 );
121
122 pi.reset();
123
124 BOOST_TEST( X::instances == 0 );
125 }
126
127 {
128 boost::shared_ptr< X > pi = boost::make_shared< X >( 1, 2 );
129 boost::weak_ptr<X> wp( pi );
130
131 BOOST_TEST( X::instances == 1 );
132 BOOST_TEST( pi.get() != 0 );
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::allocate_shared< X >( std::allocator<void>(), 1, 2 );
142 boost::weak_ptr<X> wp( pi );
143
144 BOOST_TEST( X::instances == 1 );
145 BOOST_TEST( pi.get() != 0 );
146 BOOST_TEST( pi->v == 1+2 );
147
148 pi.reset();
149
150 BOOST_TEST( X::instances == 0 );
151 }
152
153 {
154 boost::shared_ptr< X > pi = boost::make_shared< X >( 1, 2, 3 );
155 boost::weak_ptr<X> wp( pi );
156
157 BOOST_TEST( X::instances == 1 );
158 BOOST_TEST( pi.get() != 0 );
159 BOOST_TEST( pi->v == 1+2+3 );
160
161 pi.reset();
162
163 BOOST_TEST( X::instances == 0 );
164 }
165
166 {
167 boost::shared_ptr< X > pi = boost::allocate_shared< X >( std::allocator<void>(), 1, 2, 3 );
168 boost::weak_ptr<X> wp( pi );
169
170 BOOST_TEST( X::instances == 1 );
171 BOOST_TEST( pi.get() != 0 );
172 BOOST_TEST( pi->v == 1+2+3 );
173
174 pi.reset();
175
176 BOOST_TEST( X::instances == 0 );
177 }
178
179 {
180 boost::shared_ptr< X > pi = boost::make_shared< X >( 1, 2, 3, 4 );
181 boost::weak_ptr<X> wp( pi );
182
183 BOOST_TEST( X::instances == 1 );
184 BOOST_TEST( pi.get() != 0 );
185 BOOST_TEST( pi->v == 1+2+3+4 );
186
187 pi.reset();
188
189 BOOST_TEST( X::instances == 0 );
190 }
191
192 {
193 boost::shared_ptr< X > pi = boost::allocate_shared< X >( std::allocator<void>(), 1, 2, 3, 4 );
194 boost::weak_ptr<X> wp( pi );
195
196 BOOST_TEST( X::instances == 1 );
197 BOOST_TEST( pi.get() != 0 );
198 BOOST_TEST( pi->v == 1+2+3+4 );
199
200 pi.reset();
201
202 BOOST_TEST( X::instances == 0 );
203 }
204
205 return boost::report_errors();
206}