Skip to content
Snippets Groups Projects
SharedPtrTest.cpp 2.04 KiB
Newer Older
  • Learn to ignore specific revisions
  • #include "SharedPtrTest.h"
    #include <memory>
    
    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;
    
    	std::cow_shared_ptr<SharedPtrTest::Moveable> one(new SharedPtrTest::Moveable(moves, copies));
    
    	CPPUNIT_ASSERT(one.unique());
    	CPPUNIT_ASSERT(moves == 0);
    	CPPUNIT_ASSERT(copies == 0);
    
    	std::cow_shared_ptr<SharedPtrTest::Moveable> two(one);
    
    	CPPUNIT_ASSERT(!one.unique());
    	CPPUNIT_ASSERT(moves == 0);
    	CPPUNIT_ASSERT(copies == 0);
    
    	std::make_const(two).get();
    
    
    	std::cow_shared_ptr<SharedPtrTest::Moveable> three(std::move ( two ) );
    
    	std::make_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;
    
    	std::cow_shared_ptr<SharedPtrTest::Moveable2> one(new SharedPtrTest::Moveable2(moves, copies));
    
    	CPPUNIT_ASSERT(one.unique());
    	CPPUNIT_ASSERT(moves == 0);
    	CPPUNIT_ASSERT(copies == 0);
    
    	std::cow_shared_ptr<SharedPtrTest::Moveable2> two(one);
    
    	CPPUNIT_ASSERT(!one.unique());
    	CPPUNIT_ASSERT(moves == 0);
    	CPPUNIT_ASSERT(copies == 0);
    
    	std::make_const(two).get();
    
    
    	std::cow_shared_ptr<SharedPtrTest::Moveable2> three(std::move ( two ) );
    
    	std::make_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() {
    	std::cow_shared_ptr<SharedPtrTest::Base> one(new SharedPtrTest::Derived());
    	std::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());
    }