Skip to content
Snippets Groups Projects
SharedPtrTest.cpp 1.46 KiB
Newer Older
#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();

	CPPUNIT_ASSERT(!one.unique());
	CPPUNIT_ASSERT(moves == 0);
	CPPUNIT_ASSERT(copies == 0);

	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();

	CPPUNIT_ASSERT(!one.unique());
	CPPUNIT_ASSERT(moves == 0);
	CPPUNIT_ASSERT(copies == 0);

	two.get();

	CPPUNIT_ASSERT(one.unique());
	CPPUNIT_ASSERT(moves == 0);
	CPPUNIT_ASSERT(copies == 1);

}