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