@@ -53,6 +53,19 @@ struct custom_interval : public lib_interval_tree::interval<numerical_type, inte
53
53
}
54
54
};
55
55
56
+ struct minimal_custom_interval : public lib_interval_tree ::interval<int , lib_interval_tree::closed>
57
+ {
58
+ using lib_interval_tree::interval<int , lib_interval_tree::closed>::interval;
59
+
60
+ std::function<minimal_custom_interval(minimal_custom_interval const & other)> on_join;
61
+ minimal_custom_interval join (minimal_custom_interval const & other) const
62
+ {
63
+ if (on_join)
64
+ return on_join (other);
65
+ return {std::min (low_, other.low_ ), std::max (high_, other.high_ )};
66
+ }
67
+ };
68
+
56
69
TEST_F (CustomIntervalTests, CanInsertCustomIntervalJoined)
57
70
{
58
71
lib_interval_tree::interval_tree<custom_interval<int >> tree;
@@ -116,4 +129,27 @@ TEST_F(CustomIntervalTests, CustomOverlapsExclusiveIvalIsCalled)
116
129
tree.insert_overlap (ival2, true );
117
130
118
131
EXPECT_TRUE (overlaps_exclusive_ival_called);
132
+ }
133
+
134
+ TEST_F (CustomIntervalTests, CanUseMinimalCustomInterval)
135
+ {
136
+ lib_interval_tree::interval_tree<minimal_custom_interval> tree;
137
+ tree.insert ({0 , 5 });
138
+ tree.insert_overlap ({4 , 10 });
139
+ tree.erase (tree.begin ());
140
+
141
+ EXPECT_EQ (tree.size (), 0 );
142
+
143
+ tree.insert ({0 , 5 });
144
+ tree.insert ({7 , 10 });
145
+ auto iter = tree.find ({0 , 5 });
146
+ ASSERT_NE (iter, tree.end ());
147
+ EXPECT_EQ (iter->low (), 0 );
148
+ EXPECT_EQ (iter->high (), 5 );
149
+
150
+ tree.deoverlap ();
151
+ auto iter2 = tree.overlap_find ({8 , 12 });
152
+ ASSERT_NE (iter2, tree.end ());
153
+ EXPECT_EQ (iter2->low (), 7 );
154
+ EXPECT_EQ (iter2->high (), 10 );
119
155
}
0 commit comments