summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/smart_ptr/test/quick.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/smart_ptr/test/quick.cpp')
-rw-r--r--src/boost/libs/smart_ptr/test/quick.cpp80
1 files changed, 80 insertions, 0 deletions
diff --git a/src/boost/libs/smart_ptr/test/quick.cpp b/src/boost/libs/smart_ptr/test/quick.cpp
new file mode 100644
index 000000000..062309498
--- /dev/null
+++ b/src/boost/libs/smart_ptr/test/quick.cpp
@@ -0,0 +1,80 @@
+//
+// quick.cpp - a quick (CI) test for Boost.SmartPtr
+//
+// Copyright 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.hpp>
+#include <boost/core/lightweight_test.hpp>
+
+class X
+{
+private:
+
+ X( X const & );
+ X & operator=( X const & );
+
+public:
+
+ static int instances;
+
+ X()
+ {
+ ++instances;
+ }
+
+ ~X()
+ {
+ --instances;
+ }
+};
+
+int X::instances = 0;
+
+int main()
+{
+ {
+ boost::shared_ptr<X> p1( new X );
+ BOOST_TEST_EQ( X::instances, 1 );
+ BOOST_TEST_EQ( p1.use_count(), 1 );
+
+ boost::shared_ptr<X> p2( p1 );
+ BOOST_TEST_EQ( p2.use_count(), 2 );
+
+ boost::weak_ptr<X> wp( p1 );
+ BOOST_TEST_EQ( wp.use_count(), 2 );
+
+ p1.reset();
+ BOOST_TEST_EQ( wp.use_count(), 1 );
+
+ p2.reset();
+ BOOST_TEST_EQ( wp.use_count(), 0 );
+ BOOST_TEST_EQ( X::instances, 0 );
+ }
+
+ {
+ boost::shared_ptr<X> p1 = boost::make_shared<X>();
+ BOOST_TEST_EQ( X::instances, 1 );
+ BOOST_TEST_EQ( p1.use_count(), 1 );
+
+ boost::shared_ptr<X> p2( p1 );
+ BOOST_TEST_EQ( p2.use_count(), 2 );
+
+ boost::weak_ptr<X> wp( p1 );
+ BOOST_TEST_EQ( wp.use_count(), 2 );
+
+ p1.reset();
+ BOOST_TEST_EQ( wp.use_count(), 1 );
+
+ p2.reset();
+ BOOST_TEST_EQ( wp.use_count(), 0 );
+ BOOST_TEST_EQ( X::instances, 0 );
+ }
+
+ return boost::report_errors();
+}