コード例 #1
0
class Queue(object):
    """Create a queue data structure"""
    def __init__(self):
        self.container = DoubleLinkedList()

    def enqueue(self, val):
        """Inserts value to queue"""
        self.container.insert(val)

    def dequeue(self):
        """Removes next item and returns it"""
        return self.container.shift()

    def peek(self):
        """Return next value in queue without dequeuing it"""
        if self.container.tail_node is None:
            return None
        return self.container.tail_node.value

    def size(self):
        """Return size of queue, 0 if empty"""
        if self.container.head_node is None:
            return 0
        cursor = self.container.head_node
        if self.container.head_node.next == self.container.tail_sentinal:
            return 1
        size = 1
        while cursor.next != self.container.tail_sentinal:
            size += 1
            cursor = cursor.next
        return size
コード例 #2
0
def test_remove_value_not_in_list():
    from double_linked_list import DoubleLinkedList
    dll = DoubleLinkedList()
    dll.append(5)
    dll.insert(10)
    dll.append(15)
    dll.insert(20)
    with pytest.raises(ValueError):
        dll.remove('bananas')
コード例 #3
0
def test_pop():
    from double_linked_list import DoubleLinkedList
    dll = DoubleLinkedList()
    dll.append(5)
    dll.insert(10)
    dll.append(15)
    dll.insert(20)
    return_value_1 = dll.pop()
    assert return_value_1 == 20
    assert dll.head_node.value == 10
コード例 #4
0
def test_remove_tail():
    from double_linked_list import DoubleLinkedList
    dll = DoubleLinkedList()
    dll.insert(3)
    dll.insert(2)
    dll.insert(1)
    assert dll.tail_node.value == 3
    dll.remove(3)
    assert dll.tail_node.value == 2
    assert dll.tail_node.next == dll.tail_sentinal
コード例 #5
0
def test_remove_value():
    from double_linked_list import DoubleLinkedList
    dll = DoubleLinkedList()
    dll.insert(3)
    dll.insert(2)
    dll.insert(1)
    dll.remove(2)
    assert dll.head_node.next.value == 3
    assert dll.tail_node.value == 3
    assert dll.tail_node.previous == dll.head_node
コード例 #6
0
def test_shift():
    from double_linked_list import DoubleLinkedList
    dll = DoubleLinkedList()
    dll.append(5)
    dll.insert(10)
    dll.append(15)
    dll.insert(20)
    # [20, 10, 5, 15]
    return_value_1 = dll.shift()
    assert return_value_1 == 15
    assert dll.tail_node.value == 5
コード例 #7
0
def test_insert():
    # test multiple insert calls
    from double_linked_list import DoubleLinkedList
    dll = DoubleLinkedList()
    dll.insert(5)
    dll.insert(10)
    assert dll.head_node.value == 10
    assert dll.head_node.next.value == 5
    assert dll.head_node.previous == dll.head_sentinal

    assert dll.tail_node.value == 5
    assert dll.tail_node.next == dll.tail_sentinal
    assert dll.tail_node.previous == dll.head_node
コード例 #8
0
def test_insert_on_empty_list():
    # test insert single element to empty list
    from double_linked_list import DoubleLinkedList
    dll = DoubleLinkedList()
    dll.insert(5)
    assert dll.head_node.value == 5
    assert dll.head_node.next == dll.tail_sentinal
    assert dll.head_node.previous == dll.head_sentinal

    # list is 1 element long, so head and tail are that element
    assert dll.tail_node.value == 5
    assert dll.tail_node.next == dll.tail_sentinal
    assert dll.tail_node.previous == dll.head_sentinal
