diff options
author | Andreas Stöckel <astoecke@techfak.uni-bielefeld.de> | 2014-12-17 17:34:25 +0100 |
---|---|---|
committer | Andreas Stöckel <andreas@somweyr.de> | 2014-12-17 17:34:25 +0100 |
commit | 6fa81636f088654f154534fd939421a5b25d9c5c (patch) | |
tree | e1fd544279a7ce310599caf08671d55bb4ca2f0f /test | |
parent | f1d768733c8b9166bbfb6943567b01b9d6fbcb15 (diff) |
added unit test which explicitly tests for the correct delete order
Diffstat (limited to 'test')
-rw-r--r-- | test/core/managed/ManagerTest.cpp | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/test/core/managed/ManagerTest.cpp b/test/core/managed/ManagerTest.cpp index f597af7..3272457 100644 --- a/test/core/managed/ManagerTest.cpp +++ b/test/core/managed/ManagerTest.cpp @@ -589,5 +589,60 @@ TEST(Manager, storeData) ASSERT_FALSE(a[0] || a[1] || a[2] || a[3] || a[4]); } +class TestDeleteOrderManaged : public Managed { +private: + const int id; + std::vector<int> &ids; + std::vector<Owned<Managed>> refs; + +public: + TestDeleteOrderManaged(Manager &mgr, int id, std::vector<int> &ids) + : Managed(mgr), id(id), ids(ids) + { + } + + ~TestDeleteOrderManaged() override + { + ids.push_back(id); + } + + void addRef(Handle<Managed> h) { refs.push_back(acquire(h)); } +}; + +TEST(Manager, deleteOrder) +{ + std::vector<int> ids; + Manager mgr(1); + + { + Rooted<TestDeleteOrderManaged> root{ + new TestDeleteOrderManaged{mgr, 0, ids}}; + Rooted<TestDeleteOrderManaged> m1{ + new TestDeleteOrderManaged{mgr, 1, ids}}; + Rooted<TestDeleteOrderManaged> m2{ + new TestDeleteOrderManaged{mgr, 2, ids}}; + Rooted<TestDeleteOrderManaged> m3{ + new TestDeleteOrderManaged{mgr, 3, ids}}; + Rooted<TestDeleteOrderManaged> m4{ + new TestDeleteOrderManaged{mgr, 4, ids}}; + Rooted<TestDeleteOrderManaged> m5{ + new TestDeleteOrderManaged{mgr, 5, ids}}; + Rooted<TestDeleteOrderManaged> m6{ + new TestDeleteOrderManaged{mgr, 6, ids}}; + Rooted<TestDeleteOrderManaged> m7{ + new TestDeleteOrderManaged{mgr, 7, ids}}; + + root->addRef(m7); + m7->addRef(m2); + m2->addRef(m5); + m5->addRef(m1); + m1->addRef(m3); + m3->addRef(m6); + m6->addRef(m4); + } + + std::vector<int> expected{0, 7, 2, 5, 1, 3, 6, 4}; + ASSERT_EQ(expected, ids); +} } |