79 lines
1.8 KiB
Python
79 lines
1.8 KiB
Python
from typing import TYPE_CHECKING
|
|
|
|
import pytest
|
|
|
|
from pyority_queue import PureQueue
|
|
if TYPE_CHECKING:
|
|
from pyority_queue import Comparable
|
|
|
|
|
|
type PureQueueInitializer = list[Comparable] | tuple[Comparable, ...]
|
|
|
|
|
|
def test_empty_creation():
|
|
queue = PureQueue()
|
|
assert len(queue) == 0
|
|
|
|
|
|
@pytest.mark.parametrize("items", ([], [0, 1, 2], (0, 1, 2), (0.0, 1.0, 2.0), range(100)))
|
|
def test_creation(items: PureQueueInitializer):
|
|
queue = PureQueue(items)
|
|
assert len(queue) == len(items)
|
|
|
|
|
|
@pytest.mark.parametrize("items", ([], (0,), (-1, 3), range(100)))
|
|
def test_iteration(items: PureQueueInitializer):
|
|
queue = PureQueue(items)
|
|
assert len(list(queue)) == len(items)
|
|
|
|
|
|
@pytest.mark.parametrize("items", ([], (-3, 5), (3.0, 2.0, 1.0), (3, 6, 8, 5, 7, 4, 2, 0), range(100)))
|
|
def test_sorting(items: PureQueueInitializer):
|
|
queue = PureQueue(items)
|
|
assert list(queue) == sorted(items)
|
|
|
|
|
|
def test_insertion():
|
|
queue = PureQueue[int]((4, 2, 8, 6))
|
|
queue.insert(7)
|
|
queue.insert(0)
|
|
queue.insert(3)
|
|
assert list(queue) == [0, 2, 3, 4, 6, 7, 8]
|
|
|
|
|
|
def test_removal():
|
|
queue = PureQueue[int]((4, 2, 8, 6))
|
|
assert queue.pop() == 2
|
|
assert queue.pop() == 4
|
|
assert queue.pop() == 6
|
|
assert queue.pop() == 8
|
|
assert len(queue) == 0
|
|
|
|
|
|
def test_mixed_removal():
|
|
queue = PureQueue[int]((4, 2, 8, 6))
|
|
assert queue.pop() == 2
|
|
assert list(queue) == [4, 6, 8]
|
|
|
|
|
|
def test_empty_removal():
|
|
queue = PureQueue()
|
|
with pytest.raises(IndexError):
|
|
queue.pop()
|
|
|
|
|
|
def test_duplicates():
|
|
queue = PureQueue[int]((0, 0, 0, 5, 5))
|
|
queue.insert(3)
|
|
queue.insert(3)
|
|
assert list(queue) == [0, 0, 0, 3, 3, 5, 5]
|
|
|
|
|
|
def test_mixed_iteration():
|
|
queue = PureQueue[int]((4, 2, 8, 6))
|
|
results = []
|
|
for number in queue:
|
|
results.append(number)
|
|
if len(queue):
|
|
queue.insert(queue.pop() * 2)
|
|
assert results == [2, 6, 8, 32]
|