Files
FunctionalScaffold/tests/test_algorithms.py
Roog (顾新培) 88cfe91c56 main:移除 src 目录结构,更新模块引用路径
变更内容:
- 删除 `src` 子目录,将模块引用路径从 `src.functional_scaffold` 更新为 `functional_scaffold`。
- 修改相关代码、文档、测试用例及配置文件中的路径引用,包括 `README.md`、`Dockerfile`、`uvicorn` 启动命令等。
- 优化项目目录结构,提升代码维护性和可读性。
2026-02-03 18:38:08 +08:00

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"]