aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Horn2010-03-22 20:26:57 +0000
committerMax Horn2010-03-22 20:26:57 +0000
commitdd7891cdadc5c2e4f9d1c10d229c4c0d7235f8b1 (patch)
tree6ed21ab4b9c9ec662ed11923e517ed7ffa40a6d1
parent86653687d7369a46ac25ef4a3cd513b401807c67 (diff)
downloadscummvm-rg350-dd7891cdadc5c2e4f9d1c10d229c4c0d7235f8b1.tar.gz
scummvm-rg350-dd7891cdadc5c2e4f9d1c10d229c4c0d7235f8b1.tar.bz2
scummvm-rg350-dd7891cdadc5c2e4f9d1c10d229c4c0d7235f8b1.zip
Add simple testcase for ScopedPtr and SharedPtr
The new test verifies that a given object is indeed deleted after the smart pointer leaves scope. svn-id: r48358
-rw-r--r--test/common/ptr.h27
1 files changed, 25 insertions, 2 deletions
diff --git a/test/common/ptr.h b/test/common/ptr.h
index 4bd81f8004..ebd978959a 100644
--- a/test/common/ptr.h
+++ b/test/common/ptr.h
@@ -2,9 +2,30 @@
#include "common/ptr.h"
-class PtrTestSuite : public CxxTest::TestSuite
-{
+class PtrTestSuite : public CxxTest::TestSuite {
public:
+
+ // A simple class which keeps track of all its instances
+ class InstanceCountingClass {
+ public:
+ static int count;
+ InstanceCountingClass() { count++; }
+ InstanceCountingClass(const InstanceCountingClass&) { count++; }
+ ~InstanceCountingClass() { count--; }
+ };
+
+ void test_deletion() {
+ TS_ASSERT_EQUALS(InstanceCountingClass::count, 0);
+ {
+ Common::SharedPtr<InstanceCountingClass> p1(new InstanceCountingClass());
+ TS_ASSERT_EQUALS(InstanceCountingClass::count, 1);
+
+ Common::ScopedPtr<InstanceCountingClass> p2(new InstanceCountingClass());
+ TS_ASSERT_EQUALS(InstanceCountingClass::count, 2);
+ }
+ TS_ASSERT_EQUALS(InstanceCountingClass::count, 0);
+ }
+
void test_assign() {
Common::SharedPtr<int> p1(new int(1));
TS_ASSERT(p1.unique());
@@ -81,3 +102,5 @@ class PtrTestSuite : public CxxTest::TestSuite
a = b;
}
};
+
+int PtrTestSuite::InstanceCountingClass::count = 0;