You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
MAI/tests/test_autopilot_proto_udp.py

64 lines
1.8 KiB
Python

from pathlib import Path
import struct
import sys
PROJECT_ROOT = Path(__file__).resolve().parents[1]
if str(PROJECT_ROOT) not in sys.path:
sys.path.insert(0, str(PROJECT_ROOT))
from autopilot_bridge import (
AutopilotCommand,
build_proto_udp_payload,
select_proto_udp_target_state,
)
def test_select_proto_udp_target_state_uses_tracker_state_when_detection_is_lost():
assert select_proto_udp_target_state(confirmed=False, miss_streak=0) == 0
assert select_proto_udp_target_state(confirmed=True, miss_streak=0) == 1
assert select_proto_udp_target_state(confirmed=True, miss_streak=4) == 3
def test_build_proto_udp_payload_encodes_offsets_and_bbox_area():
cmd = AutopilotCommand()
cmd.target_id = 7
cmd.target_state = 1
cmd.frame_w = 1000
cmd.frame_h = 500
cmd.aim_x = 650.0
cmd.aim_y = 150.0
cmd.bbox_w = 200.0
cmd.bbox_h = 50.0
payload = build_proto_udp_payload(cmd)
unpacked = struct.unpack("<BBBhhbbB", payload)
assert unpacked == (
1, # descriptor
7, # object_id
1, # target_state
100, # vertical px: up is positive
150, # horizontal px: right is positive
40, # vertical percent relative to half frame height
30, # horizontal percent relative to half frame width
2, # bbox area percent
)
def test_build_proto_udp_payload_returns_zeroed_target_fields_when_target_is_missing():
cmd = AutopilotCommand()
cmd.target_id = None
cmd.target_state = 0
cmd.frame_w = 1280
cmd.frame_h = 720
cmd.aim_x = None
cmd.aim_y = None
cmd.bbox_w = None
cmd.bbox_h = None
payload = build_proto_udp_payload(cmd)
unpacked = struct.unpack("<BBBhhbbB", payload)
assert unpacked == (1, 0, 0, 0, 0, 0, 0, 0)