test_pprint.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. from __future__ import annotations
  2. import unittest
  3. from mypyc.ir.ops import Assign, BasicBlock, Integer, IntOp, Op, Register, Unreachable
  4. from mypyc.ir.pprint import generate_names_for_ir
  5. from mypyc.ir.rtypes import int_rprimitive
  6. def register(name: str) -> Register:
  7. return Register(int_rprimitive, "foo", is_arg=True)
  8. def make_block(ops: list[Op]) -> BasicBlock:
  9. block = BasicBlock()
  10. block.ops.extend(ops)
  11. return block
  12. class TestGenerateNames(unittest.TestCase):
  13. def test_empty(self) -> None:
  14. assert generate_names_for_ir([], []) == {}
  15. def test_arg(self) -> None:
  16. reg = register("foo")
  17. assert generate_names_for_ir([reg], []) == {reg: "foo"}
  18. def test_int_op(self) -> None:
  19. n1 = Integer(2)
  20. n2 = Integer(4)
  21. op1 = IntOp(int_rprimitive, n1, n2, IntOp.ADD)
  22. op2 = IntOp(int_rprimitive, op1, n2, IntOp.ADD)
  23. block = make_block([op1, op2, Unreachable()])
  24. assert generate_names_for_ir([], [block]) == {op1: "r0", op2: "r1"}
  25. def test_assign(self) -> None:
  26. reg = register("foo")
  27. n = Integer(2)
  28. op1 = Assign(reg, n)
  29. op2 = Assign(reg, n)
  30. block = make_block([op1, op2])
  31. assert generate_names_for_ir([reg], [block]) == {reg: "foo"}