diff --git a/robustness_check/tests/test_core.py b/robustness_check/tests/test_core.py new file mode 100644 index 0000000..4e3d59a --- /dev/null +++ b/robustness_check/tests/test_core.py @@ -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"}]) \ No newline at end of file