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) == []
def test_insert(): from heaps.heap import Heap heap = Heap() for i in range(10): heap.insert(i) assert len(heap.array) == 10
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) == []
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
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
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
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) == []