changeset: 2:16736bb12c06 user: Georg Sauthoff date: Thu Aug 06 19:00:38 2009 +0200 summary: added assignment tests diff -r c7740aa5c918 -r 16736bb12c06 libs/smart_ptr/test/intrusive_ptr_test.cpp --- a/libs/smart_ptr/test/intrusive_ptr_test.cpp Thu Aug 06 17:25:48 2009 +0200 +++ b/libs/smart_ptr/test/intrusive_ptr_test.cpp Thu Aug 06 19:00:38 2009 +0200 @@ -269,14 +269,81 @@ void copy_assignment() { + X *x1 = new X(); + X *x2 = new X(); + X *t1 = x1; + X *t2 = x2; + boost::intrusive_ptr s1(x1); + boost::intrusive_ptr s2(x2); + boost::intrusive_ptr s3(x1); + boost::intrusive_ptr s4(x2); + boost::intrusive_ptr s5; + + s1 = s2; + BOOST_TEST(s1.get() == x2); + BOOST_TEST(s2.get() == x2); + BOOST_TEST(x2->use_count() == 3); + + s1 = s3; + BOOST_TEST(s1.get() == x1); + BOOST_TEST(s3.get() == x1); + BOOST_TEST(s2.get() == x2); + BOOST_TEST(x2->use_count() == 2); + BOOST_TEST(x1->use_count() == 2); + + s5 = s2; + BOOST_TEST(s5.get() == x2); + BOOST_TEST(s2.get() == x2); + BOOST_TEST(x2->use_count() == 3); + + BOOST_TEST(t1 == x1); + BOOST_TEST(t2 == x2); } void conversion_assignment() { + X *x = new X(); + Y *y = new Y(); + X *t = y; + boost::intrusive_ptr a; + BOOST_TEST(a.get() == 0); + boost::intrusive_ptr u(x); + BOOST_TEST(u.get() == x); + boost::intrusive_ptr v(y); + BOOST_TEST(v.get() == y); + + a = v; + BOOST_TEST(a.get() == y); + BOOST_TEST(v.get() == y); + BOOST_TEST(y->use_count() == 2); + + u = v; + BOOST_TEST(u.get() == y); + BOOST_TEST(v.get() == y); + BOOST_TEST(y->use_count() == 3); + + BOOST_TEST(t == y); } void pointer_assignment() { + X *x = new X(); + X *t = x; + boost::intrusive_ptr s; + BOOST_TEST(s.get() == 0); + s = x; + BOOST_TEST(x == t); + BOOST_TEST(s.get() == x); + BOOST_TEST(s->use_count() == 1); + + intrusive_ptr_add_ref(x); + X *x2 = new X(); + s = x2; + BOOST_TEST(s.get() == x2); + BOOST_TEST(s->use_count() == 1); + BOOST_TEST(x->use_count() == 1); + + delete x; } void test()