Example #1
0
    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")
Example #2
0
    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))
Example #3
0
    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))
Example #9
0
    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))
Example #10
0
    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))
Example #11
0
    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))
Example #16
0
    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))
Example #18
0
    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))
Example #19
0
    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))
Example #20
0
    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))
Example #21
0
 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")