Files
Cognitive_Agent/domains/seat/tests/unit/test_matrix_compiler.py

85 lines
3.3 KiB
Python
Executable File

from __future__ import annotations
import unittest
from pathlib import Path
from seat_domain.compiler import SeatCompiler
from seat_domain.generator import build_function_config
from seat_domain.intent import parse_local_intent
from seat_domain.matrix import SeatCanMatrix
DOMAIN_ROOT = Path(__file__).resolve().parents[2]
class MatrixCompilerTests(unittest.TestCase):
def setUp(self) -> None:
self.matrix = SeatCanMatrix(DOMAIN_ROOT / "can" / "seat-thermal-matrix.yaml")
self.combined_matrix = SeatCanMatrix(
[
DOMAIN_ROOT / "can" / "seat-thermal-matrix.yaml",
DOMAIN_ROOT / "can" / "seat-motion-virtual-matrix.yaml",
]
)
self.compiler = SeatCompiler(DOMAIN_ROOT / "can" / "signal-mapping.yaml")
def test_encodes_combined_control_bits(self) -> None:
parsed = parse_local_intent("打开副驾座椅通风,同时关闭副驾座椅加热")
config = build_function_config(parsed, "req-test-001", "local_rules")
plan = self.compiler.compile(config)
command = plan["spec"]["commands"][0]
frame = self.matrix.encode(command["message"], command["signals"])
self.assertEqual(frame["frame_id"], "0x42A")
self.assertEqual(frame["data_hex"], "00 90")
def test_compilation_is_deterministic(self) -> None:
parsed = parse_local_intent("关闭副驾座椅通风")
config = build_function_config(parsed, "req-test-002", "local_rules")
self.assertEqual(self.compiler.compile(config), self.compiler.compile(config))
def test_compiles_each_motion_axis_with_feedback_completion(self) -> None:
parsed = {
"detected_domains": ["seat"],
"actions": [
{
"action_type": "position",
"target": "passenger",
"axis": "longitudinal",
"position_pct": 35,
},
{
"action_type": "position",
"target": "passenger",
"axis": "backrest_recline",
"position_pct": 60,
},
],
"deferred_requests": [],
"ambiguities": [],
"decision_summary": ["Move two front-passenger-seat axes."],
"confidence": 1.0,
}
config = build_function_config(parsed, "req-motion-001", "test")
plan = self.compiler.compile(config)
self.assertEqual(len(plan["spec"]["commands"]), 2)
first, second = plan["spec"]["commands"]
self.assertEqual(first["message"], "Passenger_Seat_Motion_Command_551")
self.assertEqual(first["signals"]["Longitudinal_Target_Pct"], 35)
self.assertEqual(first["signals"]["Motion_Enable_Mask"], 1)
self.assertEqual(first["completion"]["message"], "Passenger_Seat_Motion_Status_559")
self.assertEqual(first["completion"]["signal"], "Longitudinal_Actual_Pct")
self.assertEqual(second["signals"]["Backrest_Recline_Target_Pct"], 60)
self.assertEqual(second["signals"]["Motion_Enable_Mask"], 4)
frame = self.combined_matrix.encode(first["message"], first["signals"])
self.assertEqual(frame["frame_id"], "0x551")
self.assertEqual(frame["payload_size"], 8)
if __name__ == "__main__":
unittest.main()