| //===---- ADT/IntervalTreeTest.cpp - IntervalTree unit tests --------------===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "llvm/ADT/IntervalTree.h" |
| #include "gtest/gtest.h" |
| |
| // The test cases for the IntervalTree implementation, follow the below steps: |
| // a) Insert a series of intervals with their associated mapped value. |
| // b) Create the interval tree. |
| // c) Query for specific interval point, covering points inside and outside |
| // of any given intervals. |
| // d) Traversal for specific interval point, using the iterators. |
| // |
| // When querying for a set of intervals containing a given value, the query is |
| // done three times, by calling: |
| // 1) Intervals = getContaining(...). |
| // 2) Intervals = getContaining(...). |
| // sortIntervals(Intervals, Sorting=Ascending). |
| // 3) Intervals = getContaining(...). |
| // sortIntervals(Intervals, Sorting=Ascending). |
| // |
| // The returned intervals are: |
| // 1) In their location order within the tree. |
| // 2) Smaller intervals first. |
| // 3) Bigger intervals first. |
| |
| using namespace llvm; |
| |
| namespace { |
| |
| // Helper function to test a specific item or iterator. |
| template <typename TPoint, typename TItem, typename TValue> |
| void checkItem(TPoint Point, TItem Item, TPoint Left, TPoint Right, |
| TValue Value) { |
| EXPECT_TRUE(Item->contains(Point)); |
| EXPECT_EQ(Item->left(), Left); |
| EXPECT_EQ(Item->right(), Right); |
| EXPECT_EQ(Item->value(), Value); |
| } |
| |
| // User class tree tests. |
| TEST(IntervalTreeTest, UserClass) { |
| using UUPoint = unsigned; |
| using UUValue = double; |
| class MyData : public IntervalData<UUPoint, UUValue> { |
| using UUData = IntervalData<UUPoint, UUValue>; |
| |
| public: |
| // Inherit Base's constructors. |
| using UUData::UUData; |
| PointType left() const { return UUData::left(); } |
| PointType right() const { return UUData::right(); } |
| ValueType value() const { return UUData::value(); } |
| |
| bool left(const PointType &Point) const { return UUData::left(Point); } |
| bool right(const PointType &Point) const { return UUData::right(Point); } |
| bool contains(const PointType &Point) const { |
| return UUData::contains(Point); |
| } |
| }; |
| |
| using UUTree = IntervalTree<UUPoint, UUValue, MyData>; |
| using UUReferences = UUTree::IntervalReferences; |
| using UUData = UUTree::DataType; |
| using UUAlloc = UUTree::Allocator; |
| |
| auto CheckData = [](UUPoint Point, const UUData *Data, UUPoint Left, |
| UUPoint Right, UUValue Value) { |
| checkItem<UUPoint, const UUData *, UUValue>(Point, Data, Left, Right, |
| Value); |
| }; |
| |
| UUAlloc Allocator; |
| UUTree Tree(Allocator); |
| UUReferences Intervals; |
| UUPoint Point; |
| |
| EXPECT_TRUE(Tree.empty()); |
| Tree.clear(); |
| EXPECT_TRUE(Tree.empty()); |
| |
| // [10, 20] <- (10.20) |
| // [30, 40] <- (30.40) |
| // |
| // [10...20] [30...40] |
| Tree.insert(10, 20, 10.20); |
| Tree.insert(30, 40, 30.40); |
| Tree.create(); |
| |
| // Invalid interval values: x < [10 |
| Point = 5; |
| Intervals = Tree.getContaining(Point); |
| EXPECT_TRUE(Intervals.empty()); |
| |
| // Valid interval values: [10...20] |
| Point = 10; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 1u); |
| CheckData(Point, Intervals[0], 10, 20, 10.20); |
| |
| Point = 15; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 1u); |
| CheckData(Point, Intervals[0], 10, 20, 10.20); |
| |
| Point = 20; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 1u); |
| CheckData(Point, Intervals[0], 10, 20, 10.20); |
| |
| // Invalid interval values: 20] < x < [30 |
| Point = 25; |
| Intervals = Tree.getContaining(Point); |
| EXPECT_TRUE(Intervals.empty()); |
| |
| // Valid interval values: [30...40] |
| Point = 30; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 1u); |
| CheckData(Point, Intervals[0], 30, 40, 30.40); |
| |
| Point = 35; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 1u); |
| CheckData(Point, Intervals[0], 30, 40, 30.40); |
| |
| Point = 40; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 1u); |
| CheckData(Point, Intervals[0], 30, 40, 30.40); |
| |
| // Invalid interval values: 40] < x |
| Point = 45; |
| Intervals = Tree.getContaining(Point); |
| EXPECT_TRUE(Intervals.empty()); |
| } |
| |
| using UUPoint = unsigned; // Interval endpoint type. |
| using UUValue = unsigned; // Mapped value type. |
| |
| using UUTree = IntervalTree<UUPoint, UUValue>; |
| using UUReferences = UUTree::IntervalReferences; |
| using UUData = UUTree::DataType; |
| using UUSorting = UUTree::Sorting; |
| using UUPoint = UUTree::PointType; |
| using UUValue = UUTree::ValueType; |
| using UUIter = UUTree::find_iterator; |
| using UUAlloc = UUTree::Allocator; |
| |
| void checkData(UUPoint Point, const UUData *Data, UUPoint Left, UUPoint Right, |
| UUValue Value) { |
| checkItem<UUPoint, const UUData *, UUValue>(Point, Data, Left, Right, Value); |
| } |
| |
| void checkData(UUPoint Point, UUIter Iter, UUPoint Left, UUPoint Right, |
| UUValue Value) { |
| checkItem<UUPoint, UUIter, UUValue>(Point, Iter, Left, Right, Value); |
| } |
| |
| // Empty tree tests. |
| TEST(IntervalTreeTest, NoIntervals) { |
| UUAlloc Allocator; |
| UUTree Tree(Allocator); |
| EXPECT_TRUE(Tree.empty()); |
| Tree.clear(); |
| EXPECT_TRUE(Tree.empty()); |
| |
| // Create the tree and switch to query mode. |
| Tree.create(); |
| EXPECT_TRUE(Tree.empty()); |
| EXPECT_EQ(Tree.find(1), Tree.find_end()); |
| } |
| |
| // One item tree tests. |
| TEST(IntervalTreeTest, OneInterval) { |
| UUAlloc Allocator; |
| UUTree Tree(Allocator); |
| UUReferences Intervals; |
| UUPoint Point; |
| |
| // [10, 20] <- (1020) |
| // |
| // [10...20] |
| Tree.insert(10, 20, 1020); |
| |
| EXPECT_TRUE(Tree.empty()); |
| Tree.create(); |
| EXPECT_FALSE(Tree.empty()); |
| |
| // Invalid interval values: x < [10. |
| Point = 5; |
| Intervals = Tree.getContaining(Point); |
| EXPECT_TRUE(Intervals.empty()); |
| |
| // Valid interval values: [10...20]. |
| Point = 10; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 1u); |
| checkData(Point, Intervals[0], 10, 20, 1020); |
| |
| Point = 15; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 1u); |
| checkData(Point, Intervals[0], 10, 20, 1020); |
| |
| Point = 20; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 1u); |
| checkData(Point, Intervals[0], 10, 20, 1020); |
| |
| // Invalid interval values: 20] < x |
| Point = 25; |
| Intervals = Tree.getContaining(Point); |
| EXPECT_TRUE(Intervals.empty()); |
| } |
| |
| // Two items tree tests. No overlapping. |
| TEST(IntervalTreeTest, TwoIntervals) { |
| UUAlloc Allocator; |
| UUTree Tree(Allocator); |
| UUReferences Intervals; |
| UUPoint Point; |
| |
| // [10, 20] <- (1020) |
| // [30, 40] <- (3040) |
| // |
| // [10...20] [30...40] |
| Tree.insert(10, 20, 1020); |
| Tree.insert(30, 40, 3040); |
| Tree.create(); |
| |
| // Invalid interval values: x < [10 |
| Point = 5; |
| Intervals = Tree.getContaining(Point); |
| EXPECT_TRUE(Intervals.empty()); |
| |
| // Valid interval values: [10...20] |
| Point = 10; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 1u); |
| checkData(Point, Intervals[0], 10, 20, 1020); |
| |
| Point = 15; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 1u); |
| checkData(Point, Intervals[0], 10, 20, 1020); |
| |
| Point = 20; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 1u); |
| checkData(Point, Intervals[0], 10, 20, 1020); |
| |
| // Invalid interval values: 20] < x < [30 |
| Point = 25; |
| Intervals = Tree.getContaining(Point); |
| EXPECT_TRUE(Intervals.empty()); |
| |
| // Valid interval values: [30...40] |
| Point = 30; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 1u); |
| checkData(Point, Intervals[0], 30, 40, 3040); |
| |
| Point = 35; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 1u); |
| checkData(Point, Intervals[0], 30, 40, 3040); |
| |
| Point = 40; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 1u); |
| checkData(Point, Intervals[0], 30, 40, 3040); |
| |
| // Invalid interval values: 40] < x |
| Point = 45; |
| Intervals = Tree.getContaining(Point); |
| EXPECT_TRUE(Intervals.empty()); |
| } |
| |
| // Three items tree tests. No overlapping. |
| TEST(IntervalTreeTest, ThreeIntervals) { |
| UUAlloc Allocator; |
| UUTree Tree(Allocator); |
| UUReferences Intervals; |
| UUPoint Point; |
| |
| // [10, 20] <- (1020) |
| // [30, 40] <- (3040) |
| // [50, 60] <- (5060) |
| // |
| // [10...20] [30...40] [50...60] |
| Tree.insert(10, 20, 1020); |
| Tree.insert(30, 40, 3040); |
| Tree.insert(50, 60, 5060); |
| Tree.create(); |
| |
| // Invalid interval values: x < [10 |
| Point = 5; |
| Intervals = Tree.getContaining(Point); |
| EXPECT_TRUE(Intervals.empty()); |
| |
| // Valid interval values: [10...20] |
| Point = 10; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 1u); |
| checkData(Point, Intervals[0], 10, 20, 1020); |
| |
| Point = 15; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 1u); |
| checkData(Point, Intervals[0], 10, 20, 1020); |
| |
| Point = 20; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 1u); |
| checkData(Point, Intervals[0], 10, 20, 1020); |
| |
| // Invalid interval values: 20] < x < [30 |
| Point = 25; |
| Intervals = Tree.getContaining(Point); |
| EXPECT_TRUE(Intervals.empty()); |
| |
| // Valid interval values: [30...40] |
| Point = 30; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 1u); |
| checkData(Point, Intervals[0], 30, 40, 3040); |
| |
| Point = 35; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 1u); |
| checkData(Point, Intervals[0], 30, 40, 3040); |
| |
| Point = 40; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 1u); |
| checkData(Point, Intervals[0], 30, 40, 3040); |
| |
| // Invalid interval values: 40] < x < [50 |
| Point = 45; |
| Intervals = Tree.getContaining(Point); |
| EXPECT_TRUE(Intervals.empty()); |
| |
| // Valid interval values: [50...60] |
| Point = 50; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 1u); |
| checkData(Point, Intervals[0], 50, 60, 5060); |
| |
| Point = 55; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 1u); |
| checkData(Point, Intervals[0], 50, 60, 5060); |
| |
| Point = 60; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 1u); |
| checkData(Point, Intervals[0], 50, 60, 5060); |
| |
| // Invalid interval values: 60] < x |
| Point = 65; |
| Intervals = Tree.getContaining(Point); |
| EXPECT_TRUE(Intervals.empty()); |
| } |
| |
| // One item tree tests. |
| TEST(IntervalTreeTest, EmptyIntervals) { |
| UUAlloc Allocator; |
| UUTree Tree(Allocator); |
| UUReferences Intervals; |
| UUPoint Point; |
| |
| // [40, 60] <- (4060) |
| // [50, 50] <- (5050) |
| // [10, 10] <- (1010) |
| // [70, 70] <- (7070) |
| // |
| // [40...............60] |
| // [50...50] |
| // [10...10] |
| // [70...70] |
| Tree.insert(40, 60, 4060); |
| Tree.insert(50, 50, 5050); |
| Tree.insert(10, 10, 1010); |
| Tree.insert(70, 70, 7070); |
| |
| EXPECT_TRUE(Tree.empty()); |
| Tree.create(); |
| EXPECT_FALSE(Tree.empty()); |
| |
| // Invalid interval values: x < [10. |
| Point = 5; |
| Intervals = Tree.getContaining(Point); |
| EXPECT_TRUE(Intervals.empty()); |
| |
| // Valid interval values: [10...10]. |
| Point = 10; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 1u); |
| checkData(Point, Intervals[0], 10, 10, 1010); |
| |
| // Invalid interval values: 10] < x |
| Point = 15; |
| Intervals = Tree.getContaining(Point); |
| EXPECT_TRUE(Intervals.empty()); |
| |
| // Invalid interval values: x < [50. |
| Point = 45; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 1u); |
| checkData(Point, Intervals[0], 40, 60, 4060); |
| |
| // Valid interval values: [50...50]. |
| Point = 50; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 2u); |
| checkData(Point, Intervals[0], 40, 60, 4060); |
| checkData(Point, Intervals[1], 50, 50, 5050); |
| |
| // Invalid interval values: 50] < x |
| Point = 55; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 1u); |
| checkData(Point, Intervals[0], 40, 60, 4060); |
| |
| // Invalid interval values: x < [70. |
| Point = 65; |
| Intervals = Tree.getContaining(Point); |
| EXPECT_TRUE(Intervals.empty()); |
| |
| // Valid interval values: [70...70]. |
| Point = 70; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 1u); |
| checkData(Point, Intervals[0], 70, 70, 7070); |
| |
| // Invalid interval values: 70] < x |
| Point = 75; |
| Intervals = Tree.getContaining(Point); |
| EXPECT_TRUE(Intervals.empty()); |
| } |
| |
| // Simple overlapping tests. |
| TEST(IntervalTreeTest, SimpleIntervalsOverlapping) { |
| UUAlloc Allocator; |
| UUTree Tree(Allocator); |
| UUReferences Intervals; |
| UUPoint Point; |
| |
| // [40, 60] <- (4060) |
| // [30, 70] <- (3070) |
| // [20, 80] <- (2080) |
| // [10, 90] <- (1090) |
| // |
| // [40...60] |
| // [30...............70] |
| // [20...........................80] |
| // [10.......................................90] |
| Tree.insert(40, 60, 4060); |
| Tree.insert(30, 70, 3070); |
| Tree.insert(20, 80, 2080); |
| Tree.insert(10, 90, 1090); |
| Tree.create(); |
| |
| // Invalid interval values: x < [10 |
| Point = 5; |
| Intervals = Tree.getContaining(Point); |
| EXPECT_TRUE(Intervals.empty()); |
| |
| // Valid interval values: |
| Point = 10; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 1u); |
| checkData(Point, Intervals[0], 10, 90, 1090); |
| |
| Point = 15; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 1u); |
| checkData(Point, Intervals[0], 10, 90, 1090); |
| |
| Point = 20; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 2u); |
| checkData(Point, Intervals[0], 10, 90, 1090); |
| checkData(Point, Intervals[1], 20, 80, 2080); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 2u); |
| checkData(Point, Intervals[0], 20, 80, 2080); |
| checkData(Point, Intervals[1], 10, 90, 1090); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 2u); |
| checkData(Point, Intervals[0], 10, 90, 1090); |
| checkData(Point, Intervals[1], 20, 80, 2080); |
| |
| Point = 25; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 2u); |
| checkData(Point, Intervals[0], 10, 90, 1090); |
| checkData(Point, Intervals[1], 20, 80, 2080); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 2u); |
| checkData(Point, Intervals[0], 20, 80, 2080); |
| checkData(Point, Intervals[1], 10, 90, 1090); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 2u); |
| checkData(Point, Intervals[0], 10, 90, 1090); |
| checkData(Point, Intervals[1], 20, 80, 2080); |
| |
| Point = 30; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 3u); |
| checkData(Point, Intervals[0], 10, 90, 1090); |
| checkData(Point, Intervals[1], 20, 80, 2080); |
| checkData(Point, Intervals[2], 30, 70, 3070); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 3u); |
| checkData(Point, Intervals[0], 30, 70, 3070); |
| checkData(Point, Intervals[1], 20, 80, 2080); |
| checkData(Point, Intervals[2], 10, 90, 1090); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 3u); |
| checkData(Point, Intervals[0], 10, 90, 1090); |
| checkData(Point, Intervals[1], 20, 80, 2080); |
| checkData(Point, Intervals[2], 30, 70, 3070); |
| |
| Point = 35; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 3u); |
| checkData(Point, Intervals[0], 10, 90, 1090); |
| checkData(Point, Intervals[1], 20, 80, 2080); |
| checkData(Point, Intervals[2], 30, 70, 3070); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 3u); |
| checkData(Point, Intervals[0], 30, 70, 3070); |
| checkData(Point, Intervals[1], 20, 80, 2080); |
| checkData(Point, Intervals[2], 10, 90, 1090); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 3u); |
| checkData(Point, Intervals[0], 10, 90, 1090); |
| checkData(Point, Intervals[1], 20, 80, 2080); |
| checkData(Point, Intervals[2], 30, 70, 3070); |
| |
| Point = 40; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 4u); |
| checkData(Point, Intervals[0], 10, 90, 1090); |
| checkData(Point, Intervals[1], 20, 80, 2080); |
| checkData(Point, Intervals[2], 30, 70, 3070); |
| checkData(Point, Intervals[3], 40, 60, 4060); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 4u); |
| checkData(Point, Intervals[0], 40, 60, 4060); |
| checkData(Point, Intervals[1], 30, 70, 3070); |
| checkData(Point, Intervals[2], 20, 80, 2080); |
| checkData(Point, Intervals[3], 10, 90, 1090); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 4u); |
| checkData(Point, Intervals[0], 10, 90, 1090); |
| checkData(Point, Intervals[1], 20, 80, 2080); |
| checkData(Point, Intervals[2], 30, 70, 3070); |
| checkData(Point, Intervals[3], 40, 60, 4060); |
| |
| Point = 50; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 4u); |
| checkData(Point, Intervals[0], 10, 90, 1090); |
| checkData(Point, Intervals[1], 20, 80, 2080); |
| checkData(Point, Intervals[2], 30, 70, 3070); |
| checkData(Point, Intervals[3], 40, 60, 4060); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 4u); |
| checkData(Point, Intervals[0], 40, 60, 4060); |
| checkData(Point, Intervals[1], 30, 70, 3070); |
| checkData(Point, Intervals[2], 20, 80, 2080); |
| checkData(Point, Intervals[3], 10, 90, 1090); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 4u); |
| checkData(Point, Intervals[0], 10, 90, 1090); |
| checkData(Point, Intervals[1], 20, 80, 2080); |
| checkData(Point, Intervals[2], 30, 70, 3070); |
| checkData(Point, Intervals[3], 40, 60, 4060); |
| |
| Point = 60; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 4u); |
| checkData(Point, Intervals[0], 10, 90, 1090); |
| checkData(Point, Intervals[1], 20, 80, 2080); |
| checkData(Point, Intervals[2], 30, 70, 3070); |
| checkData(Point, Intervals[3], 40, 60, 4060); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 4u); |
| checkData(Point, Intervals[0], 40, 60, 4060); |
| checkData(Point, Intervals[1], 30, 70, 3070); |
| checkData(Point, Intervals[2], 20, 80, 2080); |
| checkData(Point, Intervals[3], 10, 90, 1090); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 4u); |
| checkData(Point, Intervals[0], 10, 90, 1090); |
| checkData(Point, Intervals[1], 20, 80, 2080); |
| checkData(Point, Intervals[2], 30, 70, 3070); |
| checkData(Point, Intervals[3], 40, 60, 4060); |
| |
| Point = 65; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 3u); |
| checkData(Point, Intervals[0], 10, 90, 1090); |
| checkData(Point, Intervals[1], 20, 80, 2080); |
| checkData(Point, Intervals[2], 30, 70, 3070); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 3u); |
| checkData(Point, Intervals[0], 30, 70, 3070); |
| checkData(Point, Intervals[1], 20, 80, 2080); |
| checkData(Point, Intervals[2], 10, 90, 1090); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 3u); |
| checkData(Point, Intervals[0], 10, 90, 1090); |
| checkData(Point, Intervals[1], 20, 80, 2080); |
| checkData(Point, Intervals[2], 30, 70, 3070); |
| |
| Point = 70; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 3u); |
| checkData(Point, Intervals[0], 10, 90, 1090); |
| checkData(Point, Intervals[1], 20, 80, 2080); |
| checkData(Point, Intervals[2], 30, 70, 3070); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 3u); |
| checkData(Point, Intervals[0], 30, 70, 3070); |
| checkData(Point, Intervals[1], 20, 80, 2080); |
| checkData(Point, Intervals[2], 10, 90, 1090); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 3u); |
| checkData(Point, Intervals[0], 10, 90, 1090); |
| checkData(Point, Intervals[1], 20, 80, 2080); |
| checkData(Point, Intervals[2], 30, 70, 3070); |
| |
| Point = 75; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 2u); |
| checkData(Point, Intervals[0], 10, 90, 1090); |
| checkData(Point, Intervals[1], 20, 80, 2080); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 2u); |
| checkData(Point, Intervals[0], 20, 80, 2080); |
| checkData(Point, Intervals[1], 10, 90, 1090); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 2u); |
| checkData(Point, Intervals[0], 10, 90, 1090); |
| checkData(Point, Intervals[1], 20, 80, 2080); |
| |
| Point = 80; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 2u); |
| checkData(Point, Intervals[0], 10, 90, 1090); |
| checkData(Point, Intervals[1], 20, 80, 2080); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 2u); |
| checkData(Point, Intervals[0], 20, 80, 2080); |
| checkData(Point, Intervals[1], 10, 90, 1090); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 2u); |
| checkData(Point, Intervals[0], 10, 90, 1090); |
| checkData(Point, Intervals[1], 20, 80, 2080); |
| |
| Point = 85; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 1u); |
| checkData(Point, Intervals[0], 10, 90, 1090); |
| |
| Point = 90; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 1u); |
| checkData(Point, Intervals[0], 10, 90, 1090); |
| |
| // Invalid interval values: 90] < x |
| Point = 95; |
| Intervals = Tree.getContaining(Point); |
| EXPECT_TRUE(Intervals.empty()); |
| } |
| |
| // Complex Overlapping. |
| TEST(IntervalTreeTest, ComplexIntervalsOverlapping) { |
| UUAlloc Allocator; |
| UUTree Tree(Allocator); |
| UUReferences Intervals; |
| UUPoint Point; |
| |
| // [30, 35] <- (3035) |
| // [39, 50] <- (3950) |
| // [55, 61] <- (5561) |
| // [31, 56] <- (3156) |
| // [12, 21] <- (1221) |
| // [25, 41] <- (2541) |
| // [49, 65] <- (4965) |
| // [71, 79] <- (7179) |
| // [11, 16] <- (1116) |
| // [20, 30] <- (2030) |
| // [36, 54] <- (3654) |
| // [60, 70] <- (6070) |
| // [74, 80] <- (7480) |
| // [15, 40] <- (1540) |
| // [43, 45] <- (4345) |
| // [50, 75] <- (5075) |
| // [10, 85] <- (1085) |
| |
| // 30--35 39------------50 55----61 |
| // 31------------------------56 |
| // 12--------21 25------------41 49-------------65 71-----79 |
| // 11----16 20-----30 36----------------54 60------70 74---- 80 |
| // 15---------------------40 43--45 50--------------------75 |
| // 10----------------------------------------------------------------------85 |
| |
| Tree.insert(30, 35, 3035); |
| Tree.insert(39, 50, 3950); |
| Tree.insert(55, 61, 5561); |
| Tree.insert(31, 56, 3156); |
| Tree.insert(12, 21, 1221); |
| Tree.insert(25, 41, 2541); |
| Tree.insert(49, 65, 4965); |
| Tree.insert(71, 79, 7179); |
| Tree.insert(11, 16, 1116); |
| Tree.insert(20, 30, 2030); |
| Tree.insert(36, 54, 3654); |
| Tree.insert(60, 70, 6070); |
| Tree.insert(74, 80, 7480); |
| Tree.insert(15, 40, 1540); |
| Tree.insert(43, 45, 4345); |
| Tree.insert(50, 75, 5075); |
| Tree.insert(10, 85, 1085); |
| Tree.create(); |
| |
| // Find valid interval values. |
| Point = 30; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 25, 41, 2541); |
| checkData(Point, Intervals[2], 15, 40, 1540); |
| checkData(Point, Intervals[3], 20, 30, 2030); |
| checkData(Point, Intervals[4], 30, 35, 3035); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 30, 35, 3035); |
| checkData(Point, Intervals[1], 20, 30, 2030); |
| checkData(Point, Intervals[2], 25, 41, 2541); |
| checkData(Point, Intervals[3], 15, 40, 1540); |
| checkData(Point, Intervals[4], 10, 85, 1085); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 15, 40, 1540); |
| checkData(Point, Intervals[2], 25, 41, 2541); |
| checkData(Point, Intervals[3], 20, 30, 2030); |
| checkData(Point, Intervals[4], 30, 35, 3035); |
| |
| Point = 35; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 31, 56, 3156); |
| checkData(Point, Intervals[2], 25, 41, 2541); |
| checkData(Point, Intervals[3], 15, 40, 1540); |
| checkData(Point, Intervals[4], 30, 35, 3035); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 30, 35, 3035); |
| checkData(Point, Intervals[1], 25, 41, 2541); |
| checkData(Point, Intervals[2], 31, 56, 3156); |
| checkData(Point, Intervals[3], 15, 40, 1540); |
| checkData(Point, Intervals[4], 10, 85, 1085); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 31, 56, 3156); |
| checkData(Point, Intervals[2], 15, 40, 1540); |
| checkData(Point, Intervals[3], 25, 41, 2541); |
| checkData(Point, Intervals[4], 30, 35, 3035); |
| |
| Point = 39; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 6u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 31, 56, 3156); |
| checkData(Point, Intervals[2], 36, 54, 3654); |
| checkData(Point, Intervals[3], 39, 50, 3950); |
| checkData(Point, Intervals[4], 25, 41, 2541); |
| checkData(Point, Intervals[5], 15, 40, 1540); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 6u); |
| checkData(Point, Intervals[0], 39, 50, 3950); |
| checkData(Point, Intervals[1], 25, 41, 2541); |
| checkData(Point, Intervals[2], 36, 54, 3654); |
| checkData(Point, Intervals[3], 31, 56, 3156); |
| checkData(Point, Intervals[4], 15, 40, 1540); |
| checkData(Point, Intervals[5], 10, 85, 1085); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 6u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 31, 56, 3156); |
| checkData(Point, Intervals[2], 15, 40, 1540); |
| checkData(Point, Intervals[3], 36, 54, 3654); |
| checkData(Point, Intervals[4], 25, 41, 2541); |
| checkData(Point, Intervals[5], 39, 50, 3950); |
| |
| Point = 50; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 6u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 31, 56, 3156); |
| checkData(Point, Intervals[2], 36, 54, 3654); |
| checkData(Point, Intervals[3], 39, 50, 3950); |
| checkData(Point, Intervals[4], 49, 65, 4965); |
| checkData(Point, Intervals[5], 50, 75, 5075); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 6u); |
| checkData(Point, Intervals[0], 39, 50, 3950); |
| checkData(Point, Intervals[1], 49, 65, 4965); |
| checkData(Point, Intervals[2], 36, 54, 3654); |
| checkData(Point, Intervals[3], 31, 56, 3156); |
| checkData(Point, Intervals[4], 50, 75, 5075); |
| checkData(Point, Intervals[5], 10, 85, 1085); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 6u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 31, 56, 3156); |
| checkData(Point, Intervals[2], 50, 75, 5075); |
| checkData(Point, Intervals[3], 36, 54, 3654); |
| checkData(Point, Intervals[4], 49, 65, 4965); |
| checkData(Point, Intervals[5], 39, 50, 3950); |
| |
| Point = 55; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 31, 56, 3156); |
| checkData(Point, Intervals[2], 49, 65, 4965); |
| checkData(Point, Intervals[3], 50, 75, 5075); |
| checkData(Point, Intervals[4], 55, 61, 5561); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 55, 61, 5561); |
| checkData(Point, Intervals[1], 49, 65, 4965); |
| checkData(Point, Intervals[2], 31, 56, 3156); |
| checkData(Point, Intervals[3], 50, 75, 5075); |
| checkData(Point, Intervals[4], 10, 85, 1085); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 31, 56, 3156); |
| checkData(Point, Intervals[2], 50, 75, 5075); |
| checkData(Point, Intervals[3], 49, 65, 4965); |
| checkData(Point, Intervals[4], 55, 61, 5561); |
| |
| Point = 61; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 49, 65, 4965); |
| checkData(Point, Intervals[2], 50, 75, 5075); |
| checkData(Point, Intervals[3], 55, 61, 5561); |
| checkData(Point, Intervals[4], 60, 70, 6070); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 55, 61, 5561); |
| checkData(Point, Intervals[1], 60, 70, 6070); |
| checkData(Point, Intervals[2], 49, 65, 4965); |
| checkData(Point, Intervals[3], 50, 75, 5075); |
| checkData(Point, Intervals[4], 10, 85, 1085); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 50, 75, 5075); |
| checkData(Point, Intervals[2], 49, 65, 4965); |
| checkData(Point, Intervals[3], 60, 70, 6070); |
| checkData(Point, Intervals[4], 55, 61, 5561); |
| |
| Point = 31; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 31, 56, 3156); |
| checkData(Point, Intervals[2], 25, 41, 2541); |
| checkData(Point, Intervals[3], 15, 40, 1540); |
| checkData(Point, Intervals[4], 30, 35, 3035); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 30, 35, 3035); |
| checkData(Point, Intervals[1], 25, 41, 2541); |
| checkData(Point, Intervals[2], 31, 56, 3156); |
| checkData(Point, Intervals[3], 15, 40, 1540); |
| checkData(Point, Intervals[4], 10, 85, 1085); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 31, 56, 3156); |
| checkData(Point, Intervals[2], 15, 40, 1540); |
| checkData(Point, Intervals[3], 25, 41, 2541); |
| checkData(Point, Intervals[4], 30, 35, 3035); |
| |
| Point = 56; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 31, 56, 3156); |
| checkData(Point, Intervals[2], 49, 65, 4965); |
| checkData(Point, Intervals[3], 50, 75, 5075); |
| checkData(Point, Intervals[4], 55, 61, 5561); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 55, 61, 5561); |
| checkData(Point, Intervals[1], 49, 65, 4965); |
| checkData(Point, Intervals[2], 31, 56, 3156); |
| checkData(Point, Intervals[3], 50, 75, 5075); |
| checkData(Point, Intervals[4], 10, 85, 1085); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 31, 56, 3156); |
| checkData(Point, Intervals[2], 50, 75, 5075); |
| checkData(Point, Intervals[3], 49, 65, 4965); |
| checkData(Point, Intervals[4], 55, 61, 5561); |
| |
| Point = 12; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 3u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 11, 16, 1116); |
| checkData(Point, Intervals[2], 12, 21, 1221); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 3u); |
| checkData(Point, Intervals[0], 11, 16, 1116); |
| checkData(Point, Intervals[1], 12, 21, 1221); |
| checkData(Point, Intervals[2], 10, 85, 1085); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 3u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 12, 21, 1221); |
| checkData(Point, Intervals[2], 11, 16, 1116); |
| |
| Point = 21; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 4u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 15, 40, 1540); |
| checkData(Point, Intervals[2], 20, 30, 2030); |
| checkData(Point, Intervals[3], 12, 21, 1221); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 4u); |
| checkData(Point, Intervals[0], 12, 21, 1221); |
| checkData(Point, Intervals[1], 20, 30, 2030); |
| checkData(Point, Intervals[2], 15, 40, 1540); |
| checkData(Point, Intervals[3], 10, 85, 1085); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 4u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 15, 40, 1540); |
| checkData(Point, Intervals[2], 20, 30, 2030); |
| checkData(Point, Intervals[3], 12, 21, 1221); |
| |
| Point = 25; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 4u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 15, 40, 1540); |
| checkData(Point, Intervals[2], 20, 30, 2030); |
| checkData(Point, Intervals[3], 25, 41, 2541); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 4u); |
| checkData(Point, Intervals[0], 20, 30, 2030); |
| checkData(Point, Intervals[1], 25, 41, 2541); |
| checkData(Point, Intervals[2], 15, 40, 1540); |
| checkData(Point, Intervals[3], 10, 85, 1085); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 4u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 15, 40, 1540); |
| checkData(Point, Intervals[2], 25, 41, 2541); |
| checkData(Point, Intervals[3], 20, 30, 2030); |
| |
| Point = 41; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 31, 56, 3156); |
| checkData(Point, Intervals[2], 36, 54, 3654); |
| checkData(Point, Intervals[3], 39, 50, 3950); |
| checkData(Point, Intervals[4], 25, 41, 2541); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 39, 50, 3950); |
| checkData(Point, Intervals[1], 25, 41, 2541); |
| checkData(Point, Intervals[2], 36, 54, 3654); |
| checkData(Point, Intervals[3], 31, 56, 3156); |
| checkData(Point, Intervals[4], 10, 85, 1085); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 31, 56, 3156); |
| checkData(Point, Intervals[2], 36, 54, 3654); |
| checkData(Point, Intervals[3], 25, 41, 2541); |
| checkData(Point, Intervals[4], 39, 50, 3950); |
| |
| Point = 49; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 31, 56, 3156); |
| checkData(Point, Intervals[2], 36, 54, 3654); |
| checkData(Point, Intervals[3], 39, 50, 3950); |
| checkData(Point, Intervals[4], 49, 65, 4965); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 39, 50, 3950); |
| checkData(Point, Intervals[1], 49, 65, 4965); |
| checkData(Point, Intervals[2], 36, 54, 3654); |
| checkData(Point, Intervals[3], 31, 56, 3156); |
| checkData(Point, Intervals[4], 10, 85, 1085); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 31, 56, 3156); |
| checkData(Point, Intervals[2], 36, 54, 3654); |
| checkData(Point, Intervals[3], 49, 65, 4965); |
| checkData(Point, Intervals[4], 39, 50, 3950); |
| |
| Point = 65; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 4u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 50, 75, 5075); |
| checkData(Point, Intervals[2], 60, 70, 6070); |
| checkData(Point, Intervals[3], 49, 65, 4965); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 4u); |
| checkData(Point, Intervals[0], 60, 70, 6070); |
| checkData(Point, Intervals[1], 49, 65, 4965); |
| checkData(Point, Intervals[2], 50, 75, 5075); |
| checkData(Point, Intervals[3], 10, 85, 1085); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 4u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 50, 75, 5075); |
| checkData(Point, Intervals[2], 49, 65, 4965); |
| checkData(Point, Intervals[3], 60, 70, 6070); |
| |
| Point = 71; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 3u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 50, 75, 5075); |
| checkData(Point, Intervals[2], 71, 79, 7179); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 3u); |
| checkData(Point, Intervals[0], 71, 79, 7179); |
| checkData(Point, Intervals[1], 50, 75, 5075); |
| checkData(Point, Intervals[2], 10, 85, 1085); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 3u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 50, 75, 5075); |
| checkData(Point, Intervals[2], 71, 79, 7179); |
| |
| Point = 79; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 3u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 74, 80, 7480); |
| checkData(Point, Intervals[2], 71, 79, 7179); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 3u); |
| checkData(Point, Intervals[0], 74, 80, 7480); |
| checkData(Point, Intervals[1], 71, 79, 7179); |
| checkData(Point, Intervals[2], 10, 85, 1085); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 3u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 71, 79, 7179); |
| checkData(Point, Intervals[2], 74, 80, 7480); |
| |
| Point = 11; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 2u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 11, 16, 1116); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 2u); |
| checkData(Point, Intervals[0], 11, 16, 1116); |
| checkData(Point, Intervals[1], 10, 85, 1085); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 2u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 11, 16, 1116); |
| |
| Point = 16; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 4u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 15, 40, 1540); |
| checkData(Point, Intervals[2], 12, 21, 1221); |
| checkData(Point, Intervals[3], 11, 16, 1116); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 4u); |
| checkData(Point, Intervals[0], 11, 16, 1116); |
| checkData(Point, Intervals[1], 12, 21, 1221); |
| checkData(Point, Intervals[2], 15, 40, 1540); |
| checkData(Point, Intervals[3], 10, 85, 1085); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 4u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 15, 40, 1540); |
| checkData(Point, Intervals[2], 12, 21, 1221); |
| checkData(Point, Intervals[3], 11, 16, 1116); |
| |
| Point = 20; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 4u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 15, 40, 1540); |
| checkData(Point, Intervals[2], 20, 30, 2030); |
| checkData(Point, Intervals[3], 12, 21, 1221); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 4u); |
| checkData(Point, Intervals[0], 12, 21, 1221); |
| checkData(Point, Intervals[1], 20, 30, 2030); |
| checkData(Point, Intervals[2], 15, 40, 1540); |
| checkData(Point, Intervals[3], 10, 85, 1085); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 4u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 15, 40, 1540); |
| checkData(Point, Intervals[2], 20, 30, 2030); |
| checkData(Point, Intervals[3], 12, 21, 1221); |
| |
| Point = 30; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 25, 41, 2541); |
| checkData(Point, Intervals[2], 15, 40, 1540); |
| checkData(Point, Intervals[3], 20, 30, 2030); |
| checkData(Point, Intervals[4], 30, 35, 3035); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 30, 35, 3035); |
| checkData(Point, Intervals[1], 20, 30, 2030); |
| checkData(Point, Intervals[2], 25, 41, 2541); |
| checkData(Point, Intervals[3], 15, 40, 1540); |
| checkData(Point, Intervals[4], 10, 85, 1085); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 15, 40, 1540); |
| checkData(Point, Intervals[2], 25, 41, 2541); |
| checkData(Point, Intervals[3], 20, 30, 2030); |
| checkData(Point, Intervals[4], 30, 35, 3035); |
| |
| Point = 36; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 31, 56, 3156); |
| checkData(Point, Intervals[2], 36, 54, 3654); |
| checkData(Point, Intervals[3], 25, 41, 2541); |
| checkData(Point, Intervals[4], 15, 40, 1540); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 25, 41, 2541); |
| checkData(Point, Intervals[1], 36, 54, 3654); |
| checkData(Point, Intervals[2], 31, 56, 3156); |
| checkData(Point, Intervals[3], 15, 40, 1540); |
| checkData(Point, Intervals[4], 10, 85, 1085); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 31, 56, 3156); |
| checkData(Point, Intervals[2], 15, 40, 1540); |
| checkData(Point, Intervals[3], 36, 54, 3654); |
| checkData(Point, Intervals[4], 25, 41, 2541); |
| |
| Point = 54; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 31, 56, 3156); |
| checkData(Point, Intervals[2], 36, 54, 3654); |
| checkData(Point, Intervals[3], 49, 65, 4965); |
| checkData(Point, Intervals[4], 50, 75, 5075); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 49, 65, 4965); |
| checkData(Point, Intervals[1], 36, 54, 3654); |
| checkData(Point, Intervals[2], 31, 56, 3156); |
| checkData(Point, Intervals[3], 50, 75, 5075); |
| checkData(Point, Intervals[4], 10, 85, 1085); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 31, 56, 3156); |
| checkData(Point, Intervals[2], 50, 75, 5075); |
| checkData(Point, Intervals[3], 36, 54, 3654); |
| checkData(Point, Intervals[4], 49, 65, 4965); |
| |
| Point = 60; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 49, 65, 4965); |
| checkData(Point, Intervals[2], 50, 75, 5075); |
| checkData(Point, Intervals[3], 55, 61, 5561); |
| checkData(Point, Intervals[4], 60, 70, 6070); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 55, 61, 5561); |
| checkData(Point, Intervals[1], 60, 70, 6070); |
| checkData(Point, Intervals[2], 49, 65, 4965); |
| checkData(Point, Intervals[3], 50, 75, 5075); |
| checkData(Point, Intervals[4], 10, 85, 1085); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 50, 75, 5075); |
| checkData(Point, Intervals[2], 49, 65, 4965); |
| checkData(Point, Intervals[3], 60, 70, 6070); |
| checkData(Point, Intervals[4], 55, 61, 5561); |
| |
| Point = 70; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 3u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 50, 75, 5075); |
| checkData(Point, Intervals[2], 60, 70, 6070); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 3u); |
| checkData(Point, Intervals[0], 60, 70, 6070); |
| checkData(Point, Intervals[1], 50, 75, 5075); |
| checkData(Point, Intervals[2], 10, 85, 1085); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 3u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 50, 75, 5075); |
| checkData(Point, Intervals[2], 60, 70, 6070); |
| |
| Point = 74; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 4u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 50, 75, 5075); |
| checkData(Point, Intervals[2], 71, 79, 7179); |
| checkData(Point, Intervals[3], 74, 80, 7480); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 4u); |
| checkData(Point, Intervals[0], 74, 80, 7480); |
| checkData(Point, Intervals[1], 71, 79, 7179); |
| checkData(Point, Intervals[2], 50, 75, 5075); |
| checkData(Point, Intervals[3], 10, 85, 1085); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 4u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 50, 75, 5075); |
| checkData(Point, Intervals[2], 71, 79, 7179); |
| checkData(Point, Intervals[3], 74, 80, 7480); |
| |
| Point = 80; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 2u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 74, 80, 7480); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 2u); |
| checkData(Point, Intervals[0], 74, 80, 7480); |
| checkData(Point, Intervals[1], 10, 85, 1085); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 2u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 74, 80, 7480); |
| |
| Point = 15; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 4u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 15, 40, 1540); |
| checkData(Point, Intervals[2], 11, 16, 1116); |
| checkData(Point, Intervals[3], 12, 21, 1221); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 4u); |
| checkData(Point, Intervals[0], 11, 16, 1116); |
| checkData(Point, Intervals[1], 12, 21, 1221); |
| checkData(Point, Intervals[2], 15, 40, 1540); |
| checkData(Point, Intervals[3], 10, 85, 1085); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 4u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 15, 40, 1540); |
| checkData(Point, Intervals[2], 12, 21, 1221); |
| checkData(Point, Intervals[3], 11, 16, 1116); |
| |
| Point = 40; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 6u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 31, 56, 3156); |
| checkData(Point, Intervals[2], 36, 54, 3654); |
| checkData(Point, Intervals[3], 39, 50, 3950); |
| checkData(Point, Intervals[4], 25, 41, 2541); |
| checkData(Point, Intervals[5], 15, 40, 1540); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 6u); |
| checkData(Point, Intervals[0], 39, 50, 3950); |
| checkData(Point, Intervals[1], 25, 41, 2541); |
| checkData(Point, Intervals[2], 36, 54, 3654); |
| checkData(Point, Intervals[3], 31, 56, 3156); |
| checkData(Point, Intervals[4], 15, 40, 1540); |
| checkData(Point, Intervals[5], 10, 85, 1085); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 6u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 31, 56, 3156); |
| checkData(Point, Intervals[2], 15, 40, 1540); |
| checkData(Point, Intervals[3], 36, 54, 3654); |
| checkData(Point, Intervals[4], 25, 41, 2541); |
| checkData(Point, Intervals[5], 39, 50, 3950); |
| |
| Point = 43; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 31, 56, 3156); |
| checkData(Point, Intervals[2], 36, 54, 3654); |
| checkData(Point, Intervals[3], 39, 50, 3950); |
| checkData(Point, Intervals[4], 43, 45, 4345); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 43, 45, 4345); |
| checkData(Point, Intervals[1], 39, 50, 3950); |
| checkData(Point, Intervals[2], 36, 54, 3654); |
| checkData(Point, Intervals[3], 31, 56, 3156); |
| checkData(Point, Intervals[4], 10, 85, 1085); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 31, 56, 3156); |
| checkData(Point, Intervals[2], 36, 54, 3654); |
| checkData(Point, Intervals[3], 39, 50, 3950); |
| checkData(Point, Intervals[4], 43, 45, 4345); |
| |
| Point = 45; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 31, 56, 3156); |
| checkData(Point, Intervals[2], 36, 54, 3654); |
| checkData(Point, Intervals[3], 39, 50, 3950); |
| checkData(Point, Intervals[4], 43, 45, 4345); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 43, 45, 4345); |
| checkData(Point, Intervals[1], 39, 50, 3950); |
| checkData(Point, Intervals[2], 36, 54, 3654); |
| checkData(Point, Intervals[3], 31, 56, 3156); |
| checkData(Point, Intervals[4], 10, 85, 1085); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 5u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 31, 56, 3156); |
| checkData(Point, Intervals[2], 36, 54, 3654); |
| checkData(Point, Intervals[3], 39, 50, 3950); |
| checkData(Point, Intervals[4], 43, 45, 4345); |
| |
| Point = 50; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 6u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 31, 56, 3156); |
| checkData(Point, Intervals[2], 36, 54, 3654); |
| checkData(Point, Intervals[3], 39, 50, 3950); |
| checkData(Point, Intervals[4], 49, 65, 4965); |
| checkData(Point, Intervals[5], 50, 75, 5075); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 6u); |
| checkData(Point, Intervals[0], 39, 50, 3950); |
| checkData(Point, Intervals[1], 49, 65, 4965); |
| checkData(Point, Intervals[2], 36, 54, 3654); |
| checkData(Point, Intervals[3], 31, 56, 3156); |
| checkData(Point, Intervals[4], 50, 75, 5075); |
| checkData(Point, Intervals[5], 10, 85, 1085); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 6u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 31, 56, 3156); |
| checkData(Point, Intervals[2], 50, 75, 5075); |
| checkData(Point, Intervals[3], 36, 54, 3654); |
| checkData(Point, Intervals[4], 49, 65, 4965); |
| checkData(Point, Intervals[5], 39, 50, 3950); |
| |
| Point = 75; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 4u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 50, 75, 5075); |
| checkData(Point, Intervals[2], 74, 80, 7480); |
| checkData(Point, Intervals[3], 71, 79, 7179); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Ascending); |
| ASSERT_EQ(Intervals.size(), 4u); |
| checkData(Point, Intervals[0], 74, 80, 7480); |
| checkData(Point, Intervals[1], 71, 79, 7179); |
| checkData(Point, Intervals[2], 50, 75, 5075); |
| checkData(Point, Intervals[3], 10, 85, 1085); |
| Intervals = Tree.getContaining(Point); |
| Tree.sortIntervals(Intervals, UUSorting::Descending); |
| ASSERT_EQ(Intervals.size(), 4u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| checkData(Point, Intervals[1], 50, 75, 5075); |
| checkData(Point, Intervals[2], 71, 79, 7179); |
| checkData(Point, Intervals[3], 74, 80, 7480); |
| |
| Point = 10; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 1u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| |
| Point = 85; |
| Intervals = Tree.getContaining(Point); |
| ASSERT_EQ(Intervals.size(), 1u); |
| checkData(Point, Intervals[0], 10, 85, 1085); |
| |
| // Invalid interval values. |
| Point = 5; |
| Intervals = Tree.getContaining(Point); |
| EXPECT_TRUE(Intervals.empty()); |
| Point = 90; |
| Intervals = Tree.getContaining(Point); |
| EXPECT_TRUE(Intervals.empty()); |
| } |
| |
| // Four items tree tests. Overlapping. Check mapped values and iterators. |
| TEST(IntervalTreeTest, MappedValuesIteratorsTree) { |
| UUAlloc Allocator; |
| UUTree Tree(Allocator); |
| UUPoint Point; |
| |
| // [10, 20] <- (1020) |
| // [15, 25] <- (1525) |
| // [50, 60] <- (5060) |
| // [55, 65] <- (5565) |
| // |
| // [10.........20] |
| // [15.........25] |
| // [50.........60] |
| // [55.........65] |
| Tree.insert(10, 20, 1020); |
| Tree.insert(15, 25, 1525); |
| Tree.insert(50, 60, 5060); |
| Tree.insert(55, 65, 5565); |
| Tree.create(); |
| |
| // Iterators. |
| { |
| // Start searching for '10'. |
| Point = 10; |
| UUIter Iter = Tree.find(Point); |
| EXPECT_NE(Iter, Tree.find_end()); |
| checkData(Point, Iter, 10, 20, 1020); |
| ++Iter; |
| EXPECT_EQ(Iter, Tree.find_end()); |
| } |
| { |
| // Start searching for '15'. |
| Point = 15; |
| UUIter Iter = Tree.find(Point); |
| ASSERT_TRUE(Iter != Tree.find_end()); |
| checkData(Point, Iter, 15, 25, 1525); |
| ++Iter; |
| ASSERT_TRUE(Iter != Tree.find_end()); |
| checkData(Point, Iter, 10, 20, 1020); |
| ++Iter; |
| EXPECT_EQ(Iter, Tree.find_end()); |
| } |
| { |
| // Start searching for '20'. |
| Point = 20; |
| UUIter Iter = Tree.find(Point); |
| ASSERT_TRUE(Iter != Tree.find_end()); |
| checkData(Point, Iter, 15, 25, 1525); |
| ++Iter; |
| ASSERT_TRUE(Iter != Tree.find_end()); |
| checkData(Point, Iter, 10, 20, 1020); |
| ++Iter; |
| EXPECT_EQ(Iter, Tree.find_end()); |
| } |
| { |
| // Start searching for '25'. |
| Point = 25; |
| UUIter Iter = Tree.find(Point); |
| ASSERT_TRUE(Iter != Tree.find_end()); |
| checkData(Point, Iter, 15, 25, 1525); |
| ++Iter; |
| EXPECT_EQ(Iter, Tree.find_end()); |
| } |
| // Invalid interval values. |
| { |
| Point = 5; |
| UUIter Iter = Tree.find(Point); |
| EXPECT_EQ(Iter, Tree.find_end()); |
| } |
| { |
| Point = 45; |
| UUIter Iter = Tree.find(Point); |
| EXPECT_EQ(Iter, Tree.find_end()); |
| } |
| { |
| Point = 70; |
| UUIter Iter = Tree.find(Point); |
| EXPECT_EQ(Iter, Tree.find_end()); |
| } |
| } |
| |
| } // namespace |