Please send questions to st10@humboldt.edu .
//---------------------------------------------------------------
// File: test_bst.cpp
// Name: Sharon M. Tuttle
// last modified: 3-31-05
//
// Purpose: tester for template class bst<Item>
//--------------------------------------------------------------

#include <iostream>
#include "bst.h"
using namespace std;

int main()
{
    // set-up declarations
    bst<int>    numTree;
    bst<string> nameTree;
    string      names[] = {"Sharon", "Katherine", "Thomas", "George"};
    char        dummy;
 
    // tests and associated cout's

    cout << endl;
    cout << "Testing template class bst..." << endl;
    cout << endl;

    nameTree.add(names[0]);
    nameTree.add(names[1]);
    nameTree.add(names[2]);

    cout << "SHOULD see Katherine, then Sharon, then Thomas, " << endl;
    cout << "   each on its own line: " << endl;
    cout << "-----------------------------------------------" << endl;
    nameTree.print_inorder();

    cout << endl;
    cout << "1's mean test passed, 0's mean test failed:" << endl;
    cout << "-------------------------------------------" << endl;
    cout << (numTree.get_size( ) == 0) << endl;
    cout << (nameTree.get_size( ) == 3) << endl;
    
    cout << endl;
    cout << (numTree.is_empty( ) == true) << endl;
    cout << (nameTree.is_empty( ) == false) << endl;

    cout << endl;
    cout << (nameTree.contains(names[0]) == true) << endl;
    cout << (nameTree.contains(names[1]) == true) << endl;
    cout << (nameTree.contains(names[2]) == true) << endl;
    cout << (nameTree.contains(names[3]) == false) << endl;

    numTree.add(5);

    cout << endl;
    cout << (numTree.get_size( ) == 1) << endl;
    cout << (numTree.is_empty( ) == false) << endl;
    cout << (numTree.contains(5) == true) << endl;
    cout << (numTree.contains(3) == false) << endl;
    
    numTree.add(13);

    cout << endl;
    cout << (numTree.get_size( ) == 2) << endl;
    cout << (numTree.is_empty( ) == false) << endl;
    cout << (numTree.contains(13) == true) << endl;
    cout << (numTree.contains(3) == false) << endl;

    numTree.add(20);

    cout << endl;
    cout << (numTree.get_size( ) == 3) << endl;
    cout << (numTree.is_empty( ) == false) << endl;
    cout << (numTree.contains(20) == true) << endl;

    // try to add 13 again --- tree should be unchanged
    numTree.add(13);

    cout << endl;
    cout << (numTree.get_size( ) == 3) << endl;
    cout << (numTree.is_empty( ) == false) << endl;
    cout << (numTree.contains(13) == true) << endl;

    numTree.add(21);
    numTree.add(17);
    numTree.add(25);
    numTree.add(3);
    numTree.add(1);
    numTree.add(4);
    numTree.add(7);
    numTree.add(6);
    numTree.add(9);

    cout << endl;
    cout << (numTree.get_size( ) == 12) << endl;
    cout << (numTree.is_empty( ) == false) << endl;
    cout << (numTree.contains(6) == true) << endl;
    cout << (numTree.contains(100) == false) << endl;

    cout << endl;
    cout << "Should see, 1 per line: 1 3 4 5 6 7 9 13 17 20 21 25" << endl;
    cout << "----------------------------------------------------" << endl;
    numTree.print_inorder();

    bst<int> numTree2, numTree3;

    numTree2.add(100);
    numTree2.add(50);
    numTree2.add(150);

    cout << endl;
    cout << (numTree2.get_size( ) == 3) << endl;

    numTree3.add(200);
    numTree3.add(201);
    numTree3.add(202);
    numTree3.add(3);

    cout << (numTree3.get_size( ) == 4) << endl;

    numTree3 = numTree2;

    cout << endl;
    cout << (numTree2.get_size( ) == 3) << endl;
    cout << (numTree3.get_size( ) == 3) << endl;

    cout << "Should see 50, 100, 150, each on own line, TWICE: " << endl;
    numTree2.print_inorder();
    cout << endl;
    numTree3.print_inorder();

    cout << "SHOULD be finished!" << endl;

    return EXIT_SUCCESS;
}