def test_add_addressed_tilealias():
    code = [
        parser.AliasStmt(tile_no="3", symbolic_name="myTile"),
        parser.AssignOp("inbox", "emp"),
        parser.AssignOp("emp", "myTile"),
        parser.AddOp(parser.AddressOf("myTile"))
    ]
    assert get_assembly(code) == [
        {"operation": "inbox"},
        {"operation": "copyto", "operand": {"Cell": 3}},
        {"operation": "add", "operand": {"Address": 3}}
    ]
def test_copyto_addressof_alias():
    code = [parser.AliasStmt(3, "knownLabel"), parser.AssignOp("emp", parser.AddressOf("knownLabel"))]
    assert get_assembly(code) == [{"operation": "copyto", "operand": {"Address": 3}}]
def test_copyto_equivalence():
    alias_ast = [parser.AliasStmt(3, "knownLabel"), parser.AssignOp("emp", "knownLabel")]
    tile_ast = [parser.AssignOp("emp", "3")]
    assert get_assembly(alias_ast) == get_assembly(tile_ast)
def test_copyfrom_alias():
    code = [parser.AliasStmt(3, "knownLabel"), parser.AssignOp("knownLabel", "emp")]
    assert get_assembly(code) == [{"operation": "copyfrom", "operand": {"Cell": 3}}]
def test_sub_addressed_tilealias():
    code = [
        parser.AliasStmt("5", "myTile"),
        parser.SubOp(parser.AddressOf("myTile"))
    ]
    assert get_assembly(code) == [{"operation": "sub", "operand": {"Address": 5}}]
def test_sub_tilealias():
    code = [
        parser.AliasStmt("5", "myTile"),
        parser.SubOp("myTile")
    ]
    assert get_assembly(code) == [{"operation": "sub", "operand": {"Cell": 5}}]
def test_decr_address_withlabel():
    code = [parser.AliasStmt("0", "mylabel"), parser.DecrOp(parser.AddressOf("mylabel"))]
    assert get_assembly(code) == [{"operation": "bump-", "operand": {"Address": 0}}]
def test_decr_withlabel():
    code = [parser.AliasStmt("0", "mylabel"), parser.DecrOp("mylabel")]
    assert get_assembly(code) == [{"operation": "bump-", "operand": {"Cell": 0}}]