变更内容: - 删除 `src` 子目录,将模块引用路径从 `src.functional_scaffold` 更新为 `functional_scaffold`。 - 修改相关代码、文档、测试用例及配置文件中的路径引用,包括 `README.md`、`Dockerfile`、`uvicorn` 启动命令等。 - 优化项目目录结构,提升代码维护性和可读性。
78 lines
2.4 KiB
Python
78 lines
2.4 KiB
Python
"""算法单元测试"""
|
|
|
|
import pytest
|
|
from functional_scaffold.algorithms.prime_checker import PrimeChecker
|
|
|
|
|
|
class TestPrimeChecker:
|
|
"""质数判断算法测试"""
|
|
|
|
def setup_method(self):
|
|
"""每个测试方法前执行"""
|
|
self.checker = PrimeChecker()
|
|
|
|
def test_prime_numbers(self, sample_prime_numbers):
|
|
"""测试质数判断"""
|
|
for num in sample_prime_numbers:
|
|
result = self.checker.process(num)
|
|
assert result["is_prime"] is True
|
|
assert result["number"] == num
|
|
assert result["factors"] == []
|
|
assert result["algorithm"] == "trial_division"
|
|
|
|
def test_composite_numbers(self, sample_composite_numbers):
|
|
"""测试合数判断"""
|
|
for num in sample_composite_numbers:
|
|
result = self.checker.process(num)
|
|
assert result["is_prime"] is False
|
|
assert result["number"] == num
|
|
assert len(result["factors"]) > 0
|
|
assert result["algorithm"] == "trial_division"
|
|
|
|
def test_edge_cases(self):
|
|
"""测试边界情况"""
|
|
# 0 不是质数
|
|
result = self.checker.process(0)
|
|
assert result["is_prime"] is False
|
|
assert "reason" in result
|
|
|
|
# 1 不是质数
|
|
result = self.checker.process(1)
|
|
assert result["is_prime"] is False
|
|
assert "reason" in result
|
|
|
|
# 2 是质数
|
|
result = self.checker.process(2)
|
|
assert result["is_prime"] is True
|
|
|
|
# 负数不是质数
|
|
result = self.checker.process(-5)
|
|
assert result["is_prime"] is False
|
|
|
|
def test_large_prime(self):
|
|
"""测试大质数"""
|
|
large_prime = 7919 # 第1000个质数
|
|
result = self.checker.process(large_prime)
|
|
assert result["is_prime"] is True
|
|
|
|
def test_invalid_input(self):
|
|
"""测试无效输入"""
|
|
with pytest.raises(ValueError):
|
|
self.checker.process("not a number")
|
|
|
|
with pytest.raises(ValueError):
|
|
self.checker.process(3.14)
|
|
|
|
with pytest.raises(ValueError):
|
|
self.checker.process(None)
|
|
|
|
def test_execute_method(self):
|
|
"""测试 execute 方法(包含埋点)"""
|
|
result = self.checker.execute(17)
|
|
|
|
assert result["success"] is True
|
|
assert "result" in result
|
|
assert "metadata" in result
|
|
assert result["metadata"]["algorithm"] == "PrimeChecker"
|
|
assert "elapsed_time" in result["metadata"]
|