34 lines
1.1 KiB
Python
34 lines
1.1 KiB
Python
|
import unittest
|
||
|
from typing import Dict
|
||
|
|
||
|
from mypyc.codegen.emit import Emitter, EmitterContext
|
||
|
from mypyc.ir.ops import BasicBlock, Value, Register
|
||
|
from mypyc.ir.rtypes import int_rprimitive
|
||
|
from mypyc.namegen import NameGenerator
|
||
|
|
||
|
|
||
|
class TestEmitter(unittest.TestCase):
|
||
|
def setUp(self) -> None:
|
||
|
self.n = Register(int_rprimitive, 'n')
|
||
|
self.context = EmitterContext(NameGenerator([['mod']]))
|
||
|
|
||
|
def test_label(self) -> None:
|
||
|
emitter = Emitter(self.context, {})
|
||
|
assert emitter.label(BasicBlock(4)) == 'CPyL4'
|
||
|
|
||
|
def test_reg(self) -> None:
|
||
|
names: Dict[Value, str] = {self.n: "n"}
|
||
|
emitter = Emitter(self.context, names)
|
||
|
assert emitter.reg(self.n) == 'cpy_r_n'
|
||
|
|
||
|
def test_emit_line(self) -> None:
|
||
|
emitter = Emitter(self.context, {})
|
||
|
emitter.emit_line('line;')
|
||
|
emitter.emit_line('a {')
|
||
|
emitter.emit_line('f();')
|
||
|
emitter.emit_line('}')
|
||
|
assert emitter.fragments == ['line;\n',
|
||
|
'a {\n',
|
||
|
' f();\n',
|
||
|
'}\n']
|