diff --git a/src/test/CMakeLists.txt b/src/test/CMakeLists.txt index 93bd931..59a247c 100644 --- a/src/test/CMakeLists.txt +++ b/src/test/CMakeLists.txt @@ -13,6 +13,7 @@ add_executable(testrunner ${test_SOURCES}) target_link_libraries(testrunner pieces ${CPPUNIT_LIBRARIES} ${OPENTHREADS_LIBRARIES}) set(tests + TestSharedData TestAutoPointer TestByteArray TestByteArraySlicing diff --git a/src/test/test_smart_pointers.cpp b/src/test/test_smart_pointers.cpp index a4bcfd5..f0dc6f4 100644 --- a/src/test/test_smart_pointers.cpp +++ b/src/test/test_smart_pointers.cpp @@ -1,12 +1,13 @@ #include #include +#include #include #include using pcs::AutoPointer; namespace { -class MockObject +class MockObject : public pcs::SharedData { public: static int count; @@ -25,6 +26,36 @@ class MockObject int MockObject::count = 0; } +class TestSharedData : public CppUnit::TestFixture +{ + CPPUNIT_TEST_SUITE(TestSharedData); + CPPUNIT_TEST(testReferenceCount); + CPPUNIT_TEST_SUITE_END(); + +public: + void testReferenceCount() { + MockObject o; + o.ref(); + CPPUNIT_ASSERT(!o.shared()); + o.ref(); + CPPUNIT_ASSERT(o.shared()); + o.ref(); + CPPUNIT_ASSERT(o.shared()); + + bool v; + v = o.deref(); + CPPUNIT_ASSERT(o.shared()); + CPPUNIT_ASSERT(v); + v = o.deref(); + CPPUNIT_ASSERT(!o.shared()); + CPPUNIT_ASSERT(v); + v = o.deref(); + CPPUNIT_ASSERT(!o.shared()); + CPPUNIT_ASSERT(!v); + } +}; +CPPUNIT_TEST_SUITE_REGISTRATION(TestSharedData); + class TestAutoPointer : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(TestAutoPointer);