From 920406b1595ac35f9a134eb0457e1a78fa1220b2 Mon Sep 17 00:00:00 2001 From: Orual Date: Sat, 7 Mar 2026 05:10:13 -0500 Subject: [PATCH] fix: add concrete assertions to integration test and fix ResolvedDest.frame_dest type annotation --- asm/ir.py | 4 ++-- tests/test_allocate_frames.py | 39 +++++++++++++++++++---------------- 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/asm/ir.py b/asm/ir.py index 853851d..71abba5 100644 --- a/asm/ir.py +++ b/asm/ir.py @@ -11,7 +11,7 @@ from dataclasses import dataclass, field, replace from enum import Enum from typing import TYPE_CHECKING, Iterator, Optional, Union -from cm_inst import ALUOp, MemOp, Port +from cm_inst import ALUOp, FrameDest, MemOp, Port if TYPE_CHECKING: from asm.errors import AssemblyError @@ -58,7 +58,7 @@ class ResolvedDest: """ name: str addr: Optional[object] = None - frame_dest: Optional[object] = None + frame_dest: Optional[FrameDest] = None @dataclass(frozen=True) diff --git a/tests/test_allocate_frames.py b/tests/test_allocate_frames.py index cec8081..5d9ec83 100644 --- a/tests/test_allocate_frames.py +++ b/tests/test_allocate_frames.py @@ -30,6 +30,7 @@ from cm_inst import ( Port, RoutingOp, OutputStyle, + TokenKind, ) @@ -666,33 +667,35 @@ class TestFrameLayoutIntegration: # Verify no errors assert not result.errors, f"Unexpected errors: {result.errors}" - # Verify that nodes got allocated - add_node = result.nodes.get("&add") - inc_node = result.nodes.get("&inc") + add_node = result.nodes["&add"] + inc_node = result.nodes["&inc"] - assert add_node is not None - assert inc_node is not None + # IRAM offsets: &add is dyadic -> offset 0, &inc is monadic -> offset 1 + assert add_node.iram_offset == 0 + assert inc_node.iram_offset == 1 - # Verify IRAM offsets assigned - assert add_node.iram_offset is not None - assert inc_node.iram_offset is not None + # Both in root scope -> act_id 0 + assert add_node.act_id == 0 + assert inc_node.act_id == 0 - # Verify activation IDs assigned - assert add_node.act_id is not None - assert inc_node.act_id is not None + # &add has 1 outgoing edge, no const -> INHERIT, False, 1 + assert add_node.mode == (OutputStyle.INHERIT, False, 1) + # &inc has 0 outgoing edges, no const -> INHERIT, False, 0 + assert inc_node.mode == (OutputStyle.INHERIT, False, 0) - # Verify modes computed - assert add_node.mode is not None - assert inc_node.mode is not None - - # Verify frame layouts assigned + # Frame layouts assigned assert add_node.frame_layout is not None assert inc_node.frame_layout is not None - # Verify frefs assigned + # Frefs: both in same activation, &add needs 1 dest slot, &inc needs 0 assert add_node.fref is not None assert inc_node.fref is not None - # Verify destinations resolved + # &add dest_l resolves to &inc assert add_node.dest_l is not None assert add_node.dest_l.frame_dest is not None + assert add_node.dest_l.frame_dest.target_pe == 0 + assert add_node.dest_l.frame_dest.offset == 1 + assert add_node.dest_l.frame_dest.act_id == 0 + assert add_node.dest_l.frame_dest.port == Port.L + assert add_node.dest_l.frame_dest.token_kind == TokenKind.MONADIC -- 2.51.2