2 Copyright 2012-2015 Glen Joseph Fernandes
5 Distributed under the Boost Software License, Version 1.0.
6 (http://www.boost.org/LICENSE_1_0.txt)
8 #include <boost/align/is_aligned.hpp>
9 #include <boost/core/lightweight_test.hpp>
10 #include <boost/smart_ptr/make_shared.hpp>
11 #include <boost/smart_ptr/weak_ptr.hpp>
12 #include <boost/type_traits/alignment_of.hpp>
16 static unsigned instances;
27 void set(long double value) {
31 long double get() const {
37 type& operator=(const type&);
42 unsigned type::instances = 0;
47 boost::shared_ptr<int[]> result =
48 boost::make_shared<int[]>(3);
49 BOOST_TEST(result.get() != 0);
50 BOOST_TEST(result.use_count() == 1);
51 BOOST_TEST(boost::alignment::is_aligned(result.get(),
52 boost::alignment_of<int>::value));
53 BOOST_TEST(result[0] == 0);
54 BOOST_TEST(result[1] == 0);
55 BOOST_TEST(result[2] == 0);
58 boost::shared_ptr<int[3]> result =
59 boost::make_shared<int[3]>();
60 BOOST_TEST(result.get() != 0);
61 BOOST_TEST(result.use_count() == 1);
62 BOOST_TEST(boost::alignment::is_aligned(result.get(),
63 boost::alignment_of<int>::value));
64 BOOST_TEST(result[0] == 0);
65 BOOST_TEST(result[1] == 0);
66 BOOST_TEST(result[2] == 0);
69 boost::shared_ptr<int[][2]> result =
70 boost::make_shared<int[][2]>(2);
71 BOOST_TEST(result.get() != 0);
72 BOOST_TEST(result.use_count() == 1);
73 BOOST_TEST(boost::alignment::is_aligned(result.get(),
74 boost::alignment_of<int>::value));
75 BOOST_TEST(result[0][0] == 0);
76 BOOST_TEST(result[0][1] == 0);
77 BOOST_TEST(result[1][0] == 0);
78 BOOST_TEST(result[1][1] == 0);
81 boost::shared_ptr<int[2][2]> result =
82 boost::make_shared<int[2][2]>();
83 BOOST_TEST(result.get() != 0);
84 BOOST_TEST(result.use_count() == 1);
85 BOOST_TEST(boost::alignment::is_aligned(result.get(),
86 boost::alignment_of<int>::value));
87 BOOST_TEST(result[0][0] == 0);
88 BOOST_TEST(result[0][1] == 0);
89 BOOST_TEST(result[1][0] == 0);
90 BOOST_TEST(result[1][1] == 0);
93 boost::shared_ptr<const int[]> result =
94 boost::make_shared<const int[]>(3);
95 BOOST_TEST(result.get() != 0);
96 BOOST_TEST(result.use_count() == 1);
97 BOOST_TEST(boost::alignment::is_aligned(result.get(),
98 boost::alignment_of<int>::value));
99 BOOST_TEST(result[0] == 0);
100 BOOST_TEST(result[1] == 0);
101 BOOST_TEST(result[2] == 0);
104 boost::shared_ptr<const int[3]> result =
105 boost::make_shared<const int[3]>();
106 BOOST_TEST(result.get() != 0);
107 BOOST_TEST(result.use_count() == 1);
108 BOOST_TEST(boost::alignment::is_aligned(result.get(),
109 boost::alignment_of<int>::value));
110 BOOST_TEST(result[0] == 0);
111 BOOST_TEST(result[1] == 0);
112 BOOST_TEST(result[2] == 0);
115 boost::shared_ptr<const int[][2]> result =
116 boost::make_shared<const int[][2]>(2);
117 BOOST_TEST(result.get() != 0);
118 BOOST_TEST(result.use_count() == 1);
119 BOOST_TEST(boost::alignment::is_aligned(result.get(),
120 boost::alignment_of<int>::value));
121 BOOST_TEST(result[0][0] == 0);
122 BOOST_TEST(result[0][1] == 0);
123 BOOST_TEST(result[1][0] == 0);
124 BOOST_TEST(result[1][1] == 0);
127 boost::shared_ptr<const int[2][2]> result =
128 boost::make_shared<const int[2][2]>();
129 BOOST_TEST(result.get() != 0);
130 BOOST_TEST(result.use_count() == 1);
131 BOOST_TEST(boost::alignment::is_aligned(result.get(),
132 boost::alignment_of<int>::value));
133 BOOST_TEST(result[0][0] == 0);
134 BOOST_TEST(result[0][1] == 0);
135 BOOST_TEST(result[1][0] == 0);
136 BOOST_TEST(result[1][1] == 0);
139 boost::shared_ptr<type[]> result =
140 boost::make_shared<type[]>(3);
141 BOOST_TEST(result.get() != 0);
142 BOOST_TEST(result.use_count() == 1);
143 BOOST_TEST(boost::alignment::is_aligned(result.get(),
144 boost::alignment_of<type>::value));
145 BOOST_TEST(type::instances == 3);
146 boost::weak_ptr<type[]> w1 = result;
148 BOOST_TEST(type::instances == 0);
151 boost::shared_ptr<type[3]> result =
152 boost::make_shared<type[3]>();
153 BOOST_TEST(result.get() != 0);
154 BOOST_TEST(result.use_count() == 1);
155 BOOST_TEST(boost::alignment::is_aligned(result.get(),
156 boost::alignment_of<type>::value));
157 BOOST_TEST(type::instances == 3);
158 boost::weak_ptr<type[3]> w1 = result;
160 BOOST_TEST(type::instances == 0);
163 boost::shared_ptr<type[][2]> result =
164 boost::make_shared<type[][2]>(2);
165 BOOST_TEST(result.get() != 0);
166 BOOST_TEST(result.use_count() == 1);
167 BOOST_TEST(boost::alignment::is_aligned(result.get(),
168 boost::alignment_of<type>::value));
169 BOOST_TEST(type::instances == 4);
171 BOOST_TEST(type::instances == 0);
174 boost::shared_ptr<type[2][2]> result =
175 boost::make_shared<type[2][2]>();
176 BOOST_TEST(result.get() != 0);
177 BOOST_TEST(result.use_count() == 1);
178 BOOST_TEST(boost::alignment::is_aligned(result.get(),
179 boost::alignment_of<type>::value));
180 BOOST_TEST(type::instances == 4);
182 BOOST_TEST(type::instances == 0);
185 boost::shared_ptr<const type[]> result =
186 boost::make_shared<const type[]>(3);
187 BOOST_TEST(result.get() != 0);
188 BOOST_TEST(result.use_count() == 1);
189 BOOST_TEST(boost::alignment::is_aligned(result.get(),
190 boost::alignment_of<type>::value));
191 BOOST_TEST(type::instances == 3);
193 BOOST_TEST(type::instances == 0);
196 boost::shared_ptr<const type[3]> result =
197 boost::make_shared<const type[3]>();
198 BOOST_TEST(result.get() != 0);
199 BOOST_TEST(result.use_count() == 1);
200 BOOST_TEST(boost::alignment::is_aligned(result.get(),
201 boost::alignment_of<type>::value));
202 BOOST_TEST(type::instances == 3);
204 BOOST_TEST(type::instances == 0);
207 boost::shared_ptr<const type[][2]> result =
208 boost::make_shared<const type[][2]>(2);
209 BOOST_TEST(result.get() != 0);
210 BOOST_TEST(result.use_count() == 1);
211 BOOST_TEST(boost::alignment::is_aligned(result.get(),
212 boost::alignment_of<type>::value));
213 BOOST_TEST(type::instances == 4);
215 BOOST_TEST(type::instances == 0);
218 boost::shared_ptr<const type[2][2]> result =
219 boost::make_shared<const type[2][2]>();
220 BOOST_TEST(result.get() != 0);
221 BOOST_TEST(result.use_count() == 1);
222 BOOST_TEST(boost::alignment::is_aligned(result.get(),
223 boost::alignment_of<type>::value));
224 BOOST_TEST(type::instances == 4);
226 BOOST_TEST(type::instances == 0);
228 return boost::report_errors();