def test_empty_list():
    heap = Heap([])

    with pytest.raises(IndexError) as expected:
        heap.pop()

    assert "The heap is empty" == str(expected.value)
def test_same_values():
    heap = Heap(HOMOGENOUS_VALUE_LIST.copy())

    for _ in range(len(heap)):
        assert heap.pop() == 1

    assert list(heap) == []
Beispiel #3
0
def test_insert():
    from heaps.heap import Heap
    heap = Heap()

    for i in range(10):
        heap.insert(i)

    assert len(heap.array) == 10
Beispiel #4
0
def merge_k(lists):
    # If lists is empty
    if not len(lists):
        return

    # Initializing an array containing the first element of each list
    data = [lst for lst in lists]

    # Initializing a heap with the data
    heap = Heap(data)

    # Extracting min and storing reference to the head
    result = heap.poll()
    head = result

    if result.next:
        heap.insert(result.next)

    # Extracting min and replacing with next one from list
    while not heap.is_empty():
        min_item = heap.poll()
        result.next = min_item
        result = result.next

        if min_item.next:
            heap.insert(min_item.next)

    return head
def test_insert():
    heap = Heap([])
    heap.insert(4)
    heap.insert(3)
    heap.insert(6)
    heap.insert(1)
    heap.insert(2)
    heap.insert(0)
    heap.insert(5)

    assert_values(heap)
    assert list(heap) == []
Beispiel #6
0
def test_sort():
    from random import shuffle
    from heaps.heap import Heap
    MAX_DATA = 100000

    heap = Heap()

    data = [x for x in range(MAX_DATA)]
    shuffle(data)

    result = heap.sort(data)
    data.sort(reverse=True)

    assert result == data
Beispiel #7
0
class PriorityQueue(object):
    def __init__(self, data):
        self.heap = Heap(data)

    # TODO Do this in an efficient way
    def poll(self):
        self.heap.data[0], self.heap.data[self.heap.end] = self.heap.data[
            self.heap.end], self.heap.data[0]
        self.heap.end -= 1

        self.heap.heapify()

        return self.heap.data[self.heap.end +
                              1] if self.heap.end > -2 else None

    @property
    def size(self):
        return self.heap.end
Beispiel #8
0
def test_delete():
    from random import shuffle
    from heaps.heap import Heap
    MAX_DATA = 100000

    heap = Heap()

    data = [x for x in range(MAX_DATA)]
    shuffle(data)
    for datum in data:
        heap.insert(datum)

    result = []
    for _ in range(MAX_DATA):
        result.append(heap.delete())

    data.sort(reverse=True)

    assert result == data
Beispiel #9
0
 def __init__(self, data):
     self.heap = Heap(data)
def test_random_order():
    heap = Heap(RANDOM_ORDERED_LIST)
    assert_values(heap)
    assert list(heap) == []
def test_descending_order():
    descending_list = list(reversed(sorted(RANDOM_ORDERED_LIST)))
    heap = Heap(descending_list)
    assert_values(heap)
    assert list(heap) == []
def test_ascending_order():
    ascending_list = sorted(RANDOM_ORDERED_LIST)
    heap = Heap(ascending_list)
    assert_values(heap)
    assert list(heap) == []