class DoubleLinkedListTest_reverse_list(unittest.TestCase):
    def setUp(self):
        my_list = [1, 2, 3]     
        self.dll = DoubleLinkedList()
        self.dll.add_list(my_list)


    def test_reverse_list(self):
        self.dll.reverse_list()
        self.assertEqual(self.dll.print(), 'HEAD >> 3 -> 2 -> 1 ->  TAIL')
        self.assertEqual(self.dll.print_reverse(), 'TAIL >> 1 -> 2 -> 3 ->  HEAD')
Beispiel #2
0
class DoubleLinkedListTests_add_list(unittest.TestCase):
    def setUp(self):
        self.dll = DoubleLinkedList()

    def test_add_list(self):
        # test_list
        list_vals = [1, 2, 3]

        self.dll.add_list(list_vals)
        self.assertEqual(self.dll.head.value, 1)
        self.assertEqual(self.dll.head.next.value, 2)
        self.assertEqual(self.dll.head.next.next.value, 3)
class DoubleLinkedListTest_remove_by_value_2(unittest.TestCase):

    def setUp(self):
        self.dll = DoubleLinkedList()
        self.all = DoubleLinkedList()
        self.repeat = DoubleLinkedList()

        all_val = [1, 1, 1, 1]
        self.all.add_list(all_val)
        
        
        repeat_val = [1, 1, 2, 5, 6, 1, 1, 1, 3, 1, 4, 9, 1, 1, 1]
        self.repeat.add_list(repeat_val)

    # list is empty
    def test_remove_empty(self):
        self.dll.remove_by_value_2(1)
        self.assertEqual(self.dll.print(), 'HEAD >>  TAIL')


    # list contains all values to be removed
    def test_remove_all(self):
        self.all.remove_by_value_2(1)
        self.assertEqual(self.all.print(), 'HEAD >>  TAIL')
            
    # list has multiple values at start, middle, and end
    def test_remove_all_2_repeat(self):
        self.repeat.remove_by_value_2(1)
        self.assertEqual(self.repeat.print(), 'HEAD >> 2 -> 5 -> 6 -> 3 -> 4 -> 9 ->  TAIL')
        self.assertEqual(self.repeat.print_reverse(), 'TAIL >> 9 -> 4 -> 3 -> 6 -> 5 -> 2 ->  HEAD')

    # list does not contain remove value
    def test_remove_not_found(self):
        self.repeat.remove_by_value_2(1)
        self.assertEqual(self.repeat.print(), 'HEAD >> 2 -> 5 -> 6 -> 3 -> 4 -> 9 ->  TAIL')    
        self.assertEqual(self.repeat.print_reverse(), 'TAIL >> 9 -> 4 -> 3 -> 6 -> 5 -> 2 ->  HEAD')
Beispiel #4
0
class DoubleLinkedListTest_remove_by_index(unittest.TestCase):

    ######################################
    # Remove index 0      first
    def setUp(self):
        my_list = [1, 2, 3]

        self.dll = DoubleLinkedList()
        self.dll.add_list(my_list)

    def test_remove_by_index_0(self):
        self.dll.remove_by_index(0)
        self.assertEqual(self.dll.print(), 'HEAD >> 2 -> 3 ->  TAIL')
        self.assertEqual(self.dll.print_reverse(), 'TAIL >> 3 -> 2 ->  HEAD')

    def tearDown(self):
        self.dll = None

    ######################################
    # remove index 1      node inside list
    def setUp(self):
        my_list = [
            1,
            2,
            3,
        ]

        self.dll = DoubleLinkedList()
        self.dll.add_list(my_list)

    def test_remove_by_index_inside(self):
        self.dll.remove_by_index(1)
        self.assertEqual(self.dll.print(), 'HEAD >> 1 -> 3 ->  TAIL')
        self.assertEqual(self.dll.print_reverse(), 'TAIL >> 3 -> 1 ->  HEAD')

    def tearDown(self):
        self.dll = None

    ######################################
    # remove index 2      last node
    def setUp(self):
        my_list = [1, 2, 3]

        self.dll = DoubleLinkedList()
        self.dll.add_list(my_list)

    def test_remove_by_index_last(self):
        self.dll.remove_by_index(2)
        self.assertEqual(self.dll.print(), 'HEAD >> 1 -> 2 ->  TAIL')
        self.assertEqual(self.dll.print_reverse(), 'TAIL >> 2 -> 1 ->  HEAD')
class DoubleLinkedListTest_remove_by_value(unittest.TestCase):
    ###############################################################
    #################   all values removed, empty list returned
    def setUp(self):
        not_found = [2, 3, 4]
        self.dll_1 = DoubleLinkedList()
        self.dll_1.add_list(not_found)

        repeat_list = [1, 1, 1, 1, 2, 1, 1, 3, 1, 1, 1, 4, 1, 1, 1]
        self.dll_2 = DoubleLinkedList()
        self.dll_2.add_list(repeat_list)

        all_removed = [1, 1, 1, 1]
        self.dll_3 = DoubleLinkedList()
        self.dll_3.add_list(all_removed)

    def test_remove_by_value_not_found(self):
        self.dll_1.remove_by_value(1)
        self.assertEqual(self.dll_1.get_length(), 3)

    ###############################################################
    #################   all values removed, empty list returned

    def test_remove_by_value_repeat(self):
        self.dll_2.remove_by_value(1)
        # self.assertEqual(self.dll.get_length(), 3)
        self.assertEqual(self.dll_2.print(), 'HEAD >> 2 -> 3 -> 4 ->  TAIL')
        self.assertEqual(self.dll_2.print_reverse(),
                         'TAIL >> 4 -> 3 -> 2 ->  HEAD')

    ###############################################################
    #################   all values removed, empty list returned

    def test_remove_by_value_all(self):
        self.dll_3.remove_by_value(1)
        self.assertEqual(self.dll_3.get_length(), 0)
