// For testing (DO NOT ALTER) void UnitTest() { string temp = "This unit test will test some of your code:\n"; cout << temp << "There are 59 tests.\n" << string(temp.length() - 1, '-') << endl; // Tests cout << "******BSTNodeT<int>******" << endl; BSTNodeT<int> inode1; BSTNodeT<int> inode2(99); BSTNodeT<int> inode3(-1); Test(inode1.GetContents() == 0, "Default Constructor / GetContents()"); Test(inode1.GetLeft() == NULL, "Default Constructor / GetLeft()"); Test(inode1.GetRight() == NULL, "Default Constructor / GetRight()"); Test(inode2.GetContents() == 99, "Constructor(99) / GetContents()"); Test(inode2.GetLeft() == NULL, "Constructor(99) / GetLeft()"); Test(inode2.GetRight() == NULL, "Constructor(99) / GetRight()"); // node 2 is leftChild, node 3 is rightChild inode1.SetLeft(&inode2); Test(inode1.GetLeft() == &inode2, "SetLeft() / GetLeft()"); inode1.SetRight(&inode3); Test(inode1.GetRight() == &inode3, "SetRight() / GetRight()"); cout << "******BSTNodeT<char>******" << endl; BSTNodeT<char> cnode1; BSTNodeT<char> cnode2('A'); BSTNodeT<char> cnode3('a'); Test(cnode1.GetContents() == '\0', "Default Constructor / GetContents()"); Test(cnode1.GetLeft() == NULL, "Default Constructor / GetLeft()"); Test(cnode1.GetRight() == NULL, "Default Constructor / GetRight()"); Test(cnode2.GetContents() == 'A', "Constructor('A') / GetContents()"); Test(cnode2.GetLeft() == NULL, "Constructor('A') / GetLeft()"); Test(cnode2.GetRight() == NULL, "Constructor('A') / GetRight()"); // node 2 is leftChild, node 3 is rightChild cnode1.SetLeft(&cnode2); Test(cnode1.GetLeft() == &cnode2, "SetLeft() / GetLeft()"); cnode1.SetRight(&cnode3); Test(cnode1.GetRight() == &cnode3, "SetRight() / GetRight()"); cout << "******BSTNodeT<string>******" << endl; BSTNodeT<string> snode1; BSTNodeT<string> snode2("Hello"); BSTNodeT<string> snode3("Goodbye"); Test(snode1.GetContents() == "", "Default Constructor / GetContents()"); Test(snode1.GetLeft() == NULL, "Default Constructor / GetLeft()"); Test(snode1.GetRight() == NULL, "Default Constructor / GetRight()"); Test(snode2.GetContents() == "Hello", "Constructor(\"Hello\") / GetContents()"); Test(snode2.GetLeft() == NULL, "Constructor(\"Hello\") / GetLeft()"); Test(snode2.GetRight() == NULL, "Constructor(\"Hello\") / GetRight()"); // node 2 is leftChild, node 3 is rightChild snode1.SetLeft(&snode2); Test(snode1.GetLeft() == &snode2, "SetLeft() / GetLeft()"); snode1.SetRight(&snode3); Test(snode1.GetRight() == &snode3, "SetRight() / GetRight()"); cout << "******BSTreeT<int>******" << endl; // Setup the BST BSTreeT<int> tree; BSTNodeT<int> *tree_pointer; string actual = ""; Test(tree.GetSize() == 0, "Default Constructor / GetSize()"); Test(tree.ToStringForwards() == actual, "ToStringForwards()", tree.ToStringForwards(), actual); Test(tree.ToStringBackwards() == actual, "ToStringBackwards()", tree.ToStringBackwards(), actual); Test(tree.Insert(50) == 1, "Insert(50)"); Test(tree.GetSize() == 1, "GetSize()"); actual = "50"; Test(tree.ToStringForwards() == actual, "ToStringForwards()", tree.ToStringForwards(), actual); Test(tree.ToStringBackwards() == actual, "ToStringBackwards()", tree.ToStringBackwards(), actual); Test(tree.Insert(20) == 1, "Insert(20)"); Test(tree.GetSize() == 2, "GetSize()"); actual = "20, 50"; Test(tree.ToStringForwards() == actual, "ToStringForwards()", tree.ToStringForwards(), actual); actual = "50, 20"; Test(tree.ToStringBackwards() == actual, "ToStringBackwards()", tree.ToStringBackwards(), actual); Test(tree.Insert(80) == 1, "Insert(80)"); Test(tree.GetSize() == 3, "GetSize()"); actual = "20, 50, 80"; Test(tree.ToStringForwards() == actual, "ToStringForwards()", tree.ToStringForwards(), actual); actual = "80, 50, 20"; Test(tree.ToStringBackwards() == actual, "ToStringBackwards()", tree.ToStringBackwards(), actual); Test(tree.Insert(80) == 1, "Insert(80)"); Test(tree.GetSize() == 3, "GetSize()"); actual = "20, 50, 80"; Test(tree.ToStringForwards() == actual, "ToStringForwards()", tree.ToStringForwards(), actual); actual = "80, 50, 20"; Test(tree.ToStringBackwards() == actual, "ToStringBackwards()", tree.ToStringBackwards(), actual); Test(tree.Exists(50) == true, "Exists(50)"); Test(tree.Exists(0) == false, "Exists(0)"); //tree_pointer = tree.Get(50); //Test(tree_pointer->GetContents() == 50, "Get(50)"); //tree_pointer = tree.Get(0); //Test(tree_pointer == NULL, "Get(0)"); Test(tree.Remove(80) == 1, "Remove(80)"); Test(tree.GetSize() == 3, "GetSize()"); actual = "20, 50, 80"; Test(tree.ToStringForwards() == actual, "ToStringForwards()", tree.ToStringForwards(), actual); actual = "80, 50, 20"; Test(tree.ToStringBackwards() == actual, "ToStringBackwards()", tree.ToStringBackwards(), actual); Test(tree.Remove(80) == 0, "Remove(80)"); Test(tree.GetSize() == 2, "GetSize()"); actual = "20, 50"; Test(tree.ToStringForwards() == actual, "ToStringForwards()", tree.ToStringForwards(), actual); actual = "50, 20"; Test(tree.ToStringBackwards() == actual, "ToStringBackwards()", tree.ToStringBackwards(), actual); Test(tree.Remove(80) == -1, "Remove(80)"); tree.Clear(); Test(tree.GetSize() == 0, "Clear() / GetSize()"); actual = ""; Test(tree.ToStringForwards() == actual, "ToStringForwards()", tree.ToStringForwards(), actual); Test(tree.ToStringBackwards() == actual, "ToStringBackwards()", tree.ToStringBackwards(), actual); cout << string(temp.length() - 1, '-') << endl; cout << "Unit Test Complete!\n" << "Passed: " << ut_passed << " / " << ut_total << endl << "Failed: " << ut_failed << " / " << ut_total << endl << endl; }
int main() { string filename; string read_in; cout << "Specify the filename to read in." << endl; cin >> filename; filename = filename + ".txt"; // Initialize and open InputFile ifstream InputFile; InputFile.open(filename.c_str()); BSTreeT<string>* tree; if(InputFile.is_open()) { while(!InputFile.eof()) { char read = InputFile.get(); if (read == 35){ getline(InputFile, read_in); //do nothing } else if(read == 'C' || read == 'c') { cout << "Creating new Tree!" << endl; tree = new BSTreeT<string>; cout << " Tree Created, New Size = " << tree->GetSize() << endl; } else if(read == 'X' || read == 'x') { tree->Clear(); cout << "Cleared ALL Trees!" << endl; } else if(read == 'D' || read == 'd') { cout << "Deleting ALL Trees...." << endl; tree->~BSTreeT(); if(tree->GetSize() != 0) { cout << " Deletion was unsuccessful!\n Size returned as: " << tree->GetSize() << ".\n Expected ZERO(0)" << endl; } else { cout << " Deletion Success!\n Size returned as: 0" << endl; } } else if(read == 'I' || read == 'i') { cout << "Inserting into trees!" << endl; getline(InputFile, read_in); cout << "Inserting: " << read_in << endl; tree->Insert(read_in); cout << " Insertion Completed!\n Size returned as: " << tree->GetSize() << endl; } else if(read == 'F' || read == 'f') { cout << "Searching for input!" << endl; getline(InputFile, read_in); cout << "Searching for: " << read_in << endl; if(tree->Exists(read_in)) { cout << " Search Term was found in the Tree!" << endl; } else { cout << " Search term was NOT found!" << endl; }; } else if(read == 'R' || read == 'r') { cout << "Removing input from tree!" << endl; getline(InputFile, read_in); if(tree->Exists(read_in)) { tree->Remove(read_in); cout << " Deletion was successful!\n Size returned as: " << tree->GetSize() << endl; } else { cout << " Deletion was unsuccessful!\n " << read_in << " was not found." << endl; } } else if(read == 'G' || read == 'g') { getline(InputFile, read_in); cout << "Retrieving: " << read_in << endl; if(tree->Exists(read_in)) { cout << " Successfully retrieved " << read_in << endl; } else { cout << " Unsuccessful." << endl; } } else if(read == 'N' || read == 'n') { cout << "Retrieving current Node count in tree!" << endl; cout << " " << tree->GetSize() << endl; } else if(read == 'O' || read == 'o') { cout << "Reading out tree FORWARDS!" << endl; if(tree->GetSize() == 0) { cout<< " TREE EMPTY!!" << endl; } else { cout << " " << tree->ToStringForwards() << endl; } } else if(read == 'E' || read == 'e') { cout << "Reading out tree BACKWARDS!" << endl; if(tree->GetSize() == 0) { cout<< " TREE EMPTY!!" << endl; } else { cout << " " << tree->ToStringBackwards() << endl; } } else { } } } InputFile.close(); }