Skip to content

Commit e5bfe7a

Browse files
committed
Added more erase tests.
1 parent ad4a95f commit e5bfe7a

File tree

1 file changed

+73
-1
lines changed

1 file changed

+73
-1
lines changed

tests/erase_tests.hpp

Lines changed: 73 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
#pragma once
22

3+
#include <interval-tree/draw.hpp>
4+
#include "interval_io.hpp"
5+
#include "test_utility.hpp"
6+
37
#include <ctime>
48
#include <random>
59
#include <cmath>
@@ -48,7 +52,7 @@ class OracleInterval : public lib_interval_tree::interval<numerical_type, interv
4852
other.oracle_ = nullptr;
4953
return *this;
5054
}
51-
~OracleInterval()
55+
~OracleInterval()
5256
{
5357
if (oracle_ != nullptr)
5458
--oracle_->livingInstances;
@@ -73,6 +77,23 @@ class EraseTests
7377
public:
7478
using interval_type = OracleInterval<int>;
7579

80+
public:
81+
auto makeTree()
82+
{
83+
lib_interval_tree::interval_tree_t <int> regularTree;
84+
regularTree.insert({16, 21});
85+
regularTree.insert({8, 9});
86+
regularTree.insert({25, 30});
87+
regularTree.insert({5, 8});
88+
regularTree.insert({15, 23});
89+
regularTree.insert({17, 19});
90+
regularTree.insert({26, 26});
91+
regularTree.insert({0, 3});
92+
regularTree.insert({6, 10});
93+
regularTree.insert({19, 20});
94+
return regularTree;
95+
}
96+
7697
protected:
7798
Oracle oracle;
7899
lib_interval_tree::interval_tree <OracleInterval<int>> tree;
@@ -162,3 +183,54 @@ TEST_F(EraseTests, RandomEraseTest)
162183
testMaxProperty(tree);
163184
testTreeHeightHealth(tree);
164185
}
186+
187+
TEST_F(EraseTests, ReturnedIteratorPointsToNextInOrderNode)
188+
{
189+
auto regularTree = makeTree();
190+
auto iter = regularTree.erase(regularTree.find({16, 21}));
191+
EXPECT_EQ(*iter, (decltype(regularTree)::interval_type{17, 19})) << *iter;
192+
193+
regularTree = makeTree();
194+
iter = regularTree.erase(regularTree.find({8, 9}));
195+
EXPECT_EQ(*iter, (decltype(regularTree)::interval_type{15, 23})) << *iter;
196+
197+
regularTree = makeTree();
198+
iter = regularTree.erase(regularTree.find({25, 30}));
199+
EXPECT_EQ(*iter, (decltype(regularTree)::interval_type{26, 26})) << *iter;
200+
201+
regularTree = makeTree();
202+
iter = regularTree.erase(regularTree.find({5, 8}));
203+
EXPECT_EQ(*iter, (decltype(regularTree)::interval_type{6, 10})) << *iter;
204+
205+
regularTree = makeTree();
206+
iter = regularTree.erase(regularTree.find({15, 23}));
207+
EXPECT_EQ(*iter, (decltype(regularTree)::interval_type{16, 21})) << *iter;
208+
209+
regularTree = makeTree();
210+
iter = regularTree.erase(regularTree.find({17, 19}));
211+
EXPECT_EQ(*iter, (decltype(regularTree)::interval_type{19, 20})) << *iter;
212+
213+
regularTree = makeTree();
214+
iter = regularTree.erase(regularTree.find({26, 26}));
215+
EXPECT_EQ(iter, regularTree.end());
216+
217+
regularTree = makeTree();
218+
iter = regularTree.erase(regularTree.find({0, 3}));
219+
EXPECT_EQ(*iter, (decltype(regularTree)::interval_type{5, 8})) << *iter;
220+
221+
regularTree = makeTree();
222+
iter = regularTree.erase(regularTree.find({6, 10}));
223+
EXPECT_EQ(*iter, (decltype(regularTree)::interval_type{8, 9})) << *iter;
224+
225+
regularTree = makeTree();
226+
iter = regularTree.erase(regularTree.find({19, 20}));
227+
EXPECT_EQ(*iter, (decltype(regularTree)::interval_type{25, 30})) << *iter;
228+
}
229+
230+
TEST_F(EraseTests, CanEraseEntireTreeUsingReturnedIterator)
231+
{
232+
auto tree = makeTree();
233+
for (auto iter = tree.begin(); iter != tree.end();)
234+
iter = tree.erase(iter);
235+
EXPECT_EQ(tree.empty(), true);
236+
}

0 commit comments

Comments
 (0)