Files
ENIG/Cs_HMI/PathLogic/debug_universal.py
2025-09-18 17:25:14 +09:00

60 lines
2.5 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from universal_pathfinder import UniversalAGVPathfinder, UniversalPathFormatter
from agv_pathfinder import AGVMap, AgvDirection
def test_q1_1_all():
"""Q1-1 전체 케이스 테스트"""
print("=== Q1-1 All Cases Test ===")
# 맵 로드
agv_map = AGVMap()
agv_map.load_from_file(r"C:\Data\Source\(5613#) ENIG AGV\Source\Cs_HMI\Data\NewMap.agvmap")
pathfinder = UniversalAGVPathfinder(agv_map)
# Q1-1 정답들 (실제 사용자가 제공한 정답)
expected_answers = {
"040": "032 ->(F) 031 ->(R) 032 -> 040",
"041": "032 ->(F) 040 ->(R) 032 -> 031 -> 041",
"008": "032 ->(B) 033 -> 034 -> 035 -> 036 -> 037 -> 005 -> 006 -> 007 -> 008",
"001": "032 ->(B) 033 -> 034 -> 035 -> 036 -> 037 -> 005 -> 004 -> 003 -> 002 -> 001",
"011": "032 ->(B) 033 -> 034 -> 035 -> 036 -> 037 -> 005 -> 004 -> 030 -> 009 -> 010 -> 011",
"019": "032 ->(B) 033 -> 034 -> 035 -> 036 -> 037 -> 005 -> 004 -> 012 -> 013 ->(F) -> 012 -> 016 -> 017 -> 018 -> 019",
"015": "032 ->(B) 033 -> 034 -> 035 -> 036 -> 037 -> 005 -> 004 -> 012 -> 016 ->(F) -> 012 -> 013 -> 014 -> 015"
}
print(f"\nQ1-1 시나리오: 033->032(F) 상황에서의 목적지별 경로")
success_count = 0
for target, expected in expected_answers.items():
print(f"\n--- Target: {target} ---")
result = pathfinder.find_path(start_rfid="032", target_rfid=target, current_direction=AgvDirection.FORWARD, came_from_rfid="033")
if target == "015": # 015 케이스 디버깅
print(f"DEBUG - Steps count: {len(result.path_steps)}")
for i, step in enumerate(result.path_steps):
from_rfid = agv_map.get_node(step.from_node).rfid_id
to_rfid = agv_map.get_node(step.to_node).rfid_id
print(f" Step {i}: {from_rfid} -> {to_rfid} ({step.motor_direction.value})")
print()
if result.success:
actual_path = UniversalPathFormatter.format_path(result, agv_map)
print(f"실제: {actual_path}")
print(f"정답: {expected}")
if actual_path == expected:
print("[SUCCESS]")
success_count += 1
else:
print("[FAILED] - Path mismatch")
else:
print(f"[FAILED]: {result.error_message}")
print(f"\n=== Q1-1 결과: {success_count}/7 성공 ===")
return success_count == 7
if __name__ == "__main__":
test_q1_1_all()