|
7 | 7 | #include <random>
|
8 | 8 | #include <cmath>
|
9 | 9 |
|
10 |
| - |
11 |
| - |
12 |
| -class InsertTests |
13 |
| - : public ::testing::Test |
| 10 | +class InsertTests : public ::testing::Test |
14 | 11 | {
|
15 |
| -public: |
16 |
| - using types = IntervalTypes <int>; |
| 12 | + public: |
| 13 | + using types = IntervalTypes<int>; |
17 | 14 |
|
18 |
| -protected: |
19 |
| - IntervalTypes <int>::tree_type tree; |
| 15 | + protected: |
| 16 | + IntervalTypes<int>::tree_type tree; |
20 | 17 | std::default_random_engine gen;
|
21 |
| - std::uniform_int_distribution <int> distSmall{-500, 500}; |
22 |
| - std::uniform_int_distribution <int> distLarge{-50000, 50000}; |
| 18 | + std::uniform_int_distribution<int> distSmall{-500, 500}; |
| 19 | + std::uniform_int_distribution<int> distLarge{-50000, 50000}; |
23 | 20 | };
|
24 | 21 |
|
25 | 22 | TEST_F(InsertTests, InsertIntoEmpty1)
|
@@ -86,15 +83,50 @@ TEST_F(InsertTests, RBPropertyInsertTest)
|
86 | 83 |
|
87 | 84 | TEST_F(InsertTests, IntervalsMayReturnMultipleIntervalsForJoin)
|
88 | 85 | {
|
89 |
| - using interval_type = multi_join_interval <int>; |
| 86 | + using interval_type = multi_join_interval<int>; |
90 | 87 | using tree_type = lib_interval_tree::interval_tree<interval_type>;
|
91 | 88 |
|
92 | 89 | auto multiJoinTree = tree_type{};
|
93 | 90 |
|
94 |
| - multiJoinTree.insert({0, 1}); |
95 |
| - multiJoinTree.insert_overlap({0, 2}); |
| 91 | + multiJoinTree.insert({0, 2}); |
| 92 | + multiJoinTree.insert_overlap({0, 4}); |
96 | 93 |
|
97 | 94 | EXPECT_EQ(multiJoinTree.size(), 2);
|
98 |
| - EXPECT_EQ(*multiJoinTree.begin(), (interval_type{0, 1})) << multiJoinTree.begin()->low() << multiJoinTree.begin()->high(); |
99 |
| - EXPECT_EQ(*++multiJoinTree.begin(), (interval_type{1, 2})); |
| 95 | + EXPECT_EQ(*multiJoinTree.begin(), (interval_type{0, 1})) |
| 96 | + << multiJoinTree.begin()->low() << multiJoinTree.begin()->high(); |
| 97 | + EXPECT_EQ(*++multiJoinTree.begin(), (interval_type{3, 4})); |
| 98 | +} |
| 99 | + |
| 100 | +TEST_F(InsertTests, IntervalsMayReturnMultipleIntervalsForJoinAndJoinRecursively) |
| 101 | +{ |
| 102 | + using interval_type = multi_join_interval<int>; |
| 103 | + using tree_type = lib_interval_tree::interval_tree<interval_type>; |
| 104 | + |
| 105 | + auto multiJoinTree = tree_type{}; |
| 106 | + |
| 107 | + multiJoinTree.insert({0, 10}); |
| 108 | + multiJoinTree.insert({5, 10}); |
| 109 | + multiJoinTree.insert_overlap({0, 20}, false, true); |
| 110 | + |
| 111 | + EXPECT_EQ(multiJoinTree.size(), 3); |
| 112 | + |
| 113 | + auto iter = multiJoinTree.begin(); |
| 114 | + |
| 115 | + EXPECT_EQ(*iter, (interval_type{0, 4})) << multiJoinTree.begin()->low() << multiJoinTree.begin()->high(); |
| 116 | + EXPECT_EQ(*++iter, (interval_type{6, 10})) << multiJoinTree.begin()->low() << multiJoinTree.begin()->high(); |
| 117 | + EXPECT_EQ(*++iter, (interval_type{11, 20})) << multiJoinTree.begin()->low() << multiJoinTree.begin()->high(); |
| 118 | +} |
| 119 | + |
| 120 | +TEST_F(InsertTests, CanInsertOverlapRecursively) |
| 121 | +{ |
| 122 | + using tree_type = lib_interval_tree::interval_tree<types::interval_type>; |
| 123 | + |
| 124 | + auto tree = tree_type{}; |
| 125 | + tree.insert({0, 9}); |
| 126 | + tree.insert({20, 29}); |
| 127 | + tree.insert_overlap({8, 21}, false, true); |
| 128 | + |
| 129 | + EXPECT_EQ(tree.size(), 1); |
| 130 | + EXPECT_EQ(tree.begin()->low(), 0); |
| 131 | + EXPECT_EQ(tree.begin()->high(), 29); |
100 | 132 | }
|
0 commit comments