示例#1
0
 def test_findlast(self):
     l = LinkedList(1)
     l.append(2)
     l.append(3)
     l.append(4)
     l.append(5)
     n = l.find(5)
     self.assertEqual(n.value, 5)
     self.assertEqual(n.next, None)
示例#2
0
 def test_find(self):
     l = LinkedList(1)
     l.insert(2)
     l.insert(3)
     l.insert(4)
     l.insert(5)
     n = l.find(3)
     self.assertEqual(n.value, 3)
     self.assertEqual(n.next.value, 2)
     self.assertEqual(n.next.next.value, 1)
示例#3
0
 def test_append(self):
     l = LinkedList(1)
     l.append(2)
     l.append(3)
     l.append(4)
     l.append(5)
     n = l.find(4)
     self.assertEqual(n.value, 4)
     self.assertEqual(l.length(), 5)
     self.assertEqual(n.next.value, 5)
     self.assertEqual(n.next.next, None)
示例#4
0
    def test_find(self):
        # поиск значения
        NODE_VAL = 12
        node = self.linked_list.find(NODE_VAL)
        self.assertEqual(node.value, NODE_VAL)

        # поиск несуществующего значения
        NODE_VAL = 128
        node = self.linked_list.find(NODE_VAL)
        self.assertIsNone(node)

        # поиск по None
        NODE_VAL = None
        self.linked_list.add_in_tail(Node(NODE_VAL))
        node = self.linked_list.find(NODE_VAL)
        self.assertEqual(node.value, NODE_VAL)

        # поиск по "сложному" типу данных
        NODE_VAL = ['test', 12]
        self.linked_list.add_in_tail(Node(NODE_VAL))
        node = self.linked_list.find(NODE_VAL)
        self.assertEqual(node.value, NODE_VAL)

        # поиск по нулевому значению
        NODE_VAL = 0
        self.linked_list.add_in_tail(Node(NODE_VAL))
        node = self.linked_list.find(NODE_VAL)
        self.assertEqual(node.value, NODE_VAL)

        # поиск в пустом списке
        linked_list = LinkedList()
        node = linked_list.find(12)
        self.assertIsNone(node)

        # поиск в списке из одного узла
        linked_list.add_in_tail(Node(12))
        node = linked_list.find(12)
        self.assertEqual(node.value, 12)

        node = linked_list.find(10)
        self.assertIsNone(node)
示例#5
0
import sys
sys.path.insert(0, '../')

from ll import LinkedList

