1
1
#pragma once
2
2
3
+ #include < interval-tree/draw.hpp>
4
+ #include " interval_io.hpp"
5
+ #include " test_utility.hpp"
6
+
3
7
#include < ctime>
4
8
#include < random>
5
9
#include < cmath>
@@ -48,7 +52,7 @@ class OracleInterval : public lib_interval_tree::interval<numerical_type, interv
48
52
other.oracle_ = nullptr ;
49
53
return *this ;
50
54
}
51
- ~OracleInterval ()
55
+ ~OracleInterval ()
52
56
{
53
57
if (oracle_ != nullptr )
54
58
--oracle_->livingInstances ;
@@ -73,6 +77,23 @@ class EraseTests
73
77
public:
74
78
using interval_type = OracleInterval<int >;
75
79
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
+
76
97
protected:
77
98
Oracle oracle;
78
99
lib_interval_tree::interval_tree <OracleInterval<int >> tree;
@@ -162,3 +183,54 @@ TEST_F(EraseTests, RandomEraseTest)
162
183
testMaxProperty (tree);
163
184
testTreeHeightHealth (tree);
164
185
}
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