diff --git a/test/Jamfile b/test/Jamfile index 7f65864..e865ac0 100644 --- a/test/Jamfile +++ b/test/Jamfile @@ -10,6 +10,10 @@ # bring in rules for testing import testing ; +# quick test (for CI) +run quick.cpp ; + +# full test suite run smart_ptr_test.cpp ; run shared_ptr_basic_test.cpp : : : gcc:-Wno-non-virtual-dtor ; run shared_ptr_test.cpp : : : gcc:-Wno-non-virtual-dtor ; diff --git a/test/quick.cpp b/test/quick.cpp new file mode 100644 index 0000000..0623094 --- /dev/null +++ b/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 +#include + +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 p1( new X ); + BOOST_TEST_EQ( X::instances, 1 ); + BOOST_TEST_EQ( p1.use_count(), 1 ); + + boost::shared_ptr p2( p1 ); + BOOST_TEST_EQ( p2.use_count(), 2 ); + + boost::weak_ptr 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 p1 = boost::make_shared(); + BOOST_TEST_EQ( X::instances, 1 ); + BOOST_TEST_EQ( p1.use_count(), 1 ); + + boost::shared_ptr p2( p1 ); + BOOST_TEST_EQ( p2.use_count(), 2 ); + + boost::weak_ptr 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(); +}