ll = LinkedList()
ll.append(20)
ll.prepend(19)
ll.append(21)
print("Is 21 present?", ll.find(21))
print("Is 22 present?", ll.find(22))
print(ll)
print("Deleting", ll.delete(20))
print(ll)
print("Deleting 23", ll.delete(23))
ll.insertAtPos(20, 1)
print("After insertion of 20 at 1", ll)
print("Cycle length", ll.detectCycleLen())
print("Creating a 3-cycle", ll.createcycle(19))
print("Next of 21:", ll.last.next)
print("Cycle length", ll.detectCycleLen())
print("Chain length", ll.findlen())
ll.createcycle(20)
print("Changing to 2-cycle", ll.last, "<->", ll.last.next)
print("Cycle length", ll.detectCycleLen())
print("Chain length", ll.findlen())
print("LL now:", ll)
ll.delete(19)
print("Deleting head", ll)
ll.delete(21)
print("Deleting last", ll)
示例#6
0
class TestLinkedListMethods(unittest.TestCase):
    def __init__(self, *args, **kwargs):
        n1 = Node(12)
        n2 = Node(55)
        n3 = Node(12)
        n1.next = n2
        n2.next = n3

        self.linked_list = LinkedList()
        self.linked_list.head = n1
        self.linked_list.tail = n3

        super(TestLinkedListMethods, self).__init__(*args, **kwargs)

    def test_add_in_tail(self):
        NODE_VAL = 128
        self.linked_list.add_in_tail(Node(NODE_VAL))
        node = self.linked_list.tail
        self.assertEqual(node.value, NODE_VAL)

        NODE_VAL = None
        self.linked_list.add_in_tail(Node(NODE_VAL))
        node = self.linked_list.tail
        self.assertEqual(node.value, NODE_VAL)

        NODE_VAL = 'text'
        self.linked_list.add_in_tail(Node(NODE_VAL))
        node = self.linked_list.tail
        self.assertEqual(node.value, NODE_VAL)

        NODE_VAL = ['test', 12]
        self.linked_list.add_in_tail(Node(NODE_VAL))
        node = self.linked_list.tail
        self.assertEqual(node.value, NODE_VAL)

    def test_print_all_nodes(self):
        import io
        from contextlib import redirect_stdout

        f = io.StringIO()
        with redirect_stdout(f):
            self.linked_list.print_all_nodes()

        actual = f.getvalue()
        expected = "12\n55\n12\n"

        self.assertEqual(actual, expected)

    def test_find(self):
        # поиск значения
        NODE_VAL = 12
        node = self.linked_list.find(NODE_VAL)
        self.assertEqual(node.value, NODE_VAL)

        # поиск несуществующего значения
        NODE_VAL = 128
        node = self.linked_list.find(NODE_VAL)
        self.assertIsNone(node)

        # поиск по None
        NODE_VAL = None
        self.linked_list.add_in_tail(Node(NODE_VAL))
        node = self.linked_list.find(NODE_VAL)
        self.assertEqual(node.value, NODE_VAL)

        # поиск по "сложному" типу данных
        NODE_VAL = ['test', 12]
        self.linked_list.add_in_tail(Node(NODE_VAL))
        node = self.linked_list.find(NODE_VAL)
        self.assertEqual(node.value, NODE_VAL)

        # поиск по нулевому значению
        NODE_VAL = 0
        self.linked_list.add_in_tail(Node(NODE_VAL))
        node = self.linked_list.find(NODE_VAL)
        self.assertEqual(node.value, NODE_VAL)

        # поиск в пустом списке
        linked_list = LinkedList()
        node = linked_list.find(12)
        self.assertIsNone(node)

        # поиск в списке из одного узла
        linked_list.add_in_tail(Node(12))
        node = linked_list.find(12)
        self.assertEqual(node.value, 12)

        node = linked_list.find(10)
        self.assertIsNone(node)

    def test_find_all(self):
        # поиск значения
        NODE_VAL = 12
        nodes = self.linked_list.find_all(NODE_VAL)
        self.assertEqual(len(nodes), 2)
        for node in nodes:
            self.assertEqual(node.value, NODE_VAL)

        # поиск по "сложному" типу данных
        NODE_VAL = ['test', 12]
        self.linked_list.add_in_tail(Node(NODE_VAL))
        nodes = self.linked_list.find_all(NODE_VAL)
        self.assertEqual(len(nodes), 1)
        for node in nodes:
            self.assertEqual(node.value, NODE_VAL)

        # поиск несуществующего значения
        NODE_VAL = 120
        nodes = self.linked_list.find_all(NODE_VAL)
        self.assertEqual(len(nodes), 0)

        # получение всех узлов списка
        nodes = self.linked_list.find_all()
        self.assertEqual(len(nodes), 4)

        # поиск по None
        NODE_VAL = None
        nodes = self.linked_list.find_all(NODE_VAL)
        self.assertEqual(len(nodes), 4)

        # поиск по нулевому значению
        NODE_VAL = 0
        self.linked_list.add_in_tail(Node(NODE_VAL))
        nodes = self.linked_list.find_all(NODE_VAL)
        self.assertEqual(len(nodes), 1)

        # поиск в пустом списке
        linked_list = LinkedList()
        nodes = linked_list.find_all(12)
        self.assertEqual(len(nodes), 0)

        # поиск в списке из одного узла
        linked_list.add_in_tail(Node(12))
        nodes = linked_list.find_all(12)
        self.assertEqual(len(nodes), 1)
        for node in nodes:
            self.assertEqual(node.value, 12)

        nodes = linked_list.find_all(10)
        self.assertEqual(len(nodes), 0)

    def test_delete(self):
        # удаление первого найденого элемента из нескольких найденных
        NODE_VALUE = 12
        nodes = self.linked_list.find_all(NODE_VALUE)
        self.assertEqual(len(nodes), 2)

        self.linked_list.delete(NODE_VALUE)
        nodes = self.linked_list.find_all(NODE_VALUE)
        self.assertEqual(len(nodes), 1)
        self.assertEqual(self.linked_list.head.value, 55)
        self.assertEqual(self.linked_list.tail.value, 12)

        # удаление всех найденных элементов
        self.linked_list.add_in_tail(Node(NODE_VALUE))
        nodes = self.linked_list.find_all(NODE_VALUE)
        self.assertEqual(len(nodes), 2)

        self.linked_list.delete(NODE_VALUE, True)
        nodes = self.linked_list.find_all(NODE_VALUE)
        self.assertEqual(len(nodes), 0)
        self.assertEqual(self.linked_list.tail.value, 55)

        # удаление единственного элемента в списке
        self.linked_list.delete(55)
        self.assertEqual(self.linked_list.len(), 0)
        self.assertIsNone(self.linked_list.head)
        self.assertIsNone(self.linked_list.tail)

        # удаление элемента из пустого списка
        self.assertEqual(self.linked_list.len(), 0)
        self.linked_list.delete(55)
        self.assertEqual(self.linked_list.len(), 0)
        self.assertIsNone(self.linked_list.head)
        self.assertIsNone(self.linked_list.tail)

        # удаление элемента из списка после чего остается только один элемент в списке
        self.linked_list.add_in_tail(Node(NODE_VALUE))
        self.linked_list.add_in_tail(Node(55))

        self.linked_list.delete(55)
        self.assertEqual(self.linked_list.head.value, 12)
        self.assertEqual(self.linked_list.tail.value, 12)
        self.assertIsNone(self.linked_list.head.next)
        self.assertIsNone(self.linked_list.tail.next)
        self.assertEqual(self.linked_list.len(), 1)

        self.linked_list.add_in_tail(Node(55))

        self.linked_list.delete(NODE_VALUE)
        self.assertEqual(self.linked_list.head.value, 55)
        self.assertEqual(self.linked_list.tail.value, 55)
        self.assertIsNone(self.linked_list.head.next)
        self.assertIsNone(self.linked_list.tail.next)
        self.assertEqual(self.linked_list.len(), 1)

        # проверка на удаление элементов со значением 0 и проверка связей для всех узлов в памяти
        n1 = Node(0)
        n2 = Node(0)
        n3 = Node(1)
        n4 = Node(1)
        n5 = Node(2)
        n6 = Node(2)
        linked_list = LinkedList()
        linked_list.add_in_tail(n1)
        linked_list.add_in_tail(n2)
        linked_list.add_in_tail(n3)
        linked_list.add_in_tail(n4)
        linked_list.add_in_tail(n5)
        linked_list.add_in_tail(n6)
        linked_list.delete(1, True)
        linked_list.delete(2, True)
        linked_list.delete(0)
        self.assertEqual(linked_list.head.value, 0)
        self.assertEqual(linked_list.tail.value, 0)
        self.assertIsNone(linked_list.head.next)
        self.assertIsNone(linked_list.tail.next)
        self.assertEqual(linked_list.len(), 1)

        self.assertIsNone(n1.next)
        self.assertIsNone(n2.next)
        self.assertIsNone(n3.next)
        self.assertIsNone(n4.next)
        self.assertIsNone(n5.next)
        self.assertIsNone(n6.next)

    def test_len(self):
        count_nodes = self.linked_list.len()
        self.assertEqual(count_nodes, 3)

        NODE_VALUE = 12
        self.linked_list.delete(NODE_VALUE, True)
        count_nodes = self.linked_list.len()
        self.assertEqual(count_nodes, 1)

    def test_clean(self):
        self.linked_list.clean()
        self.assertIsNone(self.linked_list.head)
        self.assertIsNone(self.linked_list.tail)
        self.assertEqual(self.linked_list.len(), 0)

    def test_insert(self):
        # вставка в список со многими элементами в начало списка
        self.linked_list.insert(None, Node(1200))
        self.assertEqual(self.linked_list.head.value, 1200)
        self.assertEqual(self.linked_list.head.next.value, 12)
        self.assertEqual(self.linked_list.len(), 4)
        self.assertEqual(self.linked_list.tail.value, 12)

        # вставка в список со многими элементами в конец списка
        linked_list = LinkedList()
        linked_list.add_in_tail(Node(1))
        linked_list.add_in_tail(Node(2))
        linked_list.add_in_tail(Node(3))

        linked_list.insert(linked_list.tail, Node(1200))
        self.assertEqual(linked_list.head.value, 1)
        self.assertEqual(linked_list.head.next.value, 2)
        self.assertEqual(linked_list.len(), 4)
        self.assertEqual(linked_list.tail.value, 1200)

        # вставка в список со многими элементами
        node = self.linked_list.find(55)
        self.linked_list.insert(node, Node(66))
        self.assertEqual(node.next.value, 66)
        self.assertEqual(self.linked_list.len(), 5)
        self.assertEqual(self.linked_list.head.value, 1200)
        self.assertEqual(self.linked_list.tail.value, 12)

        # вставка в список отличного от типа Node элемента
        NODE_VALUE = 100
        self.linked_list.insert(node, NODE_VALUE)
        self.assertEqual(self.linked_list.len(), 5)
        self.assertEqual(self.linked_list.head.value, 1200)
        self.assertEqual(self.linked_list.tail.value, 12)

        # вставка в список после несуществующего элемента
        linked_list = LinkedList()
        NODE_VALUE = 100
        linked_list.add_in_tail(Node(1))
        linked_list.add_in_tail(Node(2))
        linked_list.add_in_tail(Node(3))
        linked_list.insert(Node(1500), Node(NODE_VALUE))
        self.assertEqual(linked_list.len(), 3)
        self.assertEqual(linked_list.head.value, 1)
        self.assertEqual(linked_list.tail.value, 3)

        # вставка в пустой список
        linked_list = LinkedList()
        linked_list.insert(None, Node(NODE_VALUE))
        node = linked_list.find(NODE_VALUE)
        self.assertEqual(linked_list.len(), 1)
        self.assertEqual(node.value, NODE_VALUE)
        self.assertEqual(node.next, None)
        self.assertEqual(linked_list.head.value, NODE_VALUE)
        self.assertEqual(linked_list.tail.value, NODE_VALUE)

        # вставка в пустой список после несуществующего элемента
        linked_list = LinkedList()
        linked_list.insert(Node(10), Node(10))
        self.assertEqual(linked_list.len(), 0)
        self.assertIsNone(linked_list.head)
        self.assertIsNone(linked_list.tail)

        # вставка в список в начало с одним элементом и проверка на нулевое значение
        linked_list = LinkedList()
        linked_list.add_in_tail(Node(1))
        linked_list.insert(None, Node(0))
        node = linked_list.find(0)
        self.assertEqual(linked_list.len(), 2)
        self.assertEqual(node.value, 0)
        self.assertEqual(node.next.value, 1)
        self.assertEqual(linked_list.head.value, 0)
        self.assertEqual(linked_list.tail.value, 1)

        # вставка в список с одним элементом в конец списка
        linked_list = LinkedList()
        linked_list.add_in_tail(Node(1))
        node = linked_list.find(1)
        linked_list.insert(node, Node(0))
        node = linked_list.find(0)
        self.assertEqual(linked_list.len(), 2)
        self.assertEqual(node.value, 0)
        self.assertIsNone(node.next)
        self.assertEqual(linked_list.head.value, 1)
        self.assertEqual(linked_list.tail.value, 0)

    def test_validate_node(self):
        self.assertTrue(self.linked_list._validate_node(Node(123)))
        self.assertFalse(self.linked_list._validate_node(123))
        self.assertFalse(self.linked_list._validate_node('test'))
