Skip to content

Commit b19afc3

Browse files
authored
Merge pull request #40 from 5cript/fix/fix_copy_assign
Fixed copy assign not working.
2 parents 4b91cf4 + d418856 commit b19afc3

File tree

3 files changed

+119
-2
lines changed

3 files changed

+119
-2
lines changed

include/interval-tree/interval_tree.hpp

+7-2
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,11 @@ namespace lib_interval_tree
393393
return &interval_;
394394
}
395395

396+
interval_type* interval()
397+
{
398+
return &interval_;
399+
}
400+
396401
value_type max() const
397402
{
398403
return max_;
@@ -1058,7 +1063,7 @@ namespace lib_interval_tree
10581063
}
10591064
}();
10601065

1061-
node_type* x = [y](){
1066+
node_type* x = [y]() {
10621067
if (y->left_)
10631068
return y->left_;
10641069
else
@@ -1468,7 +1473,7 @@ namespace lib_interval_tree
14681473
{
14691474
if (root)
14701475
{
1471-
auto* cpy = new node_type(parent, root->interval());
1476+
auto* cpy = new node_type(parent, *root->interval());
14721477
cpy->color_ = root->color_;
14731478
cpy->max_ = root->max_;
14741479
cpy->left_ = copy_tree_impl(root->left_, cpy);

tests/interval_tree_tests.hpp

+111
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
#pragma once
2+
3+
#include "test_utility.hpp"
4+
#include "multi_join_interval.hpp"
5+
6+
#include <ctime>
7+
#include <random>
8+
#include <cmath>
9+
10+
class IntervalTreeTests : public ::testing::Test
11+
{
12+
public:
13+
using types = IntervalTypes<int>;
14+
};
15+
16+
TEST_F(IntervalTreeTests, CanCopyConstruct)
17+
{
18+
auto tree = types::tree_type{};
19+
tree.insert(types::interval_type{0, 5});
20+
auto tree2 = tree;
21+
EXPECT_EQ(tree2.size(), 1);
22+
EXPECT_EQ(tree.size(), 1);
23+
EXPECT_EQ(tree2.begin()->low(), 0);
24+
EXPECT_EQ(tree2.begin()->high(), 5);
25+
}
26+
27+
TEST_F(IntervalTreeTests, CanMoveConstruct)
28+
{
29+
auto tree = types::tree_type{};
30+
tree.insert(types::interval_type{0, 5});
31+
auto tree2 = std::move(tree);
32+
EXPECT_EQ(tree2.size(), 1);
33+
EXPECT_EQ(tree.size(), 0);
34+
EXPECT_EQ(tree2.begin()->low(), 0);
35+
EXPECT_EQ(tree2.begin()->high(), 5);
36+
}
37+
38+
TEST_F(IntervalTreeTests, CanCopyAssign)
39+
{
40+
auto tree = types::tree_type{};
41+
tree.insert(types::interval_type{0, 5});
42+
auto tree2 = types::tree_type{};
43+
tree2.insert(types::interval_type{5, 10});
44+
tree2.insert(types::interval_type{1, 2});
45+
tree2 = tree;
46+
EXPECT_EQ(tree2.size(), 1);
47+
EXPECT_EQ(tree.size(), 1);
48+
EXPECT_EQ(tree2.begin()->low(), 0);
49+
EXPECT_EQ(tree2.begin()->high(), 5);
50+
}
51+
52+
TEST_F(IntervalTreeTests, CanMoveAssign)
53+
{
54+
auto tree = types::tree_type{};
55+
tree.insert(types::interval_type{0, 5});
56+
auto tree2 = types::tree_type{};
57+
tree2.insert(types::interval_type{5, 10});
58+
tree2.insert(types::interval_type{1, 2});
59+
tree2 = std::move(tree);
60+
EXPECT_EQ(tree2.size(), 1);
61+
EXPECT_EQ(tree.size(), 0);
62+
EXPECT_EQ(tree2.begin()->low(), 0);
63+
EXPECT_EQ(tree2.begin()->high(), 5);
64+
}
65+
66+
TEST_F(IntervalTreeTests, CanCopyBiggerTree)
67+
{
68+
auto tree = types::tree_type{};
69+
tree.insert(types::interval_type{0, 5});
70+
tree.insert(types::interval_type{5, 10});
71+
tree.insert(types::interval_type{10, 15});
72+
tree.insert(types::interval_type{15, 20});
73+
tree.insert(types::interval_type{20, 25});
74+
tree.insert(types::interval_type{25, 30});
75+
tree.insert(types::interval_type{30, 35});
76+
tree.insert(types::interval_type{35, 40});
77+
tree.insert(types::interval_type{40, 45});
78+
tree.insert(types::interval_type{45, 50});
79+
auto tree2 = tree;
80+
EXPECT_EQ(tree2.size(), 10);
81+
EXPECT_EQ(tree.size(), 10);
82+
83+
for (auto i = tree.begin(), j = tree2.begin(); i != tree.end(); ++i, ++j)
84+
{
85+
EXPECT_EQ(i->low(), j->low());
86+
EXPECT_EQ(i->high(), j->high());
87+
}
88+
}
89+
90+
TEST_F(IntervalTreeTests, CanMoveBiggerTree)
91+
{
92+
auto tree = types::tree_type{};
93+
tree.insert(types::interval_type{0, 5});
94+
tree.insert(types::interval_type{5, 10});
95+
tree.insert(types::interval_type{10, 15});
96+
tree.insert(types::interval_type{15, 20});
97+
tree.insert(types::interval_type{20, 25});
98+
tree.insert(types::interval_type{25, 30});
99+
tree.insert(types::interval_type{30, 35});
100+
tree.insert(types::interval_type{35, 40});
101+
tree.insert(types::interval_type{40, 45});
102+
tree.insert(types::interval_type{45, 50});
103+
auto tree2 = std::move(tree);
104+
EXPECT_EQ(tree2.size(), 10);
105+
EXPECT_EQ(tree.size(), 0);
106+
107+
for (auto i = tree2.begin(); i != tree2.end(); ++i)
108+
{
109+
EXPECT_EQ(i->low(), i->high() - 5);
110+
}
111+
}

tests/tests.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
// following headers expect to be included after gtest headers and interval_tree
88
#include "interval_tests.hpp"
9+
#include "interval_tree_tests.hpp"
910
#include "insert_tests.hpp"
1011
#include "erase_tests.hpp"
1112
#include "find_tests.hpp"

0 commit comments

Comments
 (0)