"""统计模块测试""" import math from backend.stats import mean, std, percentile, percentiles, min_val, max_val class TestMean: def test_normal(self): assert mean([1, 2, 3, 4, 5]) == 3.0 def test_single(self): assert mean([42]) == 42.0 def test_empty(self): assert mean([]) == 0.0 def test_floats(self): assert abs(mean([1.5, 2.5, 3.5]) - 2.5) < 1e-9 class TestStd: def test_known_std(self): data = [2, 4, 4, 4, 5, 5, 7, 9] assert abs(std(data) - 2.13809) < 1e-4 def test_single(self): assert std([42]) == 0.0 def test_two_values(self): assert std([0, 2]) == math.sqrt(2) def test_empty(self): assert std([]) == 0.0 class TestPercentile: def test_median(self): assert percentile([1, 2, 3, 4, 5], 50) == 3.0 def test_p0(self): assert percentile([1, 2, 3, 4, 5], 0) == 1.0 def test_p100(self): assert percentile([1, 2, 3, 4, 5], 100) == 5.0 def test_empty(self): assert percentile([], 50) == 0.0 def test_interpolation(self): assert percentile([1, 2], 50) == 1.5 class TestPercentiles: def test_batch(self): result = percentiles([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [25, 50, 75]) assert result[50] == 5.5 assert result[25] > 0 assert result[75] > result[50] def test_empty(self): result = percentiles([], [50]) assert result[50] == 0.0 class TestMinMax: def test_min(self): assert min_val([3, 1, 2]) == 1 def test_max(self): assert max_val([3, 1, 2]) == 3 def test_min_empty(self): assert min_val([]) == 0.0 def test_max_empty(self): assert max_val([]) == 0.0