def test_insert_in_order_when_empty(self): """ Inserting a node in an empty sorted list just appends the new node. """ ll = LinkedList() ll.insert_in_order(LinkedList(8)) self.assertEqual(None, ll.at(0).value) self.assertEqual(8, ll.at(1).value)
def test_at(self): """ At(N) returns the Nth node in the list (where 0 is the sentinel.) """ ll = LinkedList() second_node = LinkedList(fake_value()) third_node = LinkedList(fake_value()) fourth_node = LinkedList(fake_value()) ll.append(second_node) ll.append(third_node) ll.append(fourth_node) self.assertEqual(second_node, ll.at(1)) self.assertEqual(third_node, ll.at(2)) self.assertEqual(fourth_node, ll.at(3))
def test_insert_in_order_maintains_order_of_values(self): """ Inserting nodes of arbitrary values results in the list maintaining the sorted order of nodes based on their value. Example: inserting 8, 6, 7, 5, 3, 0, 9 results in: 0, 3, 5, 6, 7, 8, 9 """ values = [8, 6, 7, 5, 3, 0, 9] ll = LinkedList() for value in values: ll.insert_in_order(LinkedList(value)) self.assertEqual(None, ll.at(0).value) self.assertEqual(0, ll.at(1).value) self.assertEqual(3, ll.at(2).value) self.assertEqual(5, ll.at(3).value) self.assertEqual(6, ll.at(4).value) self.assertEqual(7, ll.at(5).value) self.assertEqual(8, ll.at(6).value) self.assertEqual(9, ll.at(7).value)
def test_insert_in_order_less_than(self): """ Inserting a node in a sorted list when the node's value is less than an existing node's value places the new node before the existing one. Example: None -> 8 becomes None -> 6 -> 8 """ ll = LinkedList() ll.insert_in_order(LinkedList(8)) ll.insert_in_order(LinkedList(6)) self.assertEqual(6, ll.at(1).value)
def test_insert_in_order_greater_than(self): """ Inserting a node in a sorted list when the node's value is greater than an existing node's value places the new node after te existing one. Example: None -> 8 becomes None -> 8 -> 9 """ ll = LinkedList() ll.insert_in_order(LinkedList(8)) ll.insert_in_order(LinkedList(9)) self.assertEqual(9, ll.at(2).value)
def test_get_element_at_invalid_negative_index(self): list = LinkedList() list.push(5).push(10).push(20).push(50) self.assertIs(list.at(-10), None)
def test_get_element_at_negative_index(self): list = LinkedList() list.push(5).push(10).push(20).push(50) self.assertEqual(list.at(-3).value, 10)
def test_get_element_at_last_index(self): list = LinkedList() list.push(5).push(10).push(20).push(50) self.assertEqual(list.at(-1).value, 50)