196 lines
5.8 KiB
Python
196 lines
5.8 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
测试历史迭代展示功能
|
|
验证生成过程的历史记录和展示功能
|
|
"""
|
|
|
|
import sys
|
|
import os
|
|
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
|
|
|
|
from maze_generator import MazeGenerator
|
|
from maze import Maze
|
|
import time
|
|
|
|
def test_history_generation():
|
|
"""测试迷宫生成历史记录功能"""
|
|
print("=== 测试迷宫生成历史记录 ===")
|
|
|
|
generator = MazeGenerator(size=21, filename="test.csv", name="测试迷宫")
|
|
generator.generate(seed=12345)
|
|
|
|
history = generator.get_history_mazes()
|
|
print(f"历史步数: {len(history)}")
|
|
|
|
if len(history) == 0:
|
|
print("❌ 历史记录为空")
|
|
return False
|
|
|
|
# 验证历史记录的每一步都是有效的迷宫
|
|
for i, maze_state in enumerate(history):
|
|
if len(maze_state) != 21 or len(maze_state[0]) != 21:
|
|
print(f"❌ 历史步骤 {i} 尺寸错误: {len(maze_state)}x{len(maze_state[0])}")
|
|
return False
|
|
|
|
print(f"✅ 历史记录验证通过,共 {len(history)} 步")
|
|
return True
|
|
|
|
def test_maze_history_methods():
|
|
"""测试Maze类的历史展示方法"""
|
|
print("\n=== 测试Maze历史展示方法 ===")
|
|
|
|
maze = Maze(wall_size=30, maze_size=630, file_name="test.csv")
|
|
maze.generate()
|
|
|
|
# 验证历史数据
|
|
if len(maze.history_mazes) == 0:
|
|
print("❌ 生成后历史数据为空")
|
|
return False
|
|
|
|
print(f"历史步数: {len(maze.history_mazes)}")
|
|
print(f"初始历史步骤: {maze.history_step}")
|
|
print(f"初始展示模式: {'历史' if maze.show_history else '路径'}")
|
|
|
|
# 测试历史步骤控制
|
|
original_step = maze.history_step
|
|
|
|
# 测试下一步
|
|
result = maze.next_history_step()
|
|
if result and maze.history_step == original_step + 1:
|
|
print("✅ next_history_step 正常工作")
|
|
else:
|
|
print(f"❌ next_history_step 失败,步骤: {original_step} -> {maze.history_step}")
|
|
return False
|
|
|
|
# 测试上一步
|
|
result = maze.prev_history_step()
|
|
if result and maze.history_step == original_step:
|
|
print("✅ prev_history_step 正常工作")
|
|
else:
|
|
print(f"❌ prev_history_step 失败,步骤: {maze.history_step}")
|
|
return False
|
|
|
|
# 测试模式切换
|
|
original_mode = maze.show_history
|
|
maze.toggle_history_mode()
|
|
if maze.show_history != original_mode:
|
|
print("✅ toggle_history_mode 正常工作")
|
|
else:
|
|
print("❌ toggle_history_mode 失败")
|
|
return False
|
|
|
|
# 切换回原模式
|
|
maze.toggle_history_mode()
|
|
|
|
return True
|
|
|
|
def test_load_without_history():
|
|
"""测试加载存档时不展示历史"""
|
|
print("\n=== 测试加载存档时历史处理 ===")
|
|
|
|
# 先生成一个迷宫并保存
|
|
maze1 = Maze(wall_size=30, maze_size=600, file_name="test.csv")
|
|
maze1.generate()
|
|
|
|
if len(maze1.history_mazes) == 0:
|
|
print("❌ 生成的迷宫没有历史数据")
|
|
return False
|
|
|
|
print(f"生成迷宫的历史步数: {len(maze1.history_mazes)}")
|
|
|
|
# 保存迷宫
|
|
save_result = maze1.save_game(format_type="json")
|
|
if not save_result:
|
|
print("❌ 保存迷宫失败")
|
|
return False
|
|
|
|
# 创建新的迷宫实例并加载
|
|
maze2 = Maze(wall_size=30, maze_size=600, file_name="test.csv")
|
|
|
|
# 假设有一个保存的文件
|
|
import glob
|
|
json_files = glob.glob("saves/*.json")
|
|
if not json_files:
|
|
print("❌ 没有找到保存的JSON文件")
|
|
return False
|
|
|
|
load_result = maze2.load_game(json_files[0])
|
|
if not load_result:
|
|
print("❌ 加载迷宫失败")
|
|
return False
|
|
|
|
# 验证加载后历史数据被清空
|
|
if len(maze2.history_mazes) == 0 and not maze2.show_history:
|
|
print("✅ 加载存档后历史数据正确清空")
|
|
return True
|
|
else:
|
|
print(f"❌ 加载存档后历史数据未正确清空: {len(maze2.history_mazes)} 步, 展示模式: {maze2.show_history}")
|
|
return False
|
|
|
|
def test_history_boundary_conditions():
|
|
"""测试历史展示的边界条件"""
|
|
print("\n=== 测试历史展示边界条件 ===")
|
|
|
|
maze = Maze(wall_size=30, maze_size=600, file_name="test.csv")
|
|
maze.generate()
|
|
|
|
if len(maze.history_mazes) == 0:
|
|
print("❌ 没有历史数据进行测试")
|
|
return False
|
|
|
|
# 测试超出上限
|
|
maze.history_step = len(maze.history_mazes) - 1
|
|
result = maze.next_history_step()
|
|
if not result:
|
|
print("✅ 历史步骤上限控制正常")
|
|
else:
|
|
print("❌ 历史步骤上限控制失败")
|
|
return False
|
|
|
|
# 测试超出下限
|
|
maze.history_step = 0
|
|
result = maze.prev_history_step()
|
|
if not result:
|
|
print("✅ 历史步骤下限控制正常")
|
|
else:
|
|
print("❌ 历史步骤下限控制失败")
|
|
return False
|
|
|
|
return True
|
|
|
|
def main():
|
|
print("开始测试历史迭代展示功能...")
|
|
|
|
tests = [
|
|
test_history_generation,
|
|
test_maze_history_methods,
|
|
test_load_without_history,
|
|
test_history_boundary_conditions
|
|
]
|
|
|
|
passed = 0
|
|
total = len(tests)
|
|
|
|
for test in tests:
|
|
try:
|
|
if test():
|
|
passed += 1
|
|
else:
|
|
print(f"❌ 测试 {test.__name__} 失败")
|
|
except Exception as e:
|
|
print(f"❌ 测试 {test.__name__} 出现异常: {str(e)}")
|
|
|
|
print(f"\n=== 测试结果 ===")
|
|
print(f"通过: {passed}/{total}")
|
|
|
|
if passed == total:
|
|
print("🎉 所有历史迭代展示功能测试通过!")
|
|
return True
|
|
else:
|
|
print("❌ 部分测试失败,请检查相关功能")
|
|
return False
|
|
|
|
if __name__ == "__main__":
|
|
success = main()
|
|
sys.exit(0 if success else 1)
|