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')
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')
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)
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