From 68fb786d4d618b90fe49894b13789afdf57d82bf Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Mon, 19 Jun 2017 17:36:13 +0300 Subject: [PATCH] Add more tests --- test/local_sp_test.cpp | 189 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 189 insertions(+) diff --git a/test/local_sp_test.cpp b/test/local_sp_test.cpp index 4d447b7..dd161d8 100644 --- a/test/local_sp_test.cpp +++ b/test/local_sp_test.cpp @@ -9,6 +9,8 @@ // #include +#include +#include #include struct X @@ -2302,6 +2304,186 @@ static void element_access() BOOST_TEST( X::instances == 0 ); } +// shared_ptr conversion + +template static void empty_shared_ptr_conversion_() +{ + boost::local_shared_ptr p1; + boost::shared_ptr p2( p1 ); + + BOOST_TEST_EQ( p2.get(), static_cast(0) ); + BOOST_TEST_EQ( p2.use_count(), 0 ); +} + +template static void empty_shared_ptr_conversion() +{ + empty_shared_ptr_conversion_(); + empty_shared_ptr_conversion_(); + empty_shared_ptr_conversion_(); + empty_shared_ptr_conversion_(); + + empty_shared_ptr_conversion_(); + empty_shared_ptr_conversion_(); + empty_shared_ptr_conversion_(); + + empty_shared_ptr_conversion_(); + empty_shared_ptr_conversion_(); + empty_shared_ptr_conversion_(); + empty_shared_ptr_conversion_(); + + empty_shared_ptr_conversion_(); + empty_shared_ptr_conversion_(); + empty_shared_ptr_conversion_(); +} + +template static void new_shared_ptr_conversion_() +{ + boost::local_shared_ptr p1( new T() ); + boost::shared_ptr p2( p1 ); + + BOOST_TEST_EQ( p2.get(), p1.get() ); + BOOST_TEST_EQ( p2.use_count(), 2 ); + + boost::shared_ptr p3( p1 ); + + BOOST_TEST_EQ( p3.get(), p1.get() ); + BOOST_TEST_EQ( p3.use_count(), 3 ); + BOOST_TEST( !(p2 < p3) && !(p3 < p2) ); + + BOOST_TEST_EQ( p1.local_use_count(), 1 ); + + p1.reset(); + + BOOST_TEST_EQ( p2.use_count(), 2 ); + BOOST_TEST_EQ( p3.use_count(), 2 ); +} + +template static void new_shared_ptr_conversion() +{ + new_shared_ptr_conversion_(); + new_shared_ptr_conversion_(); + new_shared_ptr_conversion_(); + new_shared_ptr_conversion_(); + + new_shared_ptr_conversion_(); + new_shared_ptr_conversion_(); + new_shared_ptr_conversion_(); + + new_shared_ptr_conversion_(); + new_shared_ptr_conversion_(); + new_shared_ptr_conversion_(); + new_shared_ptr_conversion_(); + + new_shared_ptr_conversion_(); + new_shared_ptr_conversion_(); + new_shared_ptr_conversion_(); +} + +static void shared_ptr_conversion() +{ + empty_shared_ptr_conversion(); + empty_shared_ptr_conversion(); + empty_shared_ptr_conversion(); + empty_shared_ptr_conversion(); + + BOOST_TEST( X::instances == 0 ); + + new_shared_ptr_conversion(); + new_shared_ptr_conversion(); + + BOOST_TEST( X::instances == 0 ); +} + +// weak_ptr conversion + +template static void empty_weak_ptr_conversion_() +{ + boost::local_shared_ptr p1; + boost::weak_ptr p2( p1 ); + + BOOST_TEST_EQ( p2.lock().get(), static_cast(0) ); + BOOST_TEST_EQ( p2.use_count(), 0 ); +} + +template static void empty_weak_ptr_conversion() +{ + empty_weak_ptr_conversion_(); + empty_weak_ptr_conversion_(); + empty_weak_ptr_conversion_(); + empty_weak_ptr_conversion_(); + + empty_weak_ptr_conversion_(); + empty_weak_ptr_conversion_(); + empty_weak_ptr_conversion_(); + + empty_weak_ptr_conversion_(); + empty_weak_ptr_conversion_(); + empty_weak_ptr_conversion_(); + empty_weak_ptr_conversion_(); + + empty_weak_ptr_conversion_(); + empty_weak_ptr_conversion_(); + empty_weak_ptr_conversion_(); +} + +template static void new_weak_ptr_conversion_() +{ + boost::local_shared_ptr p1( new T() ); + boost::weak_ptr p2( p1 ); + + BOOST_TEST_EQ( p2.lock().get(), p1.get() ); + BOOST_TEST_EQ( p2.use_count(), 1 ); + + boost::weak_ptr p3( p1 ); + + BOOST_TEST_EQ( p3.lock().get(), p1.get() ); + BOOST_TEST_EQ( p3.use_count(), 1 ); + BOOST_TEST( !(p2 < p3) && !(p3 < p2) ); + + BOOST_TEST_EQ( p1.local_use_count(), 1 ); + + p1.reset(); + + BOOST_TEST_EQ( p2.use_count(), 0 ); + BOOST_TEST_EQ( p3.use_count(), 0 ); +} + +template static void new_weak_ptr_conversion() +{ + new_weak_ptr_conversion_(); + new_weak_ptr_conversion_(); + new_weak_ptr_conversion_(); + new_weak_ptr_conversion_(); + + new_weak_ptr_conversion_(); + new_weak_ptr_conversion_(); + new_weak_ptr_conversion_(); + + new_weak_ptr_conversion_(); + new_weak_ptr_conversion_(); + new_weak_ptr_conversion_(); + new_weak_ptr_conversion_(); + + new_weak_ptr_conversion_(); + new_weak_ptr_conversion_(); + new_weak_ptr_conversion_(); +} + +static void weak_ptr_conversion() +{ + empty_weak_ptr_conversion(); + empty_weak_ptr_conversion(); + empty_weak_ptr_conversion(); + empty_weak_ptr_conversion(); + + BOOST_TEST( X::instances == 0 ); + + new_weak_ptr_conversion(); + new_weak_ptr_conversion(); + + BOOST_TEST( X::instances == 0 ); +} + // main int main() @@ -2334,9 +2516,16 @@ int main() aliasing_reset(); element_access(); + shared_ptr_conversion(); + weak_ptr_conversion(); // swap_test(); // owner_before_test(); // equal_test(); + // operator< ? + // casts + // get_pointer + // operator<< + // hash return boost::report_errors(); }