File: test_pprint.py

package info (click to toggle)
mypy 1.19.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 22,412 kB
  • sloc: python: 114,754; ansic: 13,343; cpp: 11,380; makefile: 257; sh: 28
file content (42 lines) | stat: -rw-r--r-- 1,281 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
from __future__ import annotations

import unittest

from mypyc.ir.ops import Assign, BasicBlock, Integer, IntOp, Op, Register, Unreachable
from mypyc.ir.pprint import generate_names_for_ir
from mypyc.ir.rtypes import int_rprimitive


def register(name: str) -> Register:
    return Register(int_rprimitive, "foo", is_arg=True)


def make_block(ops: list[Op]) -> BasicBlock:
    block = BasicBlock()
    block.ops.extend(ops)
    return block


class TestGenerateNames(unittest.TestCase):
    def test_empty(self) -> None:
        assert generate_names_for_ir([], []) == {}

    def test_arg(self) -> None:
        reg = register("foo")
        assert generate_names_for_ir([reg], []) == {reg: "foo"}

    def test_int_op(self) -> None:
        n1 = Integer(2)
        n2 = Integer(4)
        op1 = IntOp(int_rprimitive, n1, n2, IntOp.ADD)
        op2 = IntOp(int_rprimitive, op1, n2, IntOp.ADD)
        block = make_block([op1, op2, Unreachable()])
        assert generate_names_for_ir([], [block]) == {op1: "r0", op2: "r1"}

    def test_assign(self) -> None:
        reg = register("foo")
        n = Integer(2)
        op1 = Assign(reg, n)
        op2 = Assign(reg, n)
        block = make_block([op1, op2])
        assert generate_names_for_ir([reg], [block]) == {reg: "foo"}