def test_delete_from_list_in_the_middle(self): test_name = self.test_delete_from_list_in_the_middle.__name__ n1 = Node(12) n2 = Node(144) n3 = Node(55) test_list = LinkedList2() test_list.add_in_tail(n1) test_list.add_in_tail(n2) test_list.add_in_tail(n3) self.assertEqual(test_list.head, n1, "n1 should be head") self.assertEqual(test_list.tail, n3, "n3 should be tail")
def test_delete_from_list_in_the_beginning(self): n1 = Node(12) n2 = Node(144) n3 = Node(55) test_list = LinkedList2() test_list.add_in_tail(n1) test_list.add_in_tail(n2) test_list.add_in_tail(n3) test_list.delete(12) self.assertEqual(n2.next, n3, "n3 should be followed by n1") self.assertEqual(test_list.head, n2, "n1 should be head") self.assertEqual(test_list.tail, n3, "n3 should be tail")
def test_delete_something_not_in_the_list(self): n1 = Node(12) n2 = Node(144) n3 = Node(55) test_list = LinkedList2() test_list.add_in_tail(n1) test_list.add_in_tail(n2) test_list.add_in_tail(n3) test_list.delete(123) self.assertEqual(n1.next, n2, "n2 should be followed by n1") self.assertEqual(n2.next, n3, "n2 should be followed by n1") self.assertEqual(test_list.head, n1, "n1 should be head") self.assertEqual(test_list.tail, n3, "n3 should be tail")
def test_insert_in_the_end_next(self): n1 = Node(12) n2 = Node(1) n3 = Node(123) n4 = Node(4) test_list = LinkedList2() test_list.add_in_tail(n1) test_list.add_in_tail(n2) test_list.add_in_tail(n3) test_list.insert(n3, n4) self.assertEqual(n3.next, n4, "n4 next is n3") self.assertEqual(n4.prev, n3, "n4 prev is n2") self.assertEqual(n4, test_list.tail, "Tail should equal n4") self.assertEqual(n1, test_list.head, "n4 should be before n1")
def test_add_in_the_beginning(self): n1 = Node(12) n2 = Node(1) n3 = Node(123) n4 = Node(4) test_list = LinkedList2() test_list.add_in_tail(n1) test_list.add_in_tail(n2) test_list.add_in_tail(n3) test_list.add_in_head(n4) self.assertEqual(n4.value, test_list.head.value, "Tail should equal n4") self.assertEqual(n4.next, n1, "Tail should be n3") self.assertEqual(n4, test_list.head, "Head should equal n4") self.assertEqual(n4.prev, None, "n4 prev should be None") self.assertEqual(n1.prev, n4, "n4 prev should be n3")
def test_find_one_in_the_middle(self): test_list = LinkedList2() n1 = Node(1) n3 = Node(3) n2 = Node(1) n4 = Node(3) n5 = Node(5) test_list.add_in_tail(n1) test_list.add_in_tail(n3) test_list.add_in_tail(n2) test_list.add_in_tail(n4) test_list.add_in_tail(n5) self.assertIsNone(test_list.find(2), "There is no 2") self.assertEqual(test_list.find(1), n1, "n1 is the first with 1") self.assertEqual(test_list.find(3), n3, "n3 is the first with 3") self.assertEqual(test_list.find(5), n5, "n5 is the first with 5")
def test_insert_in_the_end(self): n1 = Node(12) n2 = Node(1) n3 = Node(123) n4 = Node(4) test_list = LinkedList2() test_list.add_in_tail(n1) test_list.add_in_tail(n2) test_list.add_in_tail(n3) test_list.insert(None, n4) self.assertEqual(n4.value, test_list.tail.value, "Tail should equal n4") self.assertEqual(n3.next, test_list.tail, "Tail should be n3") self.assertEqual(n4, test_list.tail, "Head should equal n4") self.assertEqual(n4.next, None, "n4 should be before n1") self.assertEqual(n4.prev, n3, "n4 prev should be n3")
def test_insert_in_the_empty_list(self): n1 = Node(12) test_list = LinkedList2() test_list.insert(None, n1) self.assertEqual(n1.value, test_list.head.value, "Head should equal n1") self.assertEqual(n1, test_list.tail, "Tail should be n1") self.assertEqual(12, test_list.head.value, "Head should equal 12")
def test_find_all(self): test_list = LinkedList2() n1 = Node(1) n2 = Node(2) n3 = Node(3) n4 = Node(2) test_list.add_in_tail(n1) test_list.add_in_tail(n2) test_list.add_in_tail(n3) test_list.add_in_tail(n4) finding2 = test_list.find_all(2) finding3 = test_list.find_all(3) self.assertIn(n2, finding2, "n2 is in finding2") self.assertEqual(n2.value, finding2[0].value) self.assertIn(n4, finding2, "n4 is in finding2") self.assertEqual(len(finding2), 2, "The length of list is 2") self.assertIn(n3, finding3, "n3 is in finding3")
def test_delete_from_list_from_the_end(self): n1 = Node(12) n2 = Node(144) n3 = Node(55) test_list = LinkedList2() test_list.add_in_tail(n1) test_list.add_in_tail(n2) test_list.add_in_tail(n3) self.assertEqual(test_list.head, n1, "n1 should be head ") self.assertEqual(test_list.tail, n3, "n3 should be tail ") test_list.delete(55) self.assertEqual(n1.next, n2, "n2 should be followed by n1") self.assertEqual(test_list.head, n1, "n1 should be head after deletion") self.assertEqual(test_list.tail.value, n2.value, "n2 should be tail after deletion") self.assertEqual(test_list.len(), 2, "Length should be 2")
def test_add_in_the_beginning_in_the_empty(self): n4 = Node(4) test_list = LinkedList2() test_list.add_in_head(n4) self.assertEqual(n4.value, test_list.head.value, "Tail should equal n4") self.assertEqual(n4.next, None, "Tail should be n3") self.assertEqual(n4, test_list.tail, "Head should equal n4") self.assertEqual(n4.prev, None, "n4 prev should be None")
def test_add_in_tail_not_empty(self): test_list = LinkedList2() self.assertIsNone(test_list.head, "Head is None") self.assertIsNone(test_list.tail, "Tail is None") n1 = Node(2) test_list.add_in_tail(n1) self.assertEqual(test_list.head, n1, "n1 is head") self.assertEqual(test_list.tail, n1, "n1 is tail") self.assertIsNone(n1.prev, "n1 prev is none") self.assertIsNone(n1.next, "n1 next is none") n2 = Node(3) test_list.add_in_tail(n2) self.assertEqual(test_list.head, n1, "n1 is head") self.assertEqual(test_list.tail, n2, "n2 is tail") self.assertIsNone(test_list.head.prev, "Head prev is none") self.assertEqual(test_list.tail.prev, n1, "n1 is tail prev") self.assertIsNone(test_list.tail.next) self.assertEqual(n2.prev, n1, "n1 prev of n2") self.assertEqual(n1.next, n2, "n2 is n1 next")
def test_add_in_tail_empty(self): test_list = LinkedList2() self.assertIsNone(test_list.head, "Head is None") self.assertIsNone(test_list.tail, "Tail is None") n1 = Node(2) test_list.add_in_tail(n1) self.assertEqual(test_list.head, n1, "n1 is head") self.assertEqual(test_list.tail, n1, "n1 is tail") self.assertIsNone(n1.prev, "n1 prev is none") self.assertIsNone(n1.next, "n1 next is none")
def test_insert_in_the_middle(self): n1 = Node(1) n3 = Node(3) n5 = Node(5) n4 = Node(4) n2 = Node(2) test_list = LinkedList2() test_list.add_in_tail(n1) test_list.add_in_tail(n3) test_list.add_in_tail(n5) test_list.insert(n3, n4) self.assertEqual(n3.next, n4, "n3 next is n4") self.assertEqual(n4.prev, n3, "n4 prev is n3") self.assertEqual(n5, test_list.tail, "Tail should equal n5") self.assertEqual(n1, test_list.head, "n1 should be head") test_list.insert(n1, n2) self.assertEqual(n1.next, n2, "n1 next is n2") self.assertEqual(n2.prev, n1, "n5 prev is n1") self.assertEqual(n2.next, n3, "n2 next is n3") self.assertEqual(n2.prev, n1, "n2 prev is n1") self.assertEqual(n5, test_list.tail, "Tail should equal n5") self.assertEqual(n1, test_list.head, "Head should equal n1")
def test_delete_several_in_the_end(self): test_list = LinkedList2() n1 = Node(1) n2 = Node(2) n3 = Node(3) test_list.add_in_tail(n1) test_list.add_in_tail(n2) test_list.add_in_tail(n3) test_list.add_in_tail(Node(555)) test_list.add_in_tail(Node(555)) test_list.add_in_tail(Node(555)) test_list.add_in_tail(Node(555)) test_list.add_in_tail(Node(555)) test_list.delete(555, all=True) self.assertEqual(n1.next, n2, "n3 should be followed by n1") self.assertEqual(test_list.head, n1, "n1 should be head") self.assertEqual(test_list.tail, n3, "n3 should be tail")
def test_find_one(self): test_list = LinkedList2() n1 = Node(2) test_list.add_in_tail(n1) self.assertEqual(test_list.find(2), n1, "n1 should be equal to finding")
def test_delete_from_list_with_one(self): test_list = LinkedList2() test_list.add_in_tail(Node(123)) test_list.delete(123) self.assertIsNone(test_list.head, "Head should be none") self.assertIsNone(test_list.tail, "Tail should be none")
def test_clean(self): test_list = LinkedList2() n1 = Node(1) n2 = Node(2) n3 = Node(3) test_list.add_in_tail(Node(555)) test_list.add_in_tail(Node(555)) test_list.add_in_tail(Node(555)) test_list.add_in_tail(Node(555)) test_list.add_in_tail(Node(555)) test_list.add_in_tail(n1) test_list.add_in_tail(Node(555)) test_list.add_in_tail(Node(555)) test_list.add_in_tail(Node(555)) test_list.add_in_tail(n2) test_list.add_in_tail(Node(555)) test_list.add_in_tail(Node(555)) test_list.add_in_tail(Node(555)) test_list.add_in_tail(n3) test_list.add_in_tail(Node(555)) test_list.add_in_tail(Node(555)) test_list.add_in_tail(Node(555)) test_list.clean() self.assertEqual(test_list.len(), 0, "Length should be 0") self.assertIsNone(test_list.head, "Should be None") self.assertIsNone(test_list.tail, "Should be None")