diff options
Diffstat (limited to 'libs/smart_ptr/test/get_local_deleter_array_test.cpp')
-rw-r--r-- | libs/smart_ptr/test/get_local_deleter_array_test.cpp | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/libs/smart_ptr/test/get_local_deleter_array_test.cpp b/libs/smart_ptr/test/get_local_deleter_array_test.cpp new file mode 100644 index 0000000000..3a8351bca2 --- /dev/null +++ b/libs/smart_ptr/test/get_local_deleter_array_test.cpp @@ -0,0 +1,151 @@ +// +// get_local_deleter_array_test2.cpp +// +// Copyright 2002, 2011, 2017 Peter Dimov +// +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +#include <boost/smart_ptr/local_shared_ptr.hpp> +#include <boost/core/lightweight_test.hpp> + +struct deleter +{ + int data; + + deleter(): data(0) + { + } + + void operator()(void *) + { + BOOST_TEST(data == 17041); + } +}; + +struct deleter2 +{ +}; + +struct X +{ +}; + +int main() +{ + { + boost::local_shared_ptr<X[]> p; + + BOOST_TEST(boost::get_deleter<void>(p) == 0); + BOOST_TEST(boost::get_deleter<void const>(p) == 0); + BOOST_TEST(boost::get_deleter<int>(p) == 0); + BOOST_TEST(boost::get_deleter<int const>(p) == 0); + BOOST_TEST(boost::get_deleter<X>(p) == 0); + BOOST_TEST(boost::get_deleter<X const>(p) == 0); + BOOST_TEST(boost::get_deleter<deleter>(p) == 0); + BOOST_TEST(boost::get_deleter<deleter const>(p) == 0); + BOOST_TEST(boost::get_deleter<deleter2>(p) == 0); + BOOST_TEST(boost::get_deleter<deleter2 const>(p) == 0); + } + + { + boost::local_shared_ptr<X[1]> p; + + BOOST_TEST(boost::get_deleter<void>(p) == 0); + BOOST_TEST(boost::get_deleter<void const>(p) == 0); + BOOST_TEST(boost::get_deleter<int>(p) == 0); + BOOST_TEST(boost::get_deleter<int const>(p) == 0); + BOOST_TEST(boost::get_deleter<X>(p) == 0); + BOOST_TEST(boost::get_deleter<X const>(p) == 0); + BOOST_TEST(boost::get_deleter<deleter>(p) == 0); + BOOST_TEST(boost::get_deleter<deleter const>(p) == 0); + BOOST_TEST(boost::get_deleter<deleter2>(p) == 0); + BOOST_TEST(boost::get_deleter<deleter2 const>(p) == 0); + } + + { + boost::local_shared_ptr<X[]> p(new X[1]); + + BOOST_TEST(boost::get_deleter<void>(p) == 0); + BOOST_TEST(boost::get_deleter<void const>(p) == 0); + BOOST_TEST(boost::get_deleter<int>(p) == 0); + BOOST_TEST(boost::get_deleter<int const>(p) == 0); + BOOST_TEST(boost::get_deleter<X>(p) == 0); + BOOST_TEST(boost::get_deleter<X const>(p) == 0); + BOOST_TEST(boost::get_deleter<deleter>(p) == 0); + BOOST_TEST(boost::get_deleter<deleter const>(p) == 0); + BOOST_TEST(boost::get_deleter<deleter2>(p) == 0); + BOOST_TEST(boost::get_deleter<deleter2 const>(p) == 0); + } + + { + boost::local_shared_ptr<X[1]> p(new X[1]); + + BOOST_TEST(boost::get_deleter<void>(p) == 0); + BOOST_TEST(boost::get_deleter<void const>(p) == 0); + BOOST_TEST(boost::get_deleter<int>(p) == 0); + BOOST_TEST(boost::get_deleter<int const>(p) == 0); + BOOST_TEST(boost::get_deleter<X>(p) == 0); + BOOST_TEST(boost::get_deleter<X const>(p) == 0); + BOOST_TEST(boost::get_deleter<deleter>(p) == 0); + BOOST_TEST(boost::get_deleter<deleter const>(p) == 0); + BOOST_TEST(boost::get_deleter<deleter2>(p) == 0); + BOOST_TEST(boost::get_deleter<deleter2 const>(p) == 0); + } + + { + X x[1]; + boost::local_shared_ptr<X[]> p(x, deleter()); + + BOOST_TEST(boost::get_deleter<void>(p) == 0); + BOOST_TEST(boost::get_deleter<void const>(p) == 0); + BOOST_TEST(boost::get_deleter<int>(p) == 0); + BOOST_TEST(boost::get_deleter<int const>(p) == 0); + BOOST_TEST(boost::get_deleter<X>(p) == 0); + BOOST_TEST(boost::get_deleter<X const>(p) == 0); + BOOST_TEST(boost::get_deleter<deleter2>(p) == 0); + BOOST_TEST(boost::get_deleter<deleter2 const>(p) == 0); + + deleter * q = boost::get_deleter<deleter>(p); + + BOOST_TEST(q != 0); + BOOST_TEST(q->data == 0); + + q->data = 17041; + + deleter const * r = boost::get_deleter<deleter const>(p); + + BOOST_TEST(r == q); + BOOST_TEST(r->data == 17041); + } + + { + X x[1]; + boost::local_shared_ptr<X[1]> p(x, deleter()); + + BOOST_TEST(boost::get_deleter<void>(p) == 0); + BOOST_TEST(boost::get_deleter<void const>(p) == 0); + BOOST_TEST(boost::get_deleter<int>(p) == 0); + BOOST_TEST(boost::get_deleter<int const>(p) == 0); + BOOST_TEST(boost::get_deleter<X>(p) == 0); + BOOST_TEST(boost::get_deleter<X const>(p) == 0); + BOOST_TEST(boost::get_deleter<deleter2>(p) == 0); + BOOST_TEST(boost::get_deleter<deleter2 const>(p) == 0); + + deleter * q = boost::get_deleter<deleter>(p); + + BOOST_TEST(q != 0); + BOOST_TEST(q->data == 0); + + q->data = 17041; + + deleter const * r = boost::get_deleter<deleter const>(p); + + BOOST_TEST(r == q); + BOOST_TEST(r->data == 17041); + } + + return boost::report_errors(); +} |