Add artifact_1_band_width_analysis/tests/test_core.py

This commit is contained in:
Mika 2026-04-02 13:12:17 +00:00
parent ddefcf1dc6
commit 70ed1e8794

View file

@ -0,0 +1,50 @@
import pytest
from artifact_1_band_width_analysis import core
@pytest.fixture
def sample_runs():
# Erstellt kleine RunData-Objekte für Testzwecke
run1 = core.RunData(band_width=100.0, aux=1, near_expiry=0.1, retry_tail_p99=5.0)
run2 = core.RunData(band_width=120.0, aux=2, near_expiry=0.15, retry_tail_p99=4.0)
run3 = core.RunData(band_width=80.0, aux=1, near_expiry=0.05, retry_tail_p99=6.0)
return [run1, run2, run3]
def test_calculate_statistics_basic(sample_runs):
stats = core.calculate_statistics(sample_runs)
assert isinstance(stats, dict)
# Erwartete Metriken vorhanden
for key in ["band_width", "retry_tail_p99"]:
assert key in stats
assert "median" in stats[key]
assert "iqr" in stats[key]
# Median-Test für band_width
expected_median_band = 100.0
assert pytest.approx(stats["band_width"]["median"], rel=1e-9) == expected_median_band
def test_calculate_statistics_iqr(sample_runs):
stats = core.calculate_statistics(sample_runs)
# IQR = Q3 - Q1, für band_width (80, 100, 120) -> 20.0
assert pytest.approx(stats["band_width"]["iqr"], rel=1e-9) == 20.0
def test_compare_runs_difference():
run1 = core.RunData(band_width=100.0, aux=1, near_expiry=0.1, retry_tail_p99=5.0)
run2 = core.RunData(band_width=150.0, aux=1, near_expiry=0.2, retry_tail_p99=4.5)
cmp = core.compare_runs(run1, run2)
assert isinstance(cmp, dict)
# Prüfung des Differenzzeichens
assert pytest.approx(cmp["band_width_diff"], rel=1e-9) == 50.0
assert pytest.approx(cmp["retry_tail_diff"], rel=1e-9) == -0.5
def test_compare_runs_invalid_input():
# Typprüfung: Muss Exception werfen bei falschem Typ
with pytest.raises((AssertionError, TypeError)):
core.compare_runs("not_a_run", None)