import pytest
from evrouting.utils import PriorityQueue


@pytest.fixture
def q():
    q = PriorityQueue()
    q.insert('high', 3)
    q.insert('low', 2)

    yield q
    del q


class TestProrityQueue:
    def test_insert(self, q):
        assert q.delete_min() == 'low'
        assert q.delete_min() == 'high'

        with pytest.raises(KeyError):
            q.delete_min()

    def test_peak(self, q):
        assert q.peak_min() == 'low'
        assert q.peak_min() == 'low'  # does not get removed

    def test_update(self, q):
        q.insert('high', 1)
        assert q.delete_min() == 'high'
        assert q.delete_min() == 'low'

        with pytest.raises(KeyError):
            q.delete_min()