@@ -899,4 +899,77 @@ TEST_F(IntervalTests, CanFindDynamicIntervalUsingComparisonFunction)
899899 EXPECT_EQ (iter->high (), 5 );
900900 EXPECT_EQ (iter->left_border (), interval_border::closed);
901901 EXPECT_EQ (iter->right_border (), interval_border::closed);
902+ }
903+
904+ TEST_F (IntervalTests, ClosedSliceLeftOverlap)
905+ {
906+ // [ this ]
907+ // [ls][param]
908+ const auto result = i<closed>(1 , 8 ).slice (i<closed>(5 , 100 ));
909+ ASSERT_TRUE (result.left_slice );
910+ EXPECT_EQ (result.left_slice ->low (), 1 );
911+ EXPECT_EQ (result.left_slice ->high (), 4 );
912+ EXPECT_FALSE (result.right_slice );
913+ }
914+
915+ TEST_F (IntervalTests, OpenSliceLeftOverlap)
916+ {
917+ // [ this ]
918+ // [ls][param]
919+ using lib_interval_tree::open;
920+ const auto result = i<open>(1 , 8 ).slice (i<open>(5 , 10 ));
921+ ASSERT_TRUE (result.left_slice );
922+ EXPECT_EQ (result.left_slice ->low (), 1 );
923+ EXPECT_EQ (result.left_slice ->high (), 5 );
924+ EXPECT_FALSE (result.right_slice );
925+ }
926+
927+ TEST_F (IntervalTests, ClosedRightRemains)
928+ {
929+ // [ this ]
930+ // [param][rs]
931+ const auto result = i<closed>(8 , 15 ).slice (i<closed>(8 , 12 ));
932+ ASSERT_TRUE (result.right_slice );
933+ EXPECT_EQ (result.right_slice ->low (), 13 );
934+ EXPECT_EQ (result.right_slice ->high (), 15 );
935+ EXPECT_FALSE (result.left_slice );
936+ }
937+
938+ TEST_F (IntervalTests, OpenRightRemains)
939+ {
940+ // [ this ]
941+ // [param][rs]
942+ using lib_interval_tree::open;
943+ const auto result = i<open>(8 , 15 ).slice (i<open>(8 , 12 ));
944+ ASSERT_TRUE (result.right_slice );
945+ EXPECT_EQ (result.right_slice ->low (), 12 );
946+ EXPECT_EQ (result.right_slice ->high (), 15 );
947+ EXPECT_FALSE (result.left_slice );
948+ }
949+
950+ TEST_F (IntervalTests, ClosedMiddleExtrusion)
951+ {
952+ // [ this ]
953+ // [ls][param][rs]
954+ const auto result = i<closed>(0 , 10 ).slice (i<closed>(5 , 8 ));
955+ ASSERT_TRUE (result.left_slice );
956+ EXPECT_EQ (result.left_slice ->low (), 0 );
957+ EXPECT_EQ (result.left_slice ->high (), 4 );
958+ ASSERT_TRUE (result.right_slice );
959+ EXPECT_EQ (result.right_slice ->low (), 9 );
960+ EXPECT_EQ (result.right_slice ->high (), 10 );
961+ }
962+
963+ TEST_F (IntervalTests, OpenMiddleExtrusion)
964+ {
965+ // [ this ]
966+ // [ls][param][rs]
967+ using lib_interval_tree::open;
968+ const auto result = i<open>(0 , 10 ).slice (i<open>(5 , 8 ));
969+ ASSERT_TRUE (result.left_slice );
970+ EXPECT_EQ (result.left_slice ->low (), 0 );
971+ EXPECT_EQ (result.left_slice ->high (), 5 );
972+ ASSERT_TRUE (result.right_slice );
973+ EXPECT_EQ (result.right_slice ->low (), 8 );
974+ EXPECT_EQ (result.right_slice ->high (), 10 );
902975}
0 commit comments