Repository navigation
Expand file tree
/
Copy pathBinarySearchTree_compile_check.cpp
More file actions
148 lines (99 loc) · 3.31 KB
/
Copy pathBinarySearchTree_compile_check.cpp
File metadata and controls
148 lines (99 loc) · 3.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#include <iostream>
#include "BinarySearchTree.hpp"
using namespace std;
class Duck {
public:
Duck() : wealth(0) {} // tree requires default-constructible
Duck(int wealth_in) : wealth(wealth_in) {}
int getWealth() const { return wealth; }
private:
int wealth;
};
class DuckWealthLess {
public:
bool operator() (const Duck &d1, const Duck &d2) const {
return d1.getWealth() < d2.getWealth();
}
};
ostream &operator<<(ostream &os, const Duck &duck) {
return os << "Duck: $" << duck.getWealth();
}
int main() {
cout << "This test doesn't do anything interesting." << endl;
cout << "It is just here to check for compilation issues." << endl;
BinarySearchTree<int> tree;
const BinarySearchTree<int> &const_tree = tree;
// TODO: Do ducks actually live in trees?
BinarySearchTree<Duck, DuckWealthLess> duck_tree;
const BinarySearchTree<Duck, DuckWealthLess> &const_duck_tree = duck_tree;
// Insert elements into trees to prevent breaking requires clauses
tree.insert(100);
tree.insert(1000);
tree.insert(10000);
duck_tree.insert(Duck(100));
duck_tree.insert(Duck(1000));
duck_tree.insert(Duck(10000));
// Dummy variables
bool b;
size_t i;
size_t st;
string s;
// Dummy iterators - should be default constructible as end iterator
BinarySearchTree<int>::Iterator it;
BinarySearchTree<Duck, DuckWealthLess>::Iterator duck_it;
// Big Three
BinarySearchTree<int> tree_copy(const_tree);
BinarySearchTree<Duck, DuckWealthLess> duck_tree_copy(const_duck_tree);
tree_copy = const_tree;
duck_tree_copy = const_duck_tree;
// destructor tested implicitly at end of function
// Functions that can be applied to a const tree
b = const_tree.empty();
b = const_duck_tree.empty();
i = const_tree.height();
i = const_duck_tree.height();
st = const_tree.size();
st = const_duck_tree.size();
const_tree.traverse_inorder(cout);
const_duck_tree.traverse_inorder(cout);
const_tree.traverse_preorder(cout);
const_duck_tree.traverse_preorder(cout);
b = const_tree.check_sorting_invariant();
b = const_duck_tree.check_sorting_invariant();
it = const_tree.begin();
duck_it = const_duck_tree.begin();
it = const_tree.end();
duck_it = const_duck_tree.end();
it = const_tree.min_element();
duck_it = const_duck_tree.min_element();
it = const_tree.max_element();
duck_it = const_duck_tree.max_element();
it = const_tree.find(0);
duck_it = const_duck_tree.find(Duck());
s = const_tree.to_string();
s = const_duck_tree.to_string();
it = const_tree.min_greater_than(0);
duck_it = const_duck_tree.min_greater_than(Duck());
// Functions that can't be called on a const tree
it = tree.insert(0);
duck_it = duck_tree.insert(Duck());
// Using iterators
it = tree.begin();
duck_it = duck_tree.begin();
*it = 50;
*duck_it = Duck(50);
++++it;
++++duck_it;
it = it++;
duck_it = duck_it++;
b = tree.end() == tree.end();
b = duck_tree.end() == duck_tree.end();
b = tree.end() != tree.end();
b = duck_tree.end() != duck_tree.end();
const auto &const_it = it;
const auto &const_duck_it = duck_it;
BinarySearchTree<int>::Iterator it_copy(const_it);
BinarySearchTree<Duck, DuckWealthLess>::Iterator duck_it_copy(const_duck_it);
cout << b << i << st << s << endl;
cout << *it_copy << (*duck_it_copy).getWealth() << endl;
}