#include #include "BinarySearchTree.h" 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 tree; const BinarySearchTree &const_tree = tree; // TODO: Do ducks actually live in trees? BinarySearchTree duck_tree; const BinarySearchTree &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::Iterator it; BinarySearchTree::Iterator duck_it; // Big Three BinarySearchTree tree_copy(const_tree); BinarySearchTree 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::Iterator it_copy(const_it); BinarySearchTree::Iterator duck_it_copy(const_duck_it); cout << b << i << st << s << endl; cout << *it_copy << (*duck_it_copy).getWealth() << endl; }