McRogueFace/tests/vllm_demo/test_world_graph.py

140 lines
3.8 KiB
Python

"""
Unit tests for WorldGraph
"""
from world_graph import (
WorldGraph, Room, Door, WorldObject, Direction,
AgentInfo, create_two_room_scenario, create_button_door_scenario
)
def test_room_contains():
"""Test room boundary checking."""
room = Room("test", "test room", bounds=(5, 5, 10, 10))
assert room.contains(5, 5) == True # Top-left corner
assert room.contains(14, 14) == True # Bottom-right (exclusive)
assert room.contains(15, 15) == False # Outside
assert room.contains(4, 5) == False # Just outside left
print("PASS: room_contains")
def test_room_at():
"""Test spatial room lookup."""
world = create_two_room_scenario()
# Guard room is at (1,1) with size (8,8)
room = world.room_at(3, 3)
assert room is not None
assert room.name == "guard_room"
# Armory is at (11,1) with size (8,8)
room = world.room_at(13, 3)
assert room is not None
assert room.name == "armory"
# Between rooms (the door area) - should return None
room = world.room_at(9, 4)
assert room is None
print("PASS: room_at")
def test_describe_room_basic():
"""Test basic room description."""
world = create_two_room_scenario()
desc = world.describe_room("guard_room")
assert "You are in the guard room" in desc
assert "brass key" in desc
assert "Exits:" in desc
assert "east" in desc
assert "armory" in desc
print("PASS: describe_room_basic")
print(f" Output: {desc}")
def test_describe_room_with_agents():
"""Test room description with visible agents."""
world = create_two_room_scenario()
agents = [
AgentInfo("Wizard", "a wizard", (3, 3)),
AgentInfo("Knight", "a knight", (4, 4)),
]
desc = world.describe_room("guard_room", visible_agents=agents, observer_name="Wizard")
assert "knight" in desc.lower()
assert "wizard" not in desc.lower() # Observer excluded
print("PASS: describe_room_with_agents")
print(f" Output: {desc}")
def test_describe_locked_door():
"""Test that locked doors are described correctly."""
world = create_button_door_scenario()
desc = world.describe_room("button_room")
assert "locked" in desc.lower()
print("PASS: describe_locked_door")
print(f" Output: {desc}")
def test_available_actions():
"""Test action enumeration."""
world = create_two_room_scenario()
actions = world.get_available_actions("guard_room")
assert "GO EAST" in actions
assert "TAKE brass_key" in actions
assert "LOOK" in actions
assert "WAIT" in actions
print("PASS: available_actions")
print(f" Actions: {actions}")
def test_determinism():
"""Test that descriptions are deterministic."""
world = create_two_room_scenario()
desc1 = world.describe_room("guard_room")
desc2 = world.describe_room("guard_room")
desc3 = world.describe_room("guard_room")
assert desc1 == desc2 == desc3, "Descriptions must be deterministic!"
print("PASS: determinism")
def test_direction_opposites():
"""Test direction opposite calculation."""
assert Direction.NORTH.opposite == Direction.SOUTH
assert Direction.SOUTH.opposite == Direction.NORTH
assert Direction.EAST.opposite == Direction.WEST
assert Direction.WEST.opposite == Direction.EAST
print("PASS: direction_opposites")
def run_all_tests():
"""Run all WorldGraph tests."""
print("=" * 50)
print("WorldGraph Unit Tests")
print("=" * 50)
test_room_contains()
test_room_at()
test_describe_room_basic()
test_describe_room_with_agents()
test_describe_locked_door()
test_available_actions()
test_determinism()
test_direction_opposites()
print("=" * 50)
print("All tests passed!")
print("=" * 50)
if __name__ == "__main__":
run_all_tests()