30 lines
1.1 KiB
Python
30 lines
1.1 KiB
Python
import unittest
|
|||
|
|
from summarize import percentile, summarize
|
||
|
|
|
||
|
|
|
||
|
|
class SummaryTests(unittest.TestCase):
|
||
|
|
def test_nearest_rank_and_unsorted_input(self):
|
||
|
|
self.assertEqual(percentile(list(range(20, 0, -1)), 0.95), 19)
|
||
|
|
self.assertEqual(percentile([3, 1, 2], 0.5), 2)
|
||
|
|
|
||
|
|
def test_reject_invalid_samples(self):
|
||
|
|
for values in ([], [-1], [float("nan")], [float("inf")]):
|
||
|
|
with self.assertRaises(ValueError):
|
||
|
|
percentile(values, 0.95)
|
||
|
|
|
||
|
|
def test_paired_overhead_retains_negative_noise(self):
|
||
|
|
sample = lambda ms: {"wall_ms": ms, "metrics": {"total_ms": ms / 2}}
|
||
|
|
report = {"kind": "synthetic_lexical_index_only", "cases": [{
|
||
|
|
"case": "exact", "basic": [sample(4), sample(6)],
|
||
|
|
"debug": [sample(3), sample(5)],
|
||
|
|
}]}
|
||
|
|
result = summarize(report)
|
||
|
|
self.assertIsNone(result["production_gate_pass"])
|
||
|
|
self.assertEqual(result["cases"][0]["mean_paired_debug_minus_basic_ms"], -1)
|
||
|
|
report["cases"][0]["debug"].pop()
|
||
|
|
with self.assertRaises(ValueError):
|
||
|
|
summarize(report)
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
unittest.main()
|