summaryrefslogtreecommitdiff
path: root/libs/smart_ptr/test/get_local_deleter_array_test.cpp
diff options
context:
space:
mode:
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.cpp151
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();
+}