void TestAppend(DoubleLinkedList<int> & alist) { std::cout << "\n********** Append **********" << std::endl; alist.Append(5); alist.Append(15); alist.Append(25); alist.Append(35); }
void TestAppend(DoubleLinkedList<int> & alist) { std::cout << "\n********** Testing: DoubleLinkedList Append **********" << std::endl; alist.Append(5); alist.Append(15); alist.Append(25); alist.Append(35); std::cout << alist.First() << std::endl; std::cout << alist.Last() << std::endl; }
void TestExtract() { DoubleLinkedList<int> alist; std::cout << "\n********** Extract **********" << std::endl; // Empty List try { alist.Extract(0); } catch (char * msg) { std::cout << msg << std::endl; } // Head and Tail are the same alist.Append(0); alist.Extract(0); try { std::cout << alist.First() << std::endl; } catch (char * msg) { std::cout << msg << std::endl; } try { std::cout << alist.Last() << std::endl; } catch (char * msg) { std::cout << msg << std::endl; } // Remove Head alist.Append(0); alist.Append(1); alist.Extract(0); std::cout << alist.First() << std::endl; std::cout << alist.Last() << std::endl; // Remove Tail alist.Prepend(0); alist.Extract(1); std::cout << alist.First() << std::endl; std::cout << alist.Last() << std::endl; }
int main() { #if _DEBUG _CrtDumpMemoryLeaks(); _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); #endif DoubleLinkedList dll; for (int i = 0; i < numberOfElements; i++) { dll.Append(i); } std::cout << "Current list: "; std::cout << dll.ToString() << std::endl << std::endl; std::cout << "Removing the last 3 elements" << std::endl; for (int i = 0; i < 3; i++) { dll.RemoveLast(); } std::cout << dll.ToString() << std::endl << std::endl; std::cout << "Adding 3 100's as the first element" << std::endl; for (int i = 0; i < 3; i++) { dll.AddAtFirst(100); } std::cout << dll.ToString() << std::endl << std::endl; std::cout << "Removing first element" << std::endl; dll.RemoveFirst(); std::cout << dll.ToString() << std::endl << std::endl; std::cout << "Removing at index (1) 3 times" << std::endl; for (int i = 0; i < 3; i++) { dll.RemoveAt(1); } std::cout << dll.ToString() << std::endl << std::endl; std::cout << "Adding a -500 at indices 0, 5, (length - 1), and 9999 (should be skipped and not crash)" << std::endl; dll.InsertAt(0, -500); dll.InsertAt(5, -500); dll.InsertAt(dll.CurrentCapacity() - 1, -500); dll.InsertAt(9999, -500); std::cout << dll.ToString() << std::endl << std::endl; std::cout << "Removing first instances of numbers -500, 15, and 999999" << std::endl; dll.RemoveFirstInstanceOf(-500); dll.RemoveFirstInstanceOf(15); dll.RemoveFirstInstanceOf(999999); std::cout << dll.ToString() << std::endl << std::endl; std::cout << "Printing the list backwards" << std::endl; std::cout << dll.BackwardsToString() << std::endl << std::endl; HoldPromptOpen(); }
void TestInsertAfter() { DoubleLinkedList<int> clist; std::cout << "\n********** Testing: DoubleLinkedList InsertAfter **********" << std::endl; std::cout << "\n********** Testing: InsertAfter with Empty List **********" << std::endl; try { //Note: Here is the function signature so you can determine the order of parameters //void DoubleLinkedList<T>::InsertAfter(const T & new_data, const T & existing_data) clist.InsertAfter(-1, 0); } catch(const char * msg) { std::cout << msg << std::endl; } std::cout << "\n********** Testing: InsertAfter tail with only one node **********" << std::endl; clist.Append(0); clist.InsertAfter(1, 0); std::cout << clist.First() << std::endl; std::cout << clist.Last() << std::endl; std::cout << "\n********** Testing: InsertAfter tail with multiple nodes **********" << std::endl; clist.InsertAfter(3, 1); std::cout << clist.First() << std::endl; std::cout << clist.Last() << std::endl; std::cout << "\n********** Testing: InsertAfter a node in the middle of the list **********" << std::endl; clist.InsertAfter(2, 1); std::cout << clist.First() << std::endl; std::cout << clist.Last() << std::endl; std::cout << "\n********** Testing: InsertAfter but existing_data doesn't exist **********" << std::endl; try { clist.InsertAfter(-2, 99); } catch (const char * msg) { std::cout << msg << std::endl; } }
void TestInsertBefore() { DoubleLinkedList<int> clist; std::cout << "\n********** InsertBefore **********" << std::endl; // Empty List try { clist.InsertBefore(-1, 0); } catch (char * msg) { std::cout << msg << std::endl; } // Head and Tail are the same clist.Append(0); clist.InsertBefore(-1, 0); std::cout << clist.First() << std::endl; std::cout << clist.Last() << std::endl; // Before Head clist.InsertBefore(-3, -1); std::cout << clist.First() << std::endl; std::cout << clist.Last() << std::endl; // Middle clist.InsertBefore(-2, -1); std::cout << clist.First() << std::endl; std::cout << clist.Last() << std::endl; // Node doesn't exist try { clist.InsertBefore(-2, 99); } catch (char * msg) { std::cout << msg << std::endl; } }
void TestInsertAfter() { DoubleLinkedList<int> clist; std::cout << "\n********** InsertAfter **********" << std::endl; try { clist.InsertAfter(-1, 0); } catch (char * msg) { std::cout << msg << std::endl; } // Head and Tail are the same clist.Append(0); clist.InsertAfter(1, 0); std::cout << clist.First() << std::endl; std::cout << clist.Last() << std::endl; // After Tail clist.InsertAfter(3, 1); std::cout << clist.First() << std::endl; std::cout << clist.Last() << std::endl; // Middle clist.InsertAfter(2, 1); std::cout << clist.First() << std::endl; std::cout << clist.Last() << std::endl; // Node doesn't exist try { clist.InsertAfter(-2, 99); } catch (char * msg) { std::cout << msg << std::endl; } }
void TestExtract() { DoubleLinkedList<int> alist; std::cout << "\n********** Testing: DoubleLinkedList Extract **********" << std::endl; std::cout << "\n********** Testing: Extract with empty list**********" << std::endl; try { //Note: The parameter is the DATA to be removed alist.Extract(0); } catch (const char * msg) { std::cout << msg << std::endl; } std::cout << "\n********** Testing: Extract removing only node **********" << std::endl; alist.Append(0); alist.Extract(0); try { std::cout << alist.First() << std::endl; } catch (const char * msg) { std::cout << msg << std::endl; } try { std::cout << alist.Last() << std::endl; } catch (const char * msg) { std::cout << msg << std::endl; } std::cout << "\n********** Testing: Extract removing head **********" << std::endl; alist.Append(0); alist.Append(1); alist.Extract(0); std::cout << alist.First() << std::endl; std::cout << alist.Last() << std::endl; std::cout << "\n********** Testing: Extract removing tail **********" << std::endl; alist.Prepend(0); alist.Extract(1); std::cout << alist.First() << std::endl; std::cout << alist.Last() << std::endl; std::cout << "\n********** Testing: Extract removing non-existing node **********" << std::endl; alist.Append(0); alist.Append(1); try { alist.Extract(99); } catch (const char * msg) { std::cout << msg << std::endl; } }