def test_delete_head_with_one_element_list(self): singlyLinkedListObject = SinglyLinkedList() singlyLinkedListObject.populate([1]) singlyLinkedListObject.deleteHead() outputList = singlyLinkedListObject.returnLinkedListAsList() self.assertTrue(len(outputList) == 0, "After deleting the only element in the list, Output List must be empty")
def test_populate(self): singlyLinkedListObject = SinglyLinkedList() inputList = range(20) singlyLinkedListObject.populate(inputList) outputList = singlyLinkedListObject.returnLinkedListAsList() self.assertTrue(inputList == outputList, "Input List: %s and Output List: %s don't match" %(inputList, outputList))
def test_append_when_list_is_empty(self): singlyLinkedListObject = SinglyLinkedList() inputVal = 10 singlyLinkedListObject.appendToListUsingTail(inputVal) outputList = singlyLinkedListObject.returnLinkedListAsList() outputVal = outputList[0] self.assertTrue(inputVal == outputVal, "Expected a tail value of: %s, Got: %s" %(inputVal, outputVal))
def test_reverse_an_empty_list(self): givenList = SinglyLinkedList() # Because it's an empty list, no need to populate it s = Solution() outputLinkedList = SinglyLinkedList() s.returnReversedListUsingRecursion(givenList.head, outputLinkedList) inputList = [] expectedList = inputList returnedList = outputLinkedList.returnLinkedListAsList() self.assertTrue(expectedList == returnedList, "Expected: %s, Got: %s" %(expectedList, returnedList))
def test_reverse_an_empty_list(self): originalList = SinglyLinkedList() # Because it's an empty list, no need to populate it s = Solution() s.reverseOriginalList_Iterative(originalList) inputList = [] expectedList = inputList returnedList = originalList.returnLinkedListAsList() self.assertTrue(expectedList == returnedList, "Expected: %s, Got: %s" %(expectedList, returnedList))
def test_add_without_carry_basic_case_both_lists_empty(self): firstList = SinglyLinkedList() secondList = SinglyLinkedList() outputList = SinglyLinkedList() s = Solution(firstList, secondList, outputList) s.addTwoNonReversedIntegersAsLinkedListsAndCreateNewList() outputValue = outputList.returnLinkedListAsList() expectedValue = [] self.assertTrue(outputValue == expectedValue, "Expected: %s, Got: %s" %(expectedValue, outputValue))
def test_reverse_a_list_with_two_elements(self): originalList = SinglyLinkedList() inputList = [10, 20] originalList.populate(inputList) s = Solution() s.reverseOriginalLinkedList_Recursive(originalList) expectedList = inputList[::-1] returnedList = originalList.returnLinkedListAsList() self.assertTrue(expectedList == returnedList, "Expected: %s, Got: %s" %(expectedList, returnedList))
def test_reverse_a_list_with_many_elements(self): originalList = SinglyLinkedList() inputList = range(10,101,10) originalList.populate(inputList) s = Solution() s.reverseOriginalList_Iterative(originalList) expectedList = inputList[::-1] returnedList = originalList.returnLinkedListAsList() self.assertTrue(expectedList == returnedList, "Expected: %s, Got: %s" %(expectedList, returnedList))
def test_append_when_list_has_at_least_one_element(self): singlyLinkedListObject = SinglyLinkedList() inputList = range(10) singlyLinkedListObject.populate(inputList) inputVal = 10 singlyLinkedListObject.appendToListUsingTail(inputVal) self.assertTrue(singlyLinkedListObject.tail.data == inputVal, "Expected Tail data: %s, Got: %s" %(inputVal, singlyLinkedListObject.tail.data)) outputList = singlyLinkedListObject.returnLinkedListAsList() outputVal = outputList[-1] self.assertTrue(inputVal == outputVal, "Expected tail value: %s, Got: %s" %(inputVal, outputVal))
def test_add_without_carry_basic_case_both_lists_empty(self): firstList = SinglyLinkedList() secondList = SinglyLinkedList() outputList = SinglyLinkedList() s = Solution(firstList, secondList, outputList) s.addTwoNonReversedIntegersAsLinkedListsAndCreateNewList() outputValue = outputList.returnLinkedListAsList() expectedValue = [] self.assertTrue(outputValue == expectedValue, "Expected: %s, Got: %s" % (expectedValue, outputValue))
def test_delete_head_from_a_list_with_more_than_two_elements(self): singlyLinkedListObject = SinglyLinkedList() inputList = range(20) singlyLinkedListObject.populate(inputList) # Deleting the first element from the inputList. this will help in assertion inputList.pop(0) singlyLinkedListObject.deleteHead() outputList = singlyLinkedListObject.returnLinkedListAsList() self.assertTrue(inputList == outputList, "Expecting one lesser value in the Output List but got different. Expected: %s, Got: %s" %(inputList, outputList)) self.assertTrue(singlyLinkedListObject.head != singlyLinkedListObject.tail, "Tail and Head must NOT be the same after only 1 element remains in the list")
def test_reverse_a_list_with_many_elements(self): givenList = SinglyLinkedList() inputList = range(10,101,10) givenList.populate(inputList) s = Solution() outputLinkedList = SinglyLinkedList() s.returnReversedListUsingRecursion(givenList.head, outputLinkedList) expectedList = inputList[::-1] returnedList = outputLinkedList.returnLinkedListAsList() self.assertTrue(expectedList == returnedList, "Expected: %s, Got: %s" %(expectedList, returnedList))
def test_add_without_left_over_carry_both_lists_have_unequal_items(self): firstList = SinglyLinkedList() secondList = SinglyLinkedList() outputList = SinglyLinkedList() firstList.populate([7,1,6,9]) secondList.populate([5,9,2]) s = Solution(firstList, secondList, outputList) s.addTwoNonReversedIntegersAsLinkedListsAndCreateNewList() outputValue = outputList.returnLinkedListAsList() expectedValue = [7,7,6,1] self.assertTrue(outputValue == expectedValue, "Expected: %s, Got: %s" %(expectedValue, outputValue))
def test_add_with_carry_forever_carry_till_last(self): firstList = SinglyLinkedList() secondList = SinglyLinkedList() outputList = SinglyLinkedList() firstList.populate([9,9,9,9,9,9,9]) secondList.populate([1]) s = Solution(firstList, secondList, outputList) s.addTwoNonReversedIntegersAsLinkedListsAndCreateNewList() outputValue = outputList.returnLinkedListAsList() expectedValue = [1, 0, 0, 0, 0, 0, 0, 0] self.assertTrue(outputValue == expectedValue, "Expected: %s, Got: %s" %(expectedValue, outputValue))
def test_add_without_carry_basic_case_first_list_empty_second_list_has_one_element(self): firstList = SinglyLinkedList() secondList = SinglyLinkedList() outputList = SinglyLinkedList() inputValue = [1] secondList.populate(inputValue) s = Solution(firstList, secondList, outputList) s.addTwoNonReversedIntegersAsLinkedListsAndCreateNewList() outputValue = outputList.returnLinkedListAsList() expectedValue = inputValue self.assertTrue(outputValue == expectedValue, "Expected: %s, Got: %s" %(expectedValue, outputValue))
def test_add_with_carry_forever_carry_till_last(self): firstList = SinglyLinkedList() secondList = SinglyLinkedList() outputList = SinglyLinkedList() firstList.populate([9, 9, 9, 9, 9, 9, 9]) secondList.populate([1]) s = Solution(firstList, secondList, outputList) s.addTwoNonReversedIntegersAsLinkedListsAndCreateNewList() outputValue = outputList.returnLinkedListAsList() expectedValue = [1, 0, 0, 0, 0, 0, 0, 0] self.assertTrue(outputValue == expectedValue, "Expected: %s, Got: %s" % (expectedValue, outputValue))
def test_without_carry_best_case_equal_elements_three_in_length(self): firstList = SinglyLinkedList() secondList = SinglyLinkedList() outputList = SinglyLinkedList() firstList.populate([1, 1, 8]) secondList.populate([4, 3, 1]) s = Solution(firstList, secondList, outputList) s.addTwoNonReversedIntegersAsLinkedListsAndCreateNewList() outputValue = outputList.returnLinkedListAsList() expectedValue = [5, 4, 9] self.assertTrue(outputValue == expectedValue, "Expected: %s, Got: %s" %(expectedValue, outputValue))
def test_add_without_left_over_carry_both_lists_have_unequal_items(self): firstList = SinglyLinkedList() secondList = SinglyLinkedList() outputList = SinglyLinkedList() firstList.populate([7, 1, 6, 9]) secondList.populate([5, 9, 2]) s = Solution(firstList, secondList, outputList) s.addTwoNonReversedIntegersAsLinkedListsAndCreateNewList() outputValue = outputList.returnLinkedListAsList() expectedValue = [7, 7, 6, 1] self.assertTrue(outputValue == expectedValue, "Expected: %s, Got: %s" % (expectedValue, outputValue))
def test_without_carry_best_case_equal_elements_three_in_length(self): firstList = SinglyLinkedList() secondList = SinglyLinkedList() outputList = SinglyLinkedList() firstList.populate([1, 1, 8]) secondList.populate([4, 3, 1]) s = Solution(firstList, secondList, outputList) s.addTwoNonReversedIntegersAsLinkedListsAndCreateNewList() outputValue = outputList.returnLinkedListAsList() expectedValue = [5, 4, 9] self.assertTrue(outputValue == expectedValue, "Expected: %s, Got: %s" % (expectedValue, outputValue))
def test_add_without_carry_basic_case_first_list_empty_second_list_has_one_element( self): firstList = SinglyLinkedList() secondList = SinglyLinkedList() outputList = SinglyLinkedList() inputValue = [1] secondList.populate(inputValue) s = Solution(firstList, secondList, outputList) s.addTwoNonReversedIntegersAsLinkedListsAndCreateNewList() outputValue = outputList.returnLinkedListAsList() expectedValue = inputValue self.assertTrue(outputValue == expectedValue, "Expected: %s, Got: %s" % (expectedValue, outputValue))
def test_delete_head_on_empty_list(self): singlyLinkedListObject = SinglyLinkedList() self.assertTrue(singlyLinkedListObject.deleteHead(), "With no elements in the list, it should return True") outputList = singlyLinkedListObject.returnLinkedListAsList() self.assertTrue(len(outputList) == 0, "Output list from an Empty Linked List must be empty")