- Modified plan_next_actions in server.py to remove selected positions from regard_list, preventing reuse in subsequent planning steps for better AI decision-making - Added comprehensive unit tests in test_map.py for enemy_to_walls and choose_enemy functions to ensure correct behavior and distance calculations in the game map
65 lines
1.8 KiB
Python
65 lines
1.8 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Unit tests for Map class functions: enemy_to_walls and choose_enemy.
|
|
"""
|
|
import sys
|
|
import os
|
|
sys.path.append(os.path.dirname(__file__))
|
|
|
|
from server import Map, world
|
|
from lib.game_engine import GameMap
|
|
|
|
def test_enemy_to_walls():
|
|
"""Test enemy_to_walls function."""
|
|
# Mock world with walls
|
|
world.walls = {(0, 0), (5, 5), (10, 10)}
|
|
world.width = 20
|
|
world.height = 20
|
|
|
|
my_map = Map()
|
|
|
|
# Test case 1: enemy at (0, 0), nearest wall is itself
|
|
assert my_map.enemy_to_walls(0, 0) == 0
|
|
|
|
# Test case 2: enemy at (1, 1), distance to (0,0) is 2
|
|
assert my_map.enemy_to_walls(1, 1) == 2
|
|
|
|
# Test case 3: enemy at (6, 6), distance to (5,5) is 2
|
|
assert my_map.enemy_to_walls(6, 6) == 2
|
|
|
|
# Test case 4: enemy at (15, 15), distance to (10,10) is 10
|
|
assert my_map.enemy_to_walls(15, 15) == 10
|
|
|
|
print("test_enemy_to_walls passed!")
|
|
|
|
def test_choose_enemy():
|
|
"""Test choose_enemy function logic without full map."""
|
|
# Mock world
|
|
world.walls = {(0, 0), (19, 19)}
|
|
world.width = 20
|
|
world.height = 20
|
|
|
|
my_map = Map()
|
|
my_map.width = 20
|
|
my_map.height = 20
|
|
|
|
# Mock my_side_is_left
|
|
global my_side_is_left
|
|
my_side_is_left = True # Left side
|
|
|
|
enemy_positions = [(5, 5)] # Only one enemy to avoid complexity
|
|
|
|
# Since length function is complex, we'll just check that the function runs without error
|
|
# and returns the expected type
|
|
result = my_map.choose_enemy(2, 2, enemy_positions)
|
|
assert isinstance(result, tuple), "Should return a tuple"
|
|
assert len(result) == 2, "Tuple should have 2 elements"
|
|
print(f"choose_enemy returned: {result}")
|
|
|
|
print("test_choose_enemy passed!")
|
|
|
|
if __name__ == "__main__":
|
|
test_enemy_to_walls()
|
|
test_choose_enemy()
|
|
print("All tests passed!")
|