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