コード例 #9
0
class TestDoubleLinkedList(unittest.TestCase):
    def setUp(self):
        self.double_list = DoubleLinkedList()

    def test_insert_one_item(self):
        self.assertEqual(0, self.double_list.size)
        self.assertEqual(None, self.double_list.root)

        item1 = create_item(1, 1)

        self.double_list.insert(item1)
        self.assertEqual(1, self.double_list.size)
        self.assertEqual(item1, self.double_list.root)
        self.assertEqual(None, self.double_list.root.next)
        self.assertEqual(None, self.double_list.root.before)

    def test_insert_two_items(self):
        self.assertEqual(0, self.double_list.size)
        self.assertEqual(None, self.double_list.root)

        item1 = create_item(1, 1)
        item2 = create_item(2, 2)

        self.double_list.insert(item1)
        self.double_list.insert(item2)
        self.assertEqual(2, self.double_list.size)
        self.assertEqual(item1, self.double_list.root)
        self.assertEqual(item2, self.double_list.root.next)
        self.assertEqual(None, self.double_list.root.next.next)
        self.assertEqual(item1, self.double_list.root.next.before)

    def test_insert_three_items(self):
        self.assertEqual(0, self.double_list.size)
        self.assertEqual(None, self.double_list.root)

        item1 = create_item(1, 1)
        item2 = create_item(2, 2)
        item3 = create_item(3, 3)

        self.double_list.insert(item1)
        self.double_list.insert(item2)
        self.double_list.insert(item3)
        self.assertEqual(3, self.double_list.size)
        self.assertEqual(item1, self.double_list.root)
        self.assertEqual(item2, self.double_list.root.next)
        self.assertEqual(item1, self.double_list.root.next.before)
        self.assertEqual(item3, self.double_list.root.next.next)
        self.assertEqual(item2, self.double_list.root.next.next.before)
        self.assertEqual(item1, self.double_list.root.next.next.before.before)

    def test_search_item_exist(self):
        item1 = create_item(1, 1)
        item2 = create_item(2, 2)
        item3 = create_item(3, 3)

        self.double_list.insert(item1)
        self.double_list.insert(item2)
        self.double_list.insert(item3)

        self.assertEqual(item3, self.double_list.search(item3.id_))

    def test_search_item_not_exist(self):
        item1 = create_item(1, 1)
        item2 = create_item(2, 2)
        item3 = create_item(3, 3)

        self.double_list.insert(item1)
        self.double_list.insert(item2)
        self.double_list.insert(item3)

        self.assertEqual(None, self.double_list.search(4))

    def test_search_in_list_empty(self):
        self.assertEqual(None, self.double_list.search(1))

    def test_remove_last_item(self):
        item1 = create_item(1, 1)
        item2 = create_item(2, 2)
        item3 = create_item(3, 3)

        self.double_list.insert(item1)
        self.double_list.insert(item2)
        self.double_list.insert(item3)

        item_removed = self.double_list.delete(item3.id_)
        self.assertEqual(item3, item_removed)
        self.assertEqual(2, self.double_list.size)
        self.assertEqual(item1, self.double_list.root)
        self.assertEqual(item2, self.double_list.root.next)

    def test_remove_first_item(self):
        item1 = create_item(1, 1)
        item2 = create_item(2, 2)
        item3 = create_item(3, 3)

        self.double_list.insert(item1)
        self.double_list.insert(item2)
        self.double_list.insert(item3)

        item_removed = self.double_list.delete(item1.id_)
        self.assertEqual(item1, item_removed)
        self.assertEqual(2, self.double_list.size)
        self.assertEqual(item2, self.double_list.root)
        self.assertEqual(item3, self.double_list.root.next)

    def test_remove_middle_item(self):
        item1 = create_item(1, 1)
        item2 = create_item(2, 2)
        item3 = create_item(3, 3)

        self.double_list.insert(item1)
        self.double_list.insert(item2)
        self.double_list.insert(item3)

        item_removed = self.double_list.delete(item2.id_)
        self.assertEqual(item2, item_removed)
        self.assertEqual(2, self.double_list.size)
        self.assertEqual(item1, self.double_list.root)
        self.assertEqual(item3, self.double_list.root.next)