Skip to content

Commit

Permalink
Add test case for reference-pointer
Browse files Browse the repository at this point in the history
  • Loading branch information
ropez committed Feb 7, 2010
1 parent dd1c260 commit 76b4254
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 1 deletion.
1 change: 1 addition & 0 deletions src/test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ target_link_libraries(testrunner pieces ${CPPUNIT_LIBRARIES} ${OPENTHREADS_LIBRA
set(tests
TestSharedData
TestAutoPointer
TestReferencePointer
TestByteArray
TestByteArraySlicing
TestByteArrayChopping
Expand Down
80 changes: 79 additions & 1 deletion src/test/test_smart_pointers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@
#include <cppunit/extensions/HelperMacros.h>
#include <Pieces/SharedData>
#include <Pieces/AutoPointer>
#include <Pieces/ReferencePointer>
#include <Pieces/global>

using pcs::AutoPointer;
using pcs::ReferencePointer;

namespace {
class MockObject : public pcs::SharedData
Expand Down Expand Up @@ -93,14 +95,18 @@ class TestAutoPointer : public CppUnit::TestFixture
CPPUNIT_ASSERT_EQUAL(0, MockObject::count);
p = new MockObject;
CPPUNIT_ASSERT_EQUAL(1, MockObject::count);
p = new MockObject;
CPPUNIT_ASSERT_EQUAL(1, MockObject::count);
p = 0;
CPPUNIT_ASSERT_EQUAL(0, MockObject::count);
}

void testOwnerChange() {
AutoPointer<MockObject> p(new MockObject);
CPPUNIT_ASSERT_EQUAL(1, MockObject::count);
AutoPointer<MockObject> q = p;
AutoPointer<MockObject> q(new MockObject);
CPPUNIT_ASSERT_EQUAL(2, MockObject::count);
q = p;
CPPUNIT_ASSERT_EQUAL(1, MockObject::count);
CPPUNIT_ASSERT(q.isValid());
CPPUNIT_ASSERT(p.isNull());
Expand All @@ -118,3 +124,75 @@ class TestAutoPointer : public CppUnit::TestFixture
}
};
CPPUNIT_TEST_SUITE_REGISTRATION(TestAutoPointer);

class TestReferencePointer : public CppUnit::TestFixture
{
CPPUNIT_TEST_SUITE(TestReferencePointer);
CPPUNIT_TEST(testNullPointer);
CPPUNIT_TEST(testScopeCleanUp);
CPPUNIT_TEST(testManualCleanUp);
CPPUNIT_TEST(testMultipleReferences);
CPPUNIT_TEST(testSelfAssignment);
CPPUNIT_TEST_SUITE_END();

public:
void setUp() {
MockObject::count = 0;
}

void tearDown() {
CPPUNIT_ASSERT_EQUAL(0, MockObject::count);
}

void testNullPointer() {
ReferencePointer<MockObject> p;
CPPUNIT_ASSERT(p.isNull());
CPPUNIT_ASSERT(!p.isValid());
CPPUNIT_ASSERT(!p);
CPPUNIT_ASSERT(p.get() == 0);
}

void testScopeCleanUp() {
ReferencePointer<MockObject> p(new MockObject);
CPPUNIT_ASSERT_EQUAL(1, MockObject::count);
}

void testManualCleanUp() {
ReferencePointer<MockObject> p;
CPPUNIT_ASSERT_EQUAL(0, MockObject::count);
p = new MockObject;
CPPUNIT_ASSERT_EQUAL(1, MockObject::count);
p = new MockObject;
CPPUNIT_ASSERT_EQUAL(1, MockObject::count);
p = 0;
CPPUNIT_ASSERT_EQUAL(0, MockObject::count);
}

void testMultipleReferences() {
ReferencePointer<MockObject> p(new MockObject);
CPPUNIT_ASSERT_EQUAL(1, MockObject::count);
ReferencePointer<MockObject> q(new MockObject);
CPPUNIT_ASSERT_EQUAL(2, MockObject::count);
q = p;
CPPUNIT_ASSERT_EQUAL(1, MockObject::count);
CPPUNIT_ASSERT(q.isValid());
CPPUNIT_ASSERT(p.isValid());
CPPUNIT_ASSERT(p->shared());
p = q;
CPPUNIT_ASSERT_EQUAL(1, MockObject::count);
CPPUNIT_ASSERT(p.isValid());
CPPUNIT_ASSERT(q.isValid());
CPPUNIT_ASSERT(p->shared());
}

void testSelfAssignment() {
ReferencePointer<MockObject> p(new MockObject);
p = p;
CPPUNIT_ASSERT_EQUAL(1, MockObject::count);
CPPUNIT_ASSERT(p.isValid());
CPPUNIT_ASSERT(!p->shared());
}
};
CPPUNIT_TEST_SUITE_REGISTRATION(TestReferencePointer);


0 comments on commit 76b4254

Please sign in to comment.