/*
-(c) 2012-2015 Glen Joseph Fernandes
-<glenjofe -at- gmail.com>
+Copyright 2012-2015 Glen Joseph Fernandes
+(glenjofe@gmail.com)
-Distributed under the Boost Software
-License, Version 1.0.
-http://boost.org/LICENSE_1_0.txt
+Distributed under the Boost Software License, Version 1.0.
+(http://www.boost.org/LICENSE_1_0.txt)
*/
+#include <boost/align/is_aligned.hpp>
#include <boost/core/lightweight_test.hpp>
#include <boost/smart_ptr/make_shared.hpp>
#include <boost/smart_ptr/weak_ptr.hpp>
class type {
public:
- static unsigned int instances;
- explicit type() {
- instances++;
+ static unsigned instances;
+
+ type()
+ : value_(0.0) {
+ ++instances;
}
+
~type() {
- instances--;
+ --instances;
+ }
+
+ void set(long double value) {
+ value_ = value;
}
+
+ long double get() const {
+ return value_;
+ }
+
private:
type(const type&);
type& operator=(const type&);
+
+ long double value_;
};
-unsigned int type::instances = 0;
+unsigned type::instances = 0;
int main()
{
{
- boost::shared_ptr<int[]> a1 = boost::make_shared<int[]>(3);
- int* a2 = a1.get();
- BOOST_TEST(a1.use_count() == 1);
- BOOST_TEST(a2 != 0);
- BOOST_TEST(size_t(a2) % boost::alignment_of<int>::value == 0);
- BOOST_TEST(a1[0] == 0);
- BOOST_TEST(a1[1] == 0);
- BOOST_TEST(a1[2] == 0);
- }
- {
- boost::shared_ptr<int[3]> a1 = boost::make_shared<int[3]>();
- int* a2 = a1.get();
- BOOST_TEST(a1.use_count() == 1);
- BOOST_TEST(a2 != 0);
- BOOST_TEST(size_t(a2) % boost::alignment_of<int>::value == 0);
- BOOST_TEST(a1[0] == 0);
- BOOST_TEST(a1[1] == 0);
- BOOST_TEST(a1[2] == 0);
- }
- {
- boost::shared_ptr<int[][2]> a1 = boost::make_shared<int[][2]>(2);
- BOOST_TEST(a1.get() != 0);
- BOOST_TEST(a1.use_count() == 1);
- BOOST_TEST(a1[0][0] == 0);
- BOOST_TEST(a1[0][1] == 0);
- BOOST_TEST(a1[1][0] == 0);
- BOOST_TEST(a1[1][1] == 0);
- }
- {
- boost::shared_ptr<int[2][2]> a1 = boost::make_shared<int[2][2]>();
- BOOST_TEST(a1.get() != 0);
- BOOST_TEST(a1.use_count() == 1);
- BOOST_TEST(a1[0][0] == 0);
- BOOST_TEST(a1[0][1] == 0);
- BOOST_TEST(a1[1][0] == 0);
- BOOST_TEST(a1[1][1] == 0);
- }
- {
- boost::shared_ptr<const int[]> a1 = boost::make_shared<const int[]>(3);
- const int* a2 = a1.get();
- BOOST_TEST(a1.use_count() == 1);
- BOOST_TEST(a2 != 0);
- BOOST_TEST(size_t(a2) % boost::alignment_of<int>::value == 0);
- BOOST_TEST(a1[0] == 0);
- BOOST_TEST(a1[1] == 0);
- BOOST_TEST(a1[2] == 0);
- }
- {
- boost::shared_ptr<const int[3]> a1 = boost::make_shared<const int[3]>();
- const int* a2 = a1.get();
- BOOST_TEST(a1.use_count() == 1);
- BOOST_TEST(a2 != 0);
- BOOST_TEST(size_t(a2) % boost::alignment_of<int>::value == 0);
- BOOST_TEST(a1[0] == 0);
- BOOST_TEST(a1[1] == 0);
- BOOST_TEST(a1[2] == 0);
- }
- {
- boost::shared_ptr<const int[][2]> a1 = boost::make_shared<const int[][2]>(2);
- BOOST_TEST(a1.get() != 0);
- BOOST_TEST(a1.use_count() == 1);
- BOOST_TEST(a1[0][0] == 0);
- BOOST_TEST(a1[0][1] == 0);
- BOOST_TEST(a1[1][0] == 0);
- BOOST_TEST(a1[1][1] == 0);
- }
- {
- boost::shared_ptr<const int[2][2]> a1 = boost::make_shared<const int[2][2]>();
- BOOST_TEST(a1.get() != 0);
- BOOST_TEST(a1.use_count() == 1);
- BOOST_TEST(a1[0][0] == 0);
- BOOST_TEST(a1[0][1] == 0);
- BOOST_TEST(a1[1][0] == 0);
- BOOST_TEST(a1[1][1] == 0);
- }
- {
- boost::shared_ptr<type[]> a1 = boost::make_shared<type[]>(3);
- type* a2 = a1.get();
- BOOST_TEST(a1.use_count() == 1);
- BOOST_TEST(a2 != 0);
- BOOST_TEST(size_t(a2) % boost::alignment_of<type>::value == 0);
+ boost::shared_ptr<int[]> result =
+ boost::make_shared<int[]>(3);
+ BOOST_TEST(result.get() != 0);
+ BOOST_TEST(result.use_count() == 1);
+ BOOST_TEST(boost::alignment::is_aligned(result.get(),
+ boost::alignment_of<int>::value));
+ BOOST_TEST(result[0] == 0);
+ BOOST_TEST(result[1] == 0);
+ BOOST_TEST(result[2] == 0);
+ }
+ {
+ boost::shared_ptr<int[3]> result =
+ boost::make_shared<int[3]>();
+ BOOST_TEST(result.get() != 0);
+ BOOST_TEST(result.use_count() == 1);
+ BOOST_TEST(boost::alignment::is_aligned(result.get(),
+ boost::alignment_of<int>::value));
+ BOOST_TEST(result[0] == 0);
+ BOOST_TEST(result[1] == 0);
+ BOOST_TEST(result[2] == 0);
+ }
+ {
+ boost::shared_ptr<int[][2]> result =
+ boost::make_shared<int[][2]>(2);
+ BOOST_TEST(result.get() != 0);
+ BOOST_TEST(result.use_count() == 1);
+ BOOST_TEST(boost::alignment::is_aligned(result.get(),
+ boost::alignment_of<int>::value));
+ BOOST_TEST(result[0][0] == 0);
+ BOOST_TEST(result[0][1] == 0);
+ BOOST_TEST(result[1][0] == 0);
+ BOOST_TEST(result[1][1] == 0);
+ }
+ {
+ boost::shared_ptr<int[2][2]> result =
+ boost::make_shared<int[2][2]>();
+ BOOST_TEST(result.get() != 0);
+ BOOST_TEST(result.use_count() == 1);
+ BOOST_TEST(boost::alignment::is_aligned(result.get(),
+ boost::alignment_of<int>::value));
+ BOOST_TEST(result[0][0] == 0);
+ BOOST_TEST(result[0][1] == 0);
+ BOOST_TEST(result[1][0] == 0);
+ BOOST_TEST(result[1][1] == 0);
+ }
+ {
+ boost::shared_ptr<const int[]> result =
+ boost::make_shared<const int[]>(3);
+ BOOST_TEST(result.get() != 0);
+ BOOST_TEST(result.use_count() == 1);
+ BOOST_TEST(boost::alignment::is_aligned(result.get(),
+ boost::alignment_of<int>::value));
+ BOOST_TEST(result[0] == 0);
+ BOOST_TEST(result[1] == 0);
+ BOOST_TEST(result[2] == 0);
+ }
+ {
+ boost::shared_ptr<const int[3]> result =
+ boost::make_shared<const int[3]>();
+ BOOST_TEST(result.get() != 0);
+ BOOST_TEST(result.use_count() == 1);
+ BOOST_TEST(boost::alignment::is_aligned(result.get(),
+ boost::alignment_of<int>::value));
+ BOOST_TEST(result[0] == 0);
+ BOOST_TEST(result[1] == 0);
+ BOOST_TEST(result[2] == 0);
+ }
+ {
+ boost::shared_ptr<const int[][2]> result =
+ boost::make_shared<const int[][2]>(2);
+ BOOST_TEST(result.get() != 0);
+ BOOST_TEST(result.use_count() == 1);
+ BOOST_TEST(boost::alignment::is_aligned(result.get(),
+ boost::alignment_of<int>::value));
+ BOOST_TEST(result[0][0] == 0);
+ BOOST_TEST(result[0][1] == 0);
+ BOOST_TEST(result[1][0] == 0);
+ BOOST_TEST(result[1][1] == 0);
+ }
+ {
+ boost::shared_ptr<const int[2][2]> result =
+ boost::make_shared<const int[2][2]>();
+ BOOST_TEST(result.get() != 0);
+ BOOST_TEST(result.use_count() == 1);
+ BOOST_TEST(boost::alignment::is_aligned(result.get(),
+ boost::alignment_of<int>::value));
+ BOOST_TEST(result[0][0] == 0);
+ BOOST_TEST(result[0][1] == 0);
+ BOOST_TEST(result[1][0] == 0);
+ BOOST_TEST(result[1][1] == 0);
+ }
+ {
+ boost::shared_ptr<type[]> result =
+ boost::make_shared<type[]>(3);
+ BOOST_TEST(result.get() != 0);
+ BOOST_TEST(result.use_count() == 1);
+ BOOST_TEST(boost::alignment::is_aligned(result.get(),
+ boost::alignment_of<type>::value));
BOOST_TEST(type::instances == 3);
- boost::weak_ptr<type[]> w1 = a1;
- a1.reset();
+ boost::weak_ptr<type[]> w1 = result;
+ result.reset();
BOOST_TEST(type::instances == 0);
}
{
- boost::shared_ptr<type[3]> a1 = boost::make_shared<type[3]>();
- type* a2 = a1.get();
- BOOST_TEST(a1.use_count() == 1);
- BOOST_TEST(a2 != 0);
- BOOST_TEST(size_t(a2) % boost::alignment_of<type>::value == 0);
+ boost::shared_ptr<type[3]> result =
+ boost::make_shared<type[3]>();
+ BOOST_TEST(result.get() != 0);
+ BOOST_TEST(result.use_count() == 1);
+ BOOST_TEST(boost::alignment::is_aligned(result.get(),
+ boost::alignment_of<type>::value));
BOOST_TEST(type::instances == 3);
- boost::weak_ptr<type[3]> w1 = a1;
- a1.reset();
+ boost::weak_ptr<type[3]> w1 = result;
+ result.reset();
BOOST_TEST(type::instances == 0);
}
{
- boost::shared_ptr<type[][2]> a1 = boost::make_shared<type[][2]>(2);
- BOOST_TEST(a1.get() != 0);
- BOOST_TEST(a1.use_count() == 1);
+ boost::shared_ptr<type[][2]> result =
+ boost::make_shared<type[][2]>(2);
+ BOOST_TEST(result.get() != 0);
+ BOOST_TEST(result.use_count() == 1);
+ BOOST_TEST(boost::alignment::is_aligned(result.get(),
+ boost::alignment_of<type>::value));
BOOST_TEST(type::instances == 4);
- a1.reset();
+ result.reset();
BOOST_TEST(type::instances == 0);
}
{
- boost::shared_ptr<type[2][2]> a1 = boost::make_shared<type[2][2]>();
- BOOST_TEST(a1.get() != 0);
- BOOST_TEST(a1.use_count() == 1);
+ boost::shared_ptr<type[2][2]> result =
+ boost::make_shared<type[2][2]>();
+ BOOST_TEST(result.get() != 0);
+ BOOST_TEST(result.use_count() == 1);
+ BOOST_TEST(boost::alignment::is_aligned(result.get(),
+ boost::alignment_of<type>::value));
BOOST_TEST(type::instances == 4);
- a1.reset();
+ result.reset();
BOOST_TEST(type::instances == 0);
}
{
- boost::shared_ptr<const type[]> a1 = boost::make_shared<const type[]>(3);
- const type* a2 = a1.get();
- BOOST_TEST(a1.use_count() == 1);
- BOOST_TEST(a2 != 0);
- BOOST_TEST(size_t(a2) % boost::alignment_of<type>::value == 0);
+ boost::shared_ptr<const type[]> result =
+ boost::make_shared<const type[]>(3);
+ BOOST_TEST(result.get() != 0);
+ BOOST_TEST(result.use_count() == 1);
+ BOOST_TEST(boost::alignment::is_aligned(result.get(),
+ boost::alignment_of<type>::value));
BOOST_TEST(type::instances == 3);
- a1.reset();
+ result.reset();
BOOST_TEST(type::instances == 0);
}
{
- boost::shared_ptr<const type[3]> a1 = boost::make_shared<const type[3]>();
- const type* a2 = a1.get();
- BOOST_TEST(a1.use_count() == 1);
- BOOST_TEST(a2 != 0);
- BOOST_TEST(size_t(a2) % boost::alignment_of<type>::value == 0);
+ boost::shared_ptr<const type[3]> result =
+ boost::make_shared<const type[3]>();
+ BOOST_TEST(result.get() != 0);
+ BOOST_TEST(result.use_count() == 1);
+ BOOST_TEST(boost::alignment::is_aligned(result.get(),
+ boost::alignment_of<type>::value));
BOOST_TEST(type::instances == 3);
- a1.reset();
+ result.reset();
BOOST_TEST(type::instances == 0);
}
{
- boost::shared_ptr<const type[][2]> a1 = boost::make_shared<const type[][2]>(2);
- BOOST_TEST(a1.get() != 0);
- BOOST_TEST(a1.use_count() == 1);
+ boost::shared_ptr<const type[][2]> result =
+ boost::make_shared<const type[][2]>(2);
+ BOOST_TEST(result.get() != 0);
+ BOOST_TEST(result.use_count() == 1);
+ BOOST_TEST(boost::alignment::is_aligned(result.get(),
+ boost::alignment_of<type>::value));
BOOST_TEST(type::instances == 4);
- a1.reset();
+ result.reset();
BOOST_TEST(type::instances == 0);
}
{
- boost::shared_ptr<const type[2][2]> a1 = boost::make_shared<const type[2][2]>();
- BOOST_TEST(a1.get() != 0);
- BOOST_TEST(a1.use_count() == 1);
+ boost::shared_ptr<const type[2][2]> result =
+ boost::make_shared<const type[2][2]>();
+ BOOST_TEST(result.get() != 0);
+ BOOST_TEST(result.use_count() == 1);
+ BOOST_TEST(boost::alignment::is_aligned(result.get(),
+ boost::alignment_of<type>::value));
BOOST_TEST(type::instances == 4);
- a1.reset();
+ result.reset();
BOOST_TEST(type::instances == 0);
}
return boost::report_errors();