#include "SharedPtrTest.h" #include <alib/utility> CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( SharedPtrTest, "bits" ); CPPUNIT_TEST_SUITE_REGISTRATION( SharedPtrTest ); void SharedPtrTest::setUp() { } void SharedPtrTest::tearDown() { } void SharedPtrTest::testSharedPtr1() { int moves; int copies; ext::cow_shared_ptr<SharedPtrTest::Moveable> one(new SharedPtrTest::Moveable(moves, copies)); CPPUNIT_ASSERT(one.unique()); CPPUNIT_ASSERT(moves == 0); CPPUNIT_ASSERT(copies == 0); ext::cow_shared_ptr<SharedPtrTest::Moveable> two(one); CPPUNIT_ASSERT(!one.unique()); CPPUNIT_ASSERT(moves == 0); CPPUNIT_ASSERT(copies == 0); std::as_const(two).get(); ext::cow_shared_ptr<SharedPtrTest::Moveable> three(std::move ( two ) ); std::as_const(three).get(); CPPUNIT_ASSERT(!one.unique()); CPPUNIT_ASSERT(moves == 0); CPPUNIT_ASSERT(copies == 0); two = std::move ( three ) ; two.get(); CPPUNIT_ASSERT(one.unique()); CPPUNIT_ASSERT(moves == 0); CPPUNIT_ASSERT(copies == 1); } void SharedPtrTest::testSharedPtr2() { int moves; int copies; ext::cow_shared_ptr<SharedPtrTest::Moveable2> one(new SharedPtrTest::Moveable2(moves, copies)); CPPUNIT_ASSERT(one.unique()); CPPUNIT_ASSERT(moves == 0); CPPUNIT_ASSERT(copies == 0); ext::cow_shared_ptr<SharedPtrTest::Moveable2> two(one); CPPUNIT_ASSERT(!one.unique()); CPPUNIT_ASSERT(moves == 0); CPPUNIT_ASSERT(copies == 0); std::as_const(two).get(); ext::cow_shared_ptr<SharedPtrTest::Moveable2> three(std::move ( two ) ); std::as_const(three).get(); CPPUNIT_ASSERT(!one.unique()); CPPUNIT_ASSERT(moves == 0); CPPUNIT_ASSERT(copies == 0); two = std::move ( three ) ; two.get(); CPPUNIT_ASSERT(one.unique()); CPPUNIT_ASSERT(moves == 0); CPPUNIT_ASSERT(copies == 1); } void SharedPtrTest::testSharedPtr3() { ext::cow_shared_ptr<SharedPtrTest::Base> one(new SharedPtrTest::Derived()); ext::cow_shared_ptr<SharedPtrTest::Base> two(one); CPPUNIT_ASSERT(!one.unique()); two.get(); CPPUNIT_ASSERT(one.unique()); CPPUNIT_ASSERT(two.unique()); CPPUNIT_ASSERT(one.get() != two.get()); }