import pytest
import io
from mrrc import MARCReader
class TestReadingBenchmarks:
@pytest.mark.benchmark
def test_read_1k_records(self, benchmark, fixture_1k):
def read_all():
import io
data = io.BytesIO(fixture_1k)
reader = MARCReader(data)
records = []
while (record := reader.read_record()) is not None:
records.append(record)
return records
result = benchmark(read_all)
assert len(result) == 1000
@pytest.mark.benchmark
def test_read_10k_records(self, benchmark, fixture_10k):
def read_all():
data = io.BytesIO(fixture_10k)
reader = MARCReader(data)
records = []
while (record := reader.read_record()) is not None:
records.append(record)
return records
result = benchmark(read_all)
assert len(result) == 10000
@pytest.mark.benchmark
def test_read_and_extract_titles_1k(self, benchmark, fixture_1k):
def read_with_extraction():
data = io.BytesIO(fixture_1k)
reader = MARCReader(data)
titles = []
while (record := reader.read_record()) is not None:
title = record.title or "Unknown"
titles.append(title)
return titles
result = benchmark(read_with_extraction)
assert len(result) == 1000
@pytest.mark.benchmark
def test_read_and_extract_titles_10k(self, benchmark, fixture_10k):
def read_with_extraction():
data = io.BytesIO(fixture_10k)
reader = MARCReader(data)
titles = []
while (record := reader.read_record()) is not None:
title = record.title or "Unknown"
titles.append(title)
return titles
result = benchmark(read_with_extraction)
assert len(result) == 10000
class TestIterationBenchmarks:
@pytest.mark.benchmark
def test_iterator_vs_while_loop_1k(self, benchmark, fixture_1k):
def iterate_records():
data = io.BytesIO(fixture_1k)
reader = MARCReader(data)
count = 0
while reader.read_record() is not None:
count += 1
return count
result = benchmark(iterate_records)
assert result == 1000
@pytest.mark.benchmark
def test_collect_all_records_1k(self, benchmark, fixture_1k):
def collect_all():
data = io.BytesIO(fixture_1k)
reader = MARCReader(data)
records = []
while (record := reader.read_record()) is not None:
records.append(record)
return records
result = benchmark(collect_all)
assert len(result) == 1000