@@ -828,4 +828,75 @@ TEST_F(IntervalTests, DynamicJoinTest)
828828 .join (i<dynamic>(3 , 4 , interval_border::closed, interval_border::closed_adjacent)),
829829 i<dynamic>(0 , 4 , interval_border::closed, interval_border::closed_adjacent)
830830 );
831+ }
832+
833+ TEST_F (IntervalTests, CanInsertDynamicIntervalIntoTree)
834+ {
835+ interval_tree<interval<int , dynamic>> dynamic_interval_tree;
836+ auto iter = dynamic_interval_tree.insert (i<dynamic>(0 , 5 , interval_border::closed, interval_border::closed));
837+ EXPECT_EQ (iter->low (), 0 );
838+ EXPECT_EQ (iter->high (), 5 );
839+ EXPECT_EQ (iter->left_border (), interval_border::closed);
840+ EXPECT_EQ (iter->right_border (), interval_border::closed);
841+ EXPECT_EQ (dynamic_interval_tree.begin (), iter);
842+ }
843+
844+ TEST_F (IntervalTests, CanFindDynamicIntervalInTree)
845+ {
846+ interval_tree<interval<int , dynamic>> dynamic_interval_tree;
847+ dynamic_interval_tree.insert (i<dynamic>(0 , 5 , interval_border::closed, interval_border::closed));
848+ auto iter = dynamic_interval_tree.find (i<dynamic>(0 , 5 , interval_border::closed, interval_border::closed));
849+ EXPECT_EQ (iter->low (), 0 );
850+ EXPECT_EQ (iter->high (), 5 );
851+ EXPECT_EQ (iter->left_border (), interval_border::closed);
852+ EXPECT_EQ (iter->right_border (), interval_border::closed);
853+ }
854+
855+ TEST_F (IntervalTests, CanEraseDynamicIntervalFromTree)
856+ {
857+ interval_tree<interval<int , dynamic>> dynamic_interval_tree;
858+ dynamic_interval_tree.insert (i<dynamic>(0 , 5 , interval_border::closed, interval_border::closed));
859+ dynamic_interval_tree.erase (dynamic_interval_tree.begin ());
860+ EXPECT_TRUE (dynamic_interval_tree.empty ());
861+ }
862+
863+ TEST_F (IntervalTests, CanOverlapFindDynamicIntervalInTree)
864+ {
865+ interval_tree<interval<int , dynamic>> dynamic_interval_tree;
866+ dynamic_interval_tree.insert (i<dynamic>(0 , 5 , interval_border::closed, interval_border::closed));
867+ auto iter =
868+ dynamic_interval_tree.overlap_find (i<dynamic>(3 , 7 , interval_border::open, interval_border::closed_adjacent));
869+ EXPECT_EQ (iter->low (), 0 );
870+ EXPECT_EQ (iter->high (), 5 );
871+ EXPECT_EQ (iter->left_border (), interval_border::closed);
872+ EXPECT_EQ (iter->right_border (), interval_border::closed);
873+ }
874+
875+ TEST_F (IntervalTests, CanInsertOverlappingDynamicIntervalIntoTree)
876+ {
877+ interval_tree<interval<int , dynamic>> dynamic_interval_tree;
878+ dynamic_interval_tree.insert (i<dynamic>(0 , 5 , interval_border::closed, interval_border::closed));
879+ dynamic_interval_tree.insert_overlap (i<dynamic>(3 , 7 , interval_border::open, interval_border::closed_adjacent));
880+ auto iter = dynamic_interval_tree.find (i<dynamic>(0 , 7 , interval_border::closed, interval_border::closed_adjacent));
881+ EXPECT_EQ (iter->low (), 0 );
882+ EXPECT_EQ (iter->high (), 7 );
883+ EXPECT_EQ (iter->left_border (), interval_border::closed);
884+ EXPECT_EQ (iter->right_border (), interval_border::closed_adjacent);
885+ }
886+
887+ TEST_F (IntervalTests, CanFindDynamicIntervalUsingComparisonFunction)
888+ {
889+ interval_tree<interval<int , dynamic>> dynamic_interval_tree;
890+ dynamic_interval_tree.insert (i<dynamic>(0 , 5 , interval_border::closed, interval_border::closed));
891+ auto iter = dynamic_interval_tree.find (
892+ i<dynamic>(0 , 5 , interval_border::open, interval_border::open),
893+ // ignore border types:
894+ [](const auto & a, const auto & b) {
895+ return a.low () == b.low () && a.high () == b.high ();
896+ }
897+ );
898+ EXPECT_EQ (iter->low (), 0 );
899+ EXPECT_EQ (iter->high (), 5 );
900+ EXPECT_EQ (iter->left_border (), interval_border::closed);
901+ EXPECT_EQ (iter->right_border (), interval_border::closed);
831902}
0 commit comments