From 6fa81636f088654f154534fd939421a5b25d9c5c Mon Sep 17 00:00:00 2001 From: Andreas Stöckel Date: Wed, 17 Dec 2014 17:34:25 +0100 Subject: added unit test which explicitly tests for the correct delete order --- test/core/managed/ManagerTest.cpp | 55 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) (limited to 'test') 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 &ids; + std::vector> refs; + +public: + TestDeleteOrderManaged(Manager &mgr, int id, std::vector &ids) + : Managed(mgr), id(id), ids(ids) + { + } + + ~TestDeleteOrderManaged() override + { + ids.push_back(id); + } + + void addRef(Handle h) { refs.push_back(acquire(h)); } +}; + +TEST(Manager, deleteOrder) +{ + std::vector ids; + Manager mgr(1); + + { + Rooted root{ + new TestDeleteOrderManaged{mgr, 0, ids}}; + Rooted m1{ + new TestDeleteOrderManaged{mgr, 1, ids}}; + Rooted m2{ + new TestDeleteOrderManaged{mgr, 2, ids}}; + Rooted m3{ + new TestDeleteOrderManaged{mgr, 3, ids}}; + Rooted m4{ + new TestDeleteOrderManaged{mgr, 4, ids}}; + Rooted m5{ + new TestDeleteOrderManaged{mgr, 5, ids}}; + Rooted m6{ + new TestDeleteOrderManaged{mgr, 6, ids}}; + Rooted 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 expected{0, 7, 2, 5, 1, 3, 6, 4}; + ASSERT_EQ(expected, ids); +} } -- cgit v1.2.3