diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/core/ManagedTest.cpp | 49 | 
1 files changed, 49 insertions, 0 deletions
diff --git a/test/core/ManagedTest.cpp b/test/core/ManagedTest.cpp index 3085a74..1aada5a 100644 --- a/test/core/ManagedTest.cpp +++ b/test/core/ManagedTest.cpp @@ -542,5 +542,54 @@ TEST(Manager, hiddenRootedGraph)  	}  } +TEST(ManagedVector, managedVector) +{ +	// TODO: This test is highly incomplete + +	constexpr int nElem = 16; +	std::array<bool, nElem> a; + +	Manager mgr(1); +	{ +		Rooted<Managed> root{new Managed{mgr}}; + +		std::vector<TestManaged*> elems; +		for (int i = 0; i < nElem; i++) { +			elems.push_back(new TestManaged{mgr, a[i]}); +		} + +		for (bool v : a) { +			ASSERT_TRUE(v); +		} + +		ManagedVector<TestManaged> v(root, elems); + +		// Remove the last element from the list. It should be garbage collected. +		v.pop_back(); +		ASSERT_FALSE(a[nElem - 1]); + +		// Insert a new element into the list. +		v.push_back(new TestManaged{mgr, a[nElem - 1]}); +		ASSERT_TRUE(a[nElem - 1]); + +		// Erase element 10 +		{ +			auto it = v.find(elems[10]); +			ASSERT_TRUE(it != v.end()); +			v.erase(it); +			ASSERT_FALSE(a[10]); +		} + +		// Erase element 3 - 5 +		v.erase(v.find(elems[3]), v.find(elems[5])); +		ASSERT_FALSE(a[3] || a[4]); +		ASSERT_TRUE(a[5]); +	} + +	for (bool v : a) { +		ASSERT_FALSE(v); +	} +} +  }  | 
