"""算法单元测试""" 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"]