tests/zscore_helpers: degenerate flag rejects valid-floored std (F02)
- SHA
4e01c301d4a08f88a15d791a1ecb02692a763ec5- Parents
-
b0469ba - Tree
c4eb36e
4e01c30
4e01c301d4a08f88a15d791a1ecb02692a763ec5b0469ba
c4eb36e| Status | File | + | - |
|---|---|---|---|
| M |
tests/unit/test_zscore_helpers.py
|
15 | 0 |
tests/unit/test_zscore_helpers.pymodified@@ -63,6 +63,21 @@ class TestZScore: | ||
| 63 | 63 | z = z_score(1.0, stats) |
| 64 | 64 | assert z is not None |
| 65 | 65 | |
| 66 | + def test_degenerate_flag_rejects_even_valid_std(self) -> None: | |
| 67 | + """F02 (Audit 03) — when null_adapter marks stats as degenerate | |
| 68 | + (``runs: 1`` or coincidentally-identical seeds), ``z_score`` | |
| 69 | + refuses to divide even though the floored std passes MIN_STD. | |
| 70 | + This is what prevents the observed ``+290,766σ`` output on a | |
| 71 | + ``runs: 1`` leakage probe.""" | |
| 72 | + stats = {"mean": 0.01, "std": MIN_STD, "degenerate": 1.0} | |
| 73 | + assert z_score(0.30, stats) is None | |
| 74 | + | |
| 75 | + def test_non_degenerate_flag_does_not_change_behavior(self) -> None: | |
| 76 | + """A ``degenerate: 0.0`` marker on an otherwise-valid stats | |
| 77 | + dict behaves identically to the no-marker path.""" | |
| 78 | + stats = {"mean": 0.01, "std": 0.01, "degenerate": 0.0} | |
| 79 | + assert z_score(0.08, stats) is not None | |
| 80 | + | |
| 66 | 81 | |
| 67 | 82 | class TestVerdictFromZ: |
| 68 | 83 | def test_pass_at_threshold(self) -> None: |