feat: PLANNING体系首版(00路线图/02任务总表/03执行协议/I-03/I-04/registry42口径)+M1止血交付
This commit is contained in:
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
@@ -0,0 +1,27 @@
|
||||
"""迷你计算库 —— dim4 fixture(已修复版本,供自检使用)。"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
def add(a: float, b: float) -> float:
|
||||
return a + b
|
||||
|
||||
|
||||
def div(a: float, b: float) -> float:
|
||||
if b == 0:
|
||||
raise ValueError("divisor must not be zero")
|
||||
return a / b
|
||||
|
||||
|
||||
def average(values: list[float]) -> float:
|
||||
if not values:
|
||||
return 0.0
|
||||
return sum(values) / len(values)
|
||||
|
||||
|
||||
def clamp(value: float, lo: float, hi: float) -> float:
|
||||
if value < lo:
|
||||
return lo
|
||||
if value > hi:
|
||||
return hi
|
||||
return value
|
||||
@@ -0,0 +1,31 @@
|
||||
"""统计工具 —— dim4 Q4.2 自检产物。"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
def mean(values: list[float]) -> float:
|
||||
if not values:
|
||||
return 0.0
|
||||
return sum(values) / len(values)
|
||||
|
||||
|
||||
def median(values: list[float]) -> float:
|
||||
if not values:
|
||||
return 0.0
|
||||
s = sorted(values)
|
||||
n = len(s)
|
||||
mid = n // 2
|
||||
if n % 2:
|
||||
return s[mid]
|
||||
return (s[mid - 1] + s[mid]) / 2
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
assert mean([]) == 0.0
|
||||
assert mean([1, 2, 3]) == 2.0
|
||||
print("M-OK")
|
||||
assert median([]) == 0.0
|
||||
assert median([1, 3]) == 2.0
|
||||
assert median([1, 2, 3, 4]) == 2.5
|
||||
print("MD-OK")
|
||||
print("all stats self-tests passed")
|
||||
@@ -0,0 +1,47 @@
|
||||
"""calc.py 的测试 —— dim4 fixture(禁止被测模型修改本文件)。"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import unittest
|
||||
|
||||
from calc import add, average, clamp, div
|
||||
|
||||
|
||||
class TestAdd(unittest.TestCase):
|
||||
def test_basic(self):
|
||||
self.assertEqual(add(1, 2), 3)
|
||||
|
||||
def test_float(self):
|
||||
self.assertAlmostEqual(add(0.1, 0.2), 0.3, places=6)
|
||||
|
||||
|
||||
class TestDiv(unittest.TestCase):
|
||||
def test_basic(self):
|
||||
self.assertEqual(div(6, 3), 2)
|
||||
|
||||
def test_zero_raises_value_error(self):
|
||||
with self.assertRaises(ValueError):
|
||||
div(1, 0)
|
||||
|
||||
|
||||
class TestAverage(unittest.TestCase):
|
||||
def test_basic(self):
|
||||
self.assertEqual(average([1, 2, 3]), 2.0)
|
||||
|
||||
def test_empty_returns_zero(self):
|
||||
self.assertEqual(average([]), 0.0)
|
||||
|
||||
|
||||
class TestClamp(unittest.TestCase):
|
||||
def test_inside(self):
|
||||
self.assertEqual(clamp(5, 0, 10), 5)
|
||||
|
||||
def test_below(self):
|
||||
self.assertEqual(clamp(-3, 0, 10), 0)
|
||||
|
||||
def test_above(self):
|
||||
self.assertEqual(clamp(99, 0, 10), 10)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user