from __future__ import annotations from pathlib import Path import unittest from app.config.xml_mapping import load_config from app.core.geometry import segment_led_positions, segment_side ROOT = Path(__file__).resolve().parents[1] SAMPLE_MAPPING = ROOT / "sample_data" / "infinity_mirror_mapping_clean.xml" class GeometryTests(unittest.TestCase): def test_segment_side_inference_matches_mapping_edges(self) -> None: config = load_config(SAMPLE_MAPPING) tile = config.sorted_tiles()[0] self.assertEqual( { segment.name: segment_side(tile, segment) for segment in tile.segments }, { "1 - 81 LED 27": "left", "82 - 162 LED 27": "bottom", "163 - 243 LED 27": "right", "244 - 318 LED 25": "top", }, ) def test_segment_led_positions_follow_counterclockwise_channel_order(self) -> None: config = load_config(SAMPLE_MAPPING) tile = config.sorted_tiles()[0] positions_by_side = { segment.side: segment_led_positions(tile, segment, insets=(0.02, 0.02)) for segment in tile.segments } self.assertEqual(positions_by_side["left"][0], (0.02, 0.02)) self.assertEqual(positions_by_side["left"][-1], (0.02, 0.98)) self.assertEqual(positions_by_side["bottom"][0], (0.02, 0.98)) self.assertEqual(positions_by_side["bottom"][-1], (0.98, 0.98)) self.assertEqual(positions_by_side["right"][0], (0.98, 0.98)) self.assertEqual(positions_by_side["right"][-1], (0.98, 0.02)) self.assertEqual(positions_by_side["top"][0], (0.98, 0.02)) self.assertEqual(positions_by_side["top"][-1], (0.02, 0.02)) if __name__ == "__main__": unittest.main()