From b18f68324fcbcfccefd1875a5d80225c57ec3f32 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Mon, 5 Jun 2017 16:38:41 +0300 Subject: [PATCH] Add more tests --- test/local_sp_test.cpp | 205 +++++++++++++++++++++++++++++++++++------ 1 file changed, 178 insertions(+), 27 deletions(-) diff --git a/test/local_sp_test.cpp b/test/local_sp_test.cpp index 36ee0a1..d3388f7 100644 --- a/test/local_sp_test.cpp +++ b/test/local_sp_test.cpp @@ -35,33 +35,29 @@ long X::instances = 0; class incomplete; +template static void test_empty( boost::local_shared_ptr const & p ) +{ + BOOST_TEST( p? false: true ); + BOOST_TEST( !p ); + BOOST_TEST( p.get() == 0 ); + BOOST_TEST( p.local_use_count() == 0 ); +} + static void default_constructor() { { boost::local_shared_ptr p; - - BOOST_TEST( p? false: true ); - BOOST_TEST( !p ); - BOOST_TEST( p.get() == 0 ); - BOOST_TEST( p.local_use_count() == 0 ); + test_empty( p ); } { boost::local_shared_ptr p; - - BOOST_TEST( p? false: true ); - BOOST_TEST( !p ); - BOOST_TEST( p.get() == 0 ); - BOOST_TEST( p.local_use_count() == 0 ); + test_empty( p ); } { boost::local_shared_ptr p; - - BOOST_TEST( p? false: true ); - BOOST_TEST( !p ); - BOOST_TEST( p.get() == 0 ); - BOOST_TEST( p.local_use_count() == 0 ); + test_empty( p ); } BOOST_TEST( X::instances == 0 ); @@ -71,13 +67,42 @@ static void default_constructor() BOOST_TEST( X::instances == 0 ); - BOOST_TEST( p? false: true ); - BOOST_TEST( !p ); - BOOST_TEST( p.get() == 0 ); - BOOST_TEST( p.local_use_count() == 0 ); + test_empty( p ); } } +static void nullptr_constructor() +{ +#if !defined( BOOST_NO_CXX11_NULLPTR ) + + { + boost::local_shared_ptr p( nullptr ); + test_empty( p ); + } + + { + boost::local_shared_ptr p( nullptr ); + test_empty( p ); + } + + { + boost::local_shared_ptr p( nullptr ); + test_empty( p ); + } + + BOOST_TEST( X::instances == 0 ); + + { + boost::local_shared_ptr p( nullptr ); + + BOOST_TEST( X::instances == 0 ); + + test_empty( p ); + } + +#endif +} + template static void pc0_test_() { boost::local_shared_ptr p( static_cast( 0 ) ); @@ -182,14 +207,6 @@ static void deleter_constructor() deleter2_test_(); } -template static void test_empty( boost::local_shared_ptr const & p ) -{ - BOOST_TEST( p? false: true ); - BOOST_TEST( !p ); - BOOST_TEST( p.get() == 0 ); - BOOST_TEST( p.local_use_count() == 0 ); -} - template static void empty_copy_test() { boost::local_shared_ptr p1; @@ -256,20 +273,154 @@ static void copy_constructor() empty_copy_test(); empty_copy_test(); empty_copy_test(); + BOOST_TEST( X::instances == 0 ); null_copy_test(); null_copy_test(); + BOOST_TEST( X::instances == 0 ); new_copy_test(); new_copy_test(); + BOOST_TEST( X::instances == 0 ); +} + +template void test_aliasing_( boost::local_shared_ptr const & p1, U * p2 ) +{ + boost::local_shared_ptr p3( p1, p2 ); + + BOOST_TEST( p3.get() == p2 ); + BOOST_TEST( p3.local_use_count() == p1.local_use_count() ); + BOOST_TEST( !p3.owner_before( p1 ) && !p1.owner_before( p3 ) ); +} + +template void test_01_aliasing_() +{ + U u; + boost::local_shared_ptr p1; + + test_aliasing_( p1, &u ); +} + +template void test_01_aliasing() +{ + test_01_aliasing_(); + test_01_aliasing_(); + test_01_aliasing_(); + test_01_aliasing_(); + + test_01_aliasing_(); + test_01_aliasing_(); + test_01_aliasing_(); + test_01_aliasing_(); +} + +template void test_10_aliasing_() +{ + boost::local_shared_ptr p1( new T() ); + test_aliasing_( p1, static_cast(0) ); +} + +template void test_10_aliasing() +{ + test_10_aliasing_(); + test_10_aliasing_(); + test_10_aliasing_(); + test_10_aliasing_(); + + test_10_aliasing_(); + test_10_aliasing_(); + test_10_aliasing_(); + test_10_aliasing_(); + + test_10_aliasing_(); + test_10_aliasing_(); + test_10_aliasing_(); + test_10_aliasing_(); + + test_10_aliasing_(); + test_10_aliasing_(); + test_10_aliasing_(); + test_10_aliasing_(); +} + +template void test_11_aliasing_() +{ + U u; + boost::local_shared_ptr p1( new T() ); + + test_aliasing_( p1, &u ); +} + +template void test_11_aliasing() +{ + test_11_aliasing_(); + test_11_aliasing_(); + test_11_aliasing_(); + test_11_aliasing_(); + + test_11_aliasing_(); + test_11_aliasing_(); + test_11_aliasing_(); + test_11_aliasing_(); +} + +static void aliasing_constructor() +{ + test_01_aliasing(); + test_10_aliasing(); + test_11_aliasing(); + + test_01_aliasing(); + + test_10_aliasing(); + + test_10_aliasing(); + + test_01_aliasing(); + BOOST_TEST( X::instances == 0 ); + + test_10_aliasing(); + BOOST_TEST( X::instances == 0 ); + + test_11_aliasing(); + BOOST_TEST( X::instances == 0 ); + + test_01_aliasing(); + BOOST_TEST( X::instances == 0 ); + + test_10_aliasing(); + BOOST_TEST( X::instances == 0 ); + + test_11_aliasing(); + BOOST_TEST( X::instances == 0 ); + + test_01_aliasing(); + BOOST_TEST( X::instances == 0 ); + + test_10_aliasing(); + BOOST_TEST( X::instances == 0 ); + + test_11_aliasing(); + BOOST_TEST( X::instances == 0 ); + + test_01_aliasing(); + BOOST_TEST( X::instances == 0 ); + + test_10_aliasing(); + BOOST_TEST( X::instances == 0 ); + + test_10_aliasing(); + BOOST_TEST( X::instances == 0 ); } int main() { default_constructor(); + nullptr_constructor(); pointer_constructor(); deleter_constructor(); copy_constructor(); + aliasing_constructor(); return boost::report_errors(); }