From 1725e26f70557bd756959e9becebc151509333f1 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Sat, 20 Apr 2019 18:02:11 +0300 Subject: [PATCH] Add assignment tests to intrusive_ptr_test --- test/intrusive_ptr_test.cpp | 197 ++++++++++++++++++++++++++++++++++++ 1 file changed, 197 insertions(+) diff --git a/test/intrusive_ptr_test.cpp b/test/intrusive_ptr_test.cpp index b46ddf3..0c49b97 100644 --- a/test/intrusive_ptr_test.cpp +++ b/test/intrusive_ptr_test.cpp @@ -303,14 +303,211 @@ namespace n_assignment void copy_assignment() { + BOOST_TEST( N::base::instances == 0 ); + + { + boost::intrusive_ptr p1; + + p1 = p1; + + BOOST_TEST(p1 == p1); + BOOST_TEST(p1? false: true); + BOOST_TEST(!p1); + BOOST_TEST(p1.get() == 0); + + boost::intrusive_ptr p2; + + p1 = p2; + + BOOST_TEST(p1 == p2); + BOOST_TEST(p1? false: true); + BOOST_TEST(!p1); + BOOST_TEST(p1.get() == 0); + + boost::intrusive_ptr p3(p1); + + p1 = p3; + + BOOST_TEST(p1 == p3); + BOOST_TEST(p1? false: true); + BOOST_TEST(!p1); + BOOST_TEST(p1.get() == 0); + + BOOST_TEST(N::base::instances == 0); + + boost::intrusive_ptr p4(new X); + + BOOST_TEST(N::base::instances == 1); + + p1 = p4; + + BOOST_TEST(N::base::instances == 1); + + BOOST_TEST(p1 == p4); + + BOOST_TEST(p1->use_count() == 2); + + p1 = p2; + + BOOST_TEST(p1 == p2); + BOOST_TEST(N::base::instances == 1); + + p4 = p3; + + BOOST_TEST(p4 == p3); + BOOST_TEST(N::base::instances == 0); + } } void conversion_assignment() { + BOOST_TEST( N::base::instances == 0 ); + + { + boost::intrusive_ptr p1; + + boost::intrusive_ptr p2; + + p1 = p2; + + BOOST_TEST(p1 == p2); + BOOST_TEST(p1? false: true); + BOOST_TEST(!p1); + BOOST_TEST(p1.get() == 0); + + BOOST_TEST(N::base::instances == 0); + + boost::intrusive_ptr p4(new Y); + + BOOST_TEST(N::base::instances == 1); + BOOST_TEST(p4->use_count() == 1); + + boost::intrusive_ptr p5(p4); + BOOST_TEST(p4->use_count() == 2); + + p1 = p4; + + BOOST_TEST(N::base::instances == 1); + + BOOST_TEST(p1 == p4); + + BOOST_TEST(p1->use_count() == 3); + BOOST_TEST(p4->use_count() == 3); + + p1 = p2; + + BOOST_TEST(p1 == p2); + BOOST_TEST(N::base::instances == 1); + BOOST_TEST(p4->use_count() == 2); + + p4 = p2; + p5 = p2; + + BOOST_TEST(p4 == p2); + BOOST_TEST(N::base::instances == 0); + } } void pointer_assignment() { + BOOST_TEST( N::base::instances == 0 ); + + { + boost::intrusive_ptr p1; + + p1 = p1.get(); + + BOOST_TEST(p1 == p1); + BOOST_TEST(p1? false: true); + BOOST_TEST(!p1); + BOOST_TEST(p1.get() == 0); + + boost::intrusive_ptr p2; + + p1 = p2.get(); + + BOOST_TEST(p1 == p2); + BOOST_TEST(p1? false: true); + BOOST_TEST(!p1); + BOOST_TEST(p1.get() == 0); + + boost::intrusive_ptr p3(p1); + + p1 = p3.get(); + + BOOST_TEST(p1 == p3); + BOOST_TEST(p1? false: true); + BOOST_TEST(!p1); + BOOST_TEST(p1.get() == 0); + + BOOST_TEST(N::base::instances == 0); + + boost::intrusive_ptr p4(new X); + + BOOST_TEST(N::base::instances == 1); + + p1 = p4.get(); + + BOOST_TEST(N::base::instances == 1); + + BOOST_TEST(p1 == p4); + + BOOST_TEST(p1->use_count() == 2); + + p1 = p2.get(); + + BOOST_TEST(p1 == p2); + BOOST_TEST(N::base::instances == 1); + + p4 = p3.get(); + + BOOST_TEST(p4 == p3); + BOOST_TEST(N::base::instances == 0); + } + + { + boost::intrusive_ptr p1; + + boost::intrusive_ptr p2; + + p1 = p2.get(); + + BOOST_TEST(p1 == p2); + BOOST_TEST(p1? false: true); + BOOST_TEST(!p1); + BOOST_TEST(p1.get() == 0); + + BOOST_TEST(N::base::instances == 0); + + boost::intrusive_ptr p4(new Y); + + BOOST_TEST(N::base::instances == 1); + BOOST_TEST(p4->use_count() == 1); + + boost::intrusive_ptr p5(p4); + BOOST_TEST(p4->use_count() == 2); + + p1 = p4.get(); + + BOOST_TEST(N::base::instances == 1); + + BOOST_TEST(p1 == p4); + + BOOST_TEST(p1->use_count() == 3); + BOOST_TEST(p4->use_count() == 3); + + p1 = p2.get(); + + BOOST_TEST(p1 == p2); + BOOST_TEST(N::base::instances == 1); + BOOST_TEST(p4->use_count() == 2); + + p4 = p2.get(); + p5 = p2.get(); + + BOOST_TEST(p4 == p2); + BOOST_TEST(N::base::instances == 0); + } } void test()