77 lines
1.7 KiB
Python
77 lines
1.7 KiB
Python
"""统计模块测试"""
|
|
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
|