From ac415de8e8457471528908f73996be78613c4620 Mon Sep 17 00:00:00 2001 From: Neil Date: Wed, 5 Feb 2025 12:37:59 +1100 Subject: Simplify SelectionRange::Intersect and add SelectionRange constructor from positions without virtual space. Add unit tests. --- test/unit/testSelection.cxx | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'test') diff --git a/test/unit/testSelection.cxx b/test/unit/testSelection.cxx index 64148bf61..d708607d2 100644 --- a/test/unit/testSelection.cxx +++ b/test/unit/testSelection.cxx @@ -162,6 +162,38 @@ TEST_CASE("SelectionRange") { REQUIRE(range123Returned == range123); } + SECTION("Intersect") { + constexpr SelectionSegment segmentEmpty; + + // Range from 1 to 2 with 3 virtual spaces + const SelectionRange range123(SelectionPosition(2, 3), SelectionPosition(1)); + const SelectionSegment segment12(1, 2); + const SelectionSegment inside = range123.Intersect(segment12); + REQUIRE(inside == segment12); + + const SelectionSegment segment121(SelectionPosition(1), SelectionPosition(2, 1)); + const SelectionSegment withVirtual = range123.Intersect(segment121); + REQUIRE(withVirtual == segment121); + + const SelectionSegment segment052(SelectionPosition(0), SelectionPosition(5, 2)); + const SelectionSegment internal = range123.Intersect(segment052); // All inside + REQUIRE(internal == range123.AsSegment()); + + const SelectionSegment wayOut(SelectionPosition(100), SelectionPosition(105, 2)); + const SelectionSegment nothing = range123.Intersect(wayOut); + REQUIRE(nothing == segmentEmpty); + + const SelectionSegment edge(1, 1); + const SelectionSegment nowt = range123.Intersect(edge); + REQUIRE(nowt == edge); + + // (0, 1) and (1, 2v3) touch so intersection is a single position. + const SelectionSegment front(0, 1); + const SelectionSegment single(1, 1); + const SelectionSegment thin = range123.Intersect(front); + REQUIRE(thin == single); + } + } TEST_CASE("Selection") { -- cgit v1.2.3