示例#7
0
    def test_insert(self):
        # вставка в список со многими элементами в начало списка
        self.linked_list.insert(None, Node(1200))
        self.assertEqual(self.linked_list.head.value, 1200)
        self.assertEqual(self.linked_list.head.next.value, 12)
        self.assertEqual(self.linked_list.len(), 4)
        self.assertEqual(self.linked_list.tail.value, 12)

        # вставка в список со многими элементами в конец списка
        linked_list = LinkedList()
        linked_list.add_in_tail(Node(1))
        linked_list.add_in_tail(Node(2))
        linked_list.add_in_tail(Node(3))

        linked_list.insert(linked_list.tail, Node(1200))
        self.assertEqual(linked_list.head.value, 1)
        self.assertEqual(linked_list.head.next.value, 2)
        self.assertEqual(linked_list.len(), 4)
        self.assertEqual(linked_list.tail.value, 1200)

        # вставка в список со многими элементами
        node = self.linked_list.find(55)
        self.linked_list.insert(node, Node(66))
        self.assertEqual(node.next.value, 66)
        self.assertEqual(self.linked_list.len(), 5)
        self.assertEqual(self.linked_list.head.value, 1200)
        self.assertEqual(self.linked_list.tail.value, 12)

        # вставка в список отличного от типа Node элемента
        NODE_VALUE = 100
        self.linked_list.insert(node, NODE_VALUE)
        self.assertEqual(self.linked_list.len(), 5)
        self.assertEqual(self.linked_list.head.value, 1200)
        self.assertEqual(self.linked_list.tail.value, 12)

        # вставка в список после несуществующего элемента
        linked_list = LinkedList()
        NODE_VALUE = 100
        linked_list.add_in_tail(Node(1))
        linked_list.add_in_tail(Node(2))
        linked_list.add_in_tail(Node(3))
        linked_list.insert(Node(1500), Node(NODE_VALUE))
        self.assertEqual(linked_list.len(), 3)
        self.assertEqual(linked_list.head.value, 1)
        self.assertEqual(linked_list.tail.value, 3)

        # вставка в пустой список
        linked_list = LinkedList()
        linked_list.insert(None, Node(NODE_VALUE))
        node = linked_list.find(NODE_VALUE)
        self.assertEqual(linked_list.len(), 1)
        self.assertEqual(node.value, NODE_VALUE)
        self.assertEqual(node.next, None)
        self.assertEqual(linked_list.head.value, NODE_VALUE)
        self.assertEqual(linked_list.tail.value, NODE_VALUE)

        # вставка в пустой список после несуществующего элемента
        linked_list = LinkedList()
        linked_list.insert(Node(10), Node(10))
        self.assertEqual(linked_list.len(), 0)
        self.assertIsNone(linked_list.head)
        self.assertIsNone(linked_list.tail)

        # вставка в список в начало с одним элементом и проверка на нулевое значение
        linked_list = LinkedList()
        linked_list.add_in_tail(Node(1))
        linked_list.insert(None, Node(0))
        node = linked_list.find(0)
        self.assertEqual(linked_list.len(), 2)
        self.assertEqual(node.value, 0)
        self.assertEqual(node.next.value, 1)
        self.assertEqual(linked_list.head.value, 0)
        self.assertEqual(linked_list.tail.value, 1)

        # вставка в список с одним элементом в конец списка
        linked_list = LinkedList()
        linked_list.add_in_tail(Node(1))
        node = linked_list.find(1)
        linked_list.insert(node, Node(0))
        node = linked_list.find(0)
        self.assertEqual(linked_list.len(), 2)
        self.assertEqual(node.value, 0)
        self.assertIsNone(node.next)
        self.assertEqual(linked_list.head.value, 1)
        self.assertEqual(linked_list.tail.value, 0)