forked from boostorg/smart_ptr
Add assignment tests to intrusive_ptr_test
This commit is contained in:
@ -303,14 +303,211 @@ namespace n_assignment
|
|||||||
|
|
||||||
void copy_assignment()
|
void copy_assignment()
|
||||||
{
|
{
|
||||||
|
BOOST_TEST( N::base::instances == 0 );
|
||||||
|
|
||||||
|
{
|
||||||
|
boost::intrusive_ptr<X> p1;
|
||||||
|
|
||||||
|
p1 = p1;
|
||||||
|
|
||||||
|
BOOST_TEST(p1 == p1);
|
||||||
|
BOOST_TEST(p1? false: true);
|
||||||
|
BOOST_TEST(!p1);
|
||||||
|
BOOST_TEST(p1.get() == 0);
|
||||||
|
|
||||||
|
boost::intrusive_ptr<X> p2;
|
||||||
|
|
||||||
|
p1 = p2;
|
||||||
|
|
||||||
|
BOOST_TEST(p1 == p2);
|
||||||
|
BOOST_TEST(p1? false: true);
|
||||||
|
BOOST_TEST(!p1);
|
||||||
|
BOOST_TEST(p1.get() == 0);
|
||||||
|
|
||||||
|
boost::intrusive_ptr<X> 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<X> 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()
|
void conversion_assignment()
|
||||||
{
|
{
|
||||||
|
BOOST_TEST( N::base::instances == 0 );
|
||||||
|
|
||||||
|
{
|
||||||
|
boost::intrusive_ptr<X> p1;
|
||||||
|
|
||||||
|
boost::intrusive_ptr<Y> 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<Y> p4(new Y);
|
||||||
|
|
||||||
|
BOOST_TEST(N::base::instances == 1);
|
||||||
|
BOOST_TEST(p4->use_count() == 1);
|
||||||
|
|
||||||
|
boost::intrusive_ptr<X> 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()
|
void pointer_assignment()
|
||||||
{
|
{
|
||||||
|
BOOST_TEST( N::base::instances == 0 );
|
||||||
|
|
||||||
|
{
|
||||||
|
boost::intrusive_ptr<X> p1;
|
||||||
|
|
||||||
|
p1 = p1.get();
|
||||||
|
|
||||||
|
BOOST_TEST(p1 == p1);
|
||||||
|
BOOST_TEST(p1? false: true);
|
||||||
|
BOOST_TEST(!p1);
|
||||||
|
BOOST_TEST(p1.get() == 0);
|
||||||
|
|
||||||
|
boost::intrusive_ptr<X> p2;
|
||||||
|
|
||||||
|
p1 = p2.get();
|
||||||
|
|
||||||
|
BOOST_TEST(p1 == p2);
|
||||||
|
BOOST_TEST(p1? false: true);
|
||||||
|
BOOST_TEST(!p1);
|
||||||
|
BOOST_TEST(p1.get() == 0);
|
||||||
|
|
||||||
|
boost::intrusive_ptr<X> 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<X> 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<X> p1;
|
||||||
|
|
||||||
|
boost::intrusive_ptr<Y> 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<Y> p4(new Y);
|
||||||
|
|
||||||
|
BOOST_TEST(N::base::instances == 1);
|
||||||
|
BOOST_TEST(p4->use_count() == 1);
|
||||||
|
|
||||||
|
boost::intrusive_ptr<X> 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()
|
void test()
|
||||||
|
Reference in New Issue
Block a user