#include "pch.h" #include "CppUnitTest.h" using namespace Microsoft::VisualStudio::CppUnitTestFramework; #include "SinglyLinkedList.hpp" #include namespace LinkedListUnitTests { TEST_CLASS(LinkedListUnitTests) { public: //std::list my_list{2, 6}; TEST_METHOD(EmptyList) { //Arrange SinglyLinkedList linkedList{}; //Assert Assert::AreEqual(0ull, linkedList._size); } TEST_METHOD(AppendingLinkedList) { //Arrange SinglyLinkedList linkedList{}; ListNode* node = new ListNode{ 5, nullptr }; //Act bool success = Append(&linkedList, node); //Assert Assert::AreEqual(5,linkedList._head->_data); Assert::AreEqual(1ull, linkedList._size); } TEST_METHOD(PrependingLinkedList) { //Arrange SinglyLinkedList linkedList{}; ListNode* node = new ListNode{ 2, nullptr }; ListNode* node2 = new ListNode{ 1, nullptr }; ListNode* node3 = new ListNode{ 3, nullptr }; //Act bool success = Append(&linkedList, node); success = Prepend(&linkedList, node2); success = Append(&linkedList, node3); ListNode* travel = linkedList._head; //Assert //Assert::AreEqual(2, linkedList._head->_data); //Assert::AreEqual(6, linkedList._head->_next); //Assert::AreEqual(2ull, linkedList._size); Assert::AreEqual(node2->_data, linkedList._head->_data); for (auto i = 1; i <= 3; i++) { Assert::AreEqual(i, travel->_data); travel = travel->_next; } } TEST_METHOD(RemoveFirstLinkedList) { //Arrange SinglyLinkedList linkedList{}; ListNode* node = new ListNode{ 2, nullptr }; ListNode* node2 = new ListNode{ 1, nullptr }; ListNode* node3 = new ListNode{ 3, nullptr }; //Act bool success = Append(&linkedList, node); success = Prepend(&linkedList, node2); success = Append(&linkedList, node3); success = RemoveFirst(&linkedList); ListNode* travel = linkedList._head; //Assert for (auto i = 2; i <= 3; i++) { Assert::AreEqual(i, travel->_data); travel = travel->_next; } } TEST_METHOD(RemoveLastLinkedList) { //Arrange SinglyLinkedList linkedList{}; ListNode* node = new ListNode{ 1, nullptr }; ListNode* node2 = new ListNode{ 2, nullptr }; ListNode* node3 = new ListNode{ 3, nullptr }; ListNode* node4 = new ListNode{ 4, nullptr }; ListNode* node5 = new ListNode{ 5, nullptr }; //Act bool success = Append(&linkedList, node); success = Append(&linkedList, node2); success = Append(&linkedList, node3); success = Append(&linkedList, node4); success = Append(&linkedList, node5); success = RemoveLast(&linkedList); ListNode* travel = linkedList._head; //Assert for (auto i = 1; i <= 4; i++) { Assert::AreEqual(i, travel->_data); travel = travel->_next; } } TEST_METHOD(InsertAfterLinkedList) { //Arrange SinglyLinkedList linkedList{}; ListNode* node = new ListNode{ 1, nullptr }; ListNode* node2 = new ListNode{ 2, nullptr }; ListNode* node3 = new ListNode{ 3, nullptr }; ListNode* node4 = new ListNode{ 4, nullptr }; ListNode* node5 = new ListNode{ 5, nullptr }; ListNode* node6 = new ListNode{ 6, nullptr }; //Act bool success = Append(&linkedList, node); success = Append(&linkedList, node2); success = Append(&linkedList, node3); success = Append(&linkedList, node4); success = Append(&linkedList, node6); success = InsertAfter(&linkedList, node4, node5); ListNode* travel = linkedList._head; //Assert for (auto i = 1; i <= 6; i++) { Assert::AreEqual(i, travel->_data); travel = travel->_next; } } TEST_METHOD(InsertBeforeLinkedList) { //Arrange SinglyLinkedList linkedList{}; ListNode* node = new ListNode{ 1, nullptr }; ListNode* node2 = new ListNode{ 2, nullptr }; ListNode* node3 = new ListNode{ 3, nullptr }; ListNode* node4 = new ListNode{ 4, nullptr }; ListNode* node5 = new ListNode{ 5, nullptr }; ListNode* node6 = new ListNode{ 6, nullptr }; //Act bool success = Append(&linkedList, node); success = Append(&linkedList, node2); success = Append(&linkedList, node3); success = Append(&linkedList, node4); success = Append(&linkedList, node6); success = InsertBefore(&linkedList, node6, node5); ListNode* travel = linkedList._head; //Assert for (auto i = 1; i <= 6; i++) { Assert::AreEqual(i, travel->_data); travel = travel->_next; } } TEST_METHOD(ClearLinkedList) { //Arrange SinglyLinkedList linkedList{}; ListNode* node = new ListNode{ 1, nullptr }; ListNode* node2 = new ListNode{ 2, nullptr }; ListNode* node3 = new ListNode{ 3, nullptr }; ListNode* node4 = new ListNode{ 4, nullptr }; ListNode* node5 = new ListNode{ 5, nullptr }; ListNode* node6 = new ListNode{ 6, nullptr }; //Act bool success = Append(&linkedList, node); success = Append(&linkedList, node2); success = Append(&linkedList, node3); success = Append(&linkedList, node4); success = Append(&linkedList, node6); success = InsertBefore(&linkedList, node6, node5); ListNode* travel = linkedList._head; for (auto i = 1; i <= 6; i++) { Assert::AreEqual(i, travel->_data); travel = travel->_next; } success = Clear(&linkedList); //Assert Assert::AreEqual(0ull, linkedList._size); } TEST_METHOD(ExtractFromLinkedList) { //Arrange SinglyLinkedList linkedList{}; ListNode* node = new ListNode{ 1, nullptr }; ListNode* node2 = new ListNode{ 2, nullptr }; ListNode* node3 = new ListNode{ 3, nullptr }; ListNode* node4 = new ListNode{ 4, nullptr }; ListNode* node5 = new ListNode{ 5, nullptr }; ListNode* node6 = new ListNode{ 6, nullptr }; //Act bool success = Append(&linkedList, node); success = Append(&linkedList, node2); success = Append(&linkedList, node3); success = Append(&linkedList, node4); success = Append(&linkedList, node6); success = InsertBefore(&linkedList, node6, node5); //Assert ListNode* travel = linkedList._head; for (auto i = 1; i <= 6; i++) { Assert::AreEqual(i, travel->_data); travel = travel->_next; } success = ExtractFrom (&linkedList, node4); Assert::AreEqual(5ull, linkedList._size); } }; }