From 1ef2a5b059df50d2f0fb5bb8ae6baab3f198664f Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Tue, 3 Dec 2002 13:27:35 +0000 Subject: [PATCH] More weak_ptr tests. [SVN r16487] --- weak_ptr_test.cpp | 76 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 74 insertions(+), 2 deletions(-) diff --git a/weak_ptr_test.cpp b/weak_ptr_test.cpp index f06f1c8..7628dc9 100644 --- a/weak_ptr_test.cpp +++ b/weak_ptr_test.cpp @@ -564,8 +564,35 @@ void conversion_assignment() } } -void shared_ptr_assignment() +template void shared_ptr_assignment(boost::shared_ptr sp, T * = 0) { + BOOST_TEST(sp.unique()); + + boost::weak_ptr p1; + boost::weak_ptr p2(p1); + boost::weak_ptr p3(sp); + boost::weak_ptr p4(p3); + + p1 = sp; + BOOST_TEST(p1.use_count() == 1); + + p2 = sp; + BOOST_TEST(p2.use_count() == 1); + + p3 = sp; + BOOST_TEST(p3.use_count() == 1); + + p4 = sp; + BOOST_TEST(p4.use_count() == 1); + + sp.reset(); + + BOOST_TEST(p1.use_count() == 0); + BOOST_TEST(p2.use_count() == 0); + BOOST_TEST(p3.use_count() == 0); + BOOST_TEST(p4.use_count() == 0); + + p1 = sp; } void test() @@ -575,7 +602,13 @@ void test() copy_assignment(boost::shared_ptr(new int)); copy_assignment(create_incomplete()); conversion_assignment(); - shared_ptr_assignment(); + shared_ptr_assignment(boost::shared_ptr(new int)); + shared_ptr_assignment(boost::shared_ptr(new int)); + shared_ptr_assignment(boost::shared_ptr(new X)); + shared_ptr_assignment(boost::shared_ptr(new X)); + shared_ptr_assignment(boost::shared_ptr(new int)); + shared_ptr_assignment(create_incomplete()); + shared_ptr_assignment(create_incomplete()); } } // namespace n_assignment @@ -583,8 +616,47 @@ void test() namespace n_reset { +template void test2(boost::shared_ptr sp, T * = 0) +{ + BOOST_TEST(sp.unique()); + + boost::weak_ptr p1; + boost::weak_ptr p2(p1); + boost::weak_ptr p3(sp); + boost::weak_ptr p4(p3); + boost::weak_ptr p5(sp); + boost::weak_ptr p6(p5); + + p1.reset(); + BOOST_TEST(p1.use_count() == 0); + + p2.reset(); + BOOST_TEST(p2.use_count() == 0); + + p3.reset(); + BOOST_TEST(p3.use_count() == 0); + + p4.reset(); + BOOST_TEST(p4.use_count() == 0); + + sp.reset(); + + p5.reset(); + BOOST_TEST(p5.use_count() == 0); + + p6.reset(); + BOOST_TEST(p6.use_count() == 0); +} + void test() { + test2(boost::shared_ptr(new int)); + test2(boost::shared_ptr(new int)); + test2(boost::shared_ptr(new X)); + test2(boost::shared_ptr(new X)); + test2(boost::shared_ptr(new int)); + test2(create_incomplete()); + test2(create_incomplete()); } } // namespace n_reset