Add robustness_check/tests/test_core.py

This commit is contained in:
Mika 2026-01-26 12:23:46 +00:00
parent bc2817ff6c
commit 497bdc3e0c

View file

@ -0,0 +1,52 @@
import pytest
from robustness_check import core
@pytest.fixture
def stable_runs():
# Alle Runs zeigen ähnliche p95_value, keine Flip-Flops erwartet
return [
{"run_id": 1, "p95_value": 0.95, "pinned": True},
{"run_id": 2, "p95_value": 0.96, "pinned": False},
{"run_id": 3, "p95_value": 0.94, "pinned": True},
{"run_id": 4, "p95_value": 0.95, "pinned": False},
{"run_id": 5, "p95_value": 0.95, "pinned": True},
]
@pytest.fixture
def flipflop_runs():
# Stark variierende p95_value-Werte simulieren instabile Entscheidungen
return [
{"run_id": 1, "p95_value": 0.90, "pinned": True},
{"run_id": 2, "p95_value": 0.99, "pinned": False},
{"run_id": 3, "p95_value": 0.91, "pinned": True},
{"run_id": 4, "p95_value": 0.98, "pinned": False},
{"run_id": 5, "p95_value": 0.92, "pinned": True},
]
def test_check_robustness_stable(stable_runs):
result = core.check_robustness(stable_runs)
assert isinstance(result, core.RobustnessResult)
assert result.k_value in (3, 5)
assert result.flip_flops == 0
assert 0.0 <= result.average_decision <= 1.0
def test_check_robustness_flipflop(flipflop_runs):
result = core.check_robustness(flipflop_runs)
assert isinstance(result, core.RobustnessResult)
assert result.flip_flops >= 1
assert 0.0 <= result.average_decision <= 1.0
def test_robustness_result_structure():
obj = core.RobustnessResult(k_value=3, flip_flops=2, average_decision=0.7)
assert hasattr(obj, 'k_value')
assert hasattr(obj, 'flip_flops')
assert hasattr(obj, 'average_decision')
assert isinstance(obj.k_value, int)
assert isinstance(obj.flip_flops, int)
assert isinstance(obj.average_decision, float)
def test_check_robustness_invalid_input():
with pytest.raises((TypeError, ValueError)):
core.check_robustness(None)
with pytest.raises((TypeError, ValueError)):
core.check_robustness([{"run_id": "x", "p95_value": "wrong", "pinned": "no"}])