Beispiel #6
0
class DoubleLinkedListTest_circular(unittest.TestCase):

    #########################################################
    ##################  verify prev & next pointers in Circular Double Linked List
    def setUp(self):

        my_list = [1, 2, 3]
        self.dll = DoubleLinkedList()
        # self.dll_2 = DoubleLinkedList()
        # self.dll_3 = DoubleLinkedList()

        self.dll.add_list(my_list)
        # self.dll_2.add_list(my_list)
        # self.dll_3.add_list(my_list)

    def test_create_circular(self):
        self.dll.convert_to_circular()
        self.assertEqual(self.dll.detect_circular(), True)
        self.assertEqual(self.dll.print_circular(),
                         '==> HEAD >> 1 -> 2 -> 3 ->  TAIL ===> 1')
        self.assertEqual(self.dll.print_circular_reverse(),
                         'LAST >> 3 => 2 => 1 =>  HEAD ===> 3')

    def tearDown(self):
        self.dll = None

    #########################################################
    ##################  add value to front
    def setUp(self):
        my_list = [1, 2, 3]

        self.dll = DoubleLinkedList()
        self.dll.add_list(my_list)

    def test_add_to_front_circular(self):
        self.dll.convert_to_circular()
        self.dll.add_value_to_front_circular(100)
        self.assertEqual(self.dll.print_circular(),
                         '==> HEAD >> 100 -> 1 -> 2 -> 3 ->  TAIL ===> 100')
        self.assertEqual(self.dll.print_circular_reverse(),
                         'LAST >> 3 => 2 => 1 => 100 =>  HEAD ===> 3')

    def tearDown(self):
        self.dll = None

    #########################################################
    ##################  add value to tail
    def setUp(self):
        my_list = [1, 2, 3]

        self.dll = DoubleLinkedList()
        self.dll.add_list(my_list)

    def test_add_value_to_end_circular(self):
        self.dll.convert_to_circular()
        self.dll.add_value_to_last_circular(999)
        self.assertEqual(self.dll.print_circular(),
                         '==> HEAD >> 1 -> 2 -> 3 -> 999 ->  TAIL ===> 1')
        self.assertEqual(self.dll.print_circular_reverse(),
                         'LAST >> 999 => 3 => 2 => 1 =>  HEAD ===> 999')

    def tearDown(self):
        self.dll = None
class DoubleLinkedListTest_remove_nth_from_end(unittest.TestCase):
    ########################################################################
    #############      remove 0th from end, remove value outside of index range, 1st from end

    def setUp(self):
        my_list = [4, 3, 2, 1]

        self.dll = DoubleLinkedList()
        self.dll.add_list(my_list)

    def test_remove_0th_from_end(self):
        self.dll.remove_nth_from_end(0)
        self.assertEqual(self.dll.print(), 'HEAD >> 4 -> 3 -> 2 -> 1 ->  TAIL')

    def test_remove_100th_from_end(self):
        self.dll.remove_nth_from_end(100)
        self.assertEqual(self.dll.print(), 'HEAD >> 4 -> 3 -> 2 -> 1 ->  TAIL')

    def test_remove_1st_from_end(self):
        self.dll.remove_nth_from_end(1)
        self.assertEqual(self.dll.print(), 'HEAD >> 4 -> 3 -> 2 ->  TAIL')
        self.assertEqual(self.dll.print_reverse(),
                         'TAIL >> 2 -> 3 -> 4 ->  HEAD')

    def tearDown(self):
        self.dll = None

########################################################################
#############      remove from inside  2nd from end

    def setUp(self):
        my_list = [4, 3, 2, 1]
        self.dll = DoubleLinkedList()
        self.dll.add_list(my_list)

    def remove_2nd_from_end(self):
        self.dll.remove_nth_from_end(2)
        self.assertEqual(self.dll.print(), 'HEAD >> 4 -> 3 -> 1 ->  TAIL')
        self.assertEqual(self.dll.print_reverse(),
                         'TAIL >> 1 -> 3 -> 4 ->  HEAD')

    def tearDown(self):
        self.dll = None

########################################################################
#############      remove from inside 3rd from end

    def setUp(self):
        my_list = [4, 3, 2, 1]
        self.dll = DoubleLinkedList()
        self.dll.add_list(my_list)

    def test_remove_3rd_from_end(self):
        self.dll.remove_nth_from_end(3)
        self.assertEqual(self.dll.print(), 'HEAD >> 4 -> 2 -> 1 ->  TAIL')
        self.assertEqual(self.dll.print_reverse(),
                         'TAIL >> 1 -> 2 -> 4 ->  HEAD')

    def tearDown(self):
        self.dll = None


########################################################################
#############      remove from inside 4th from end

    def setUp(self):
        my_list = [4, 3, 2, 1]
        self.dll = DoubleLinkedList()
        self.dll.add_list(my_list)

    def test_remove_4th_from_end(self):
        self.dll.remove_nth_from_end(4)
        self.assertEqual(self.dll.print(), 'HEAD >> 3 -> 2 -> 1 ->  TAIL')
        self.assertEqual(self.dll.print_reverse(),
                         'TAIL >> 1 -> 2 -> 3 ->  HEAD')

    def tearDown(self):
        self.dll = None