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
+ }
0 commit comments