def test1(self): textCode = "\n".join([ "x = 0", "i = 0", "while i < 10:", " i = i + 1", " x = x + i", "print(x)" ]) code = CP.parse(code=textCode) engine = Processor16Bits() cm = CM(engine, code) actionsList = cm.compile() asm = engine.getAsm(actionsList, False) good = "\n".join([ " MOVE r7, #0", " STORE @x, r7", " MOVE r7, #0", " STORE @i, r7", "Lab2 LOAD r7, @i", " MOVE r6, #10", " CMP r7, r6", " BLT Lab1", " JMP Lab3", "Lab1 LOAD r7, @i", " ADD r7, r7, #1", " STORE @i, r7", " LOAD r7, @x", " LOAD r6, @i", " ADD r7, r7, r6", " STORE @x, r7", " JMP Lab2", "Lab3 LOAD r7, @x", " PRINT r7", " HALT", ]) self.assertEqual(asm, good)
def test2(self): varX = Variable('x') varY = Variable('y') affectationX = TransfertNode( 4, varX, EP.buildExpression('-3*x+1')) # mypy: ignore affectationY = TransfertNode(5, varY, EP.buildExpression('y+x')) # mypy: ignore structuredList = [ TransfertNode(1, varX, EP.buildExpression('0')), TransfertNode(2, varY, EP.buildExpression('0')), WhileNode(3, EP.buildExpression('x < 10 or y < 100'), [affectationX, affectationY]), TransfertNode(6, None, EP.buildExpression('y')) ] engine = Processor12Bits() cm = CM(engine, structuredList) actionsList = cm.compile() strGlobal = "\n".join([str(item) for item in actionsList]) good = "\n".join([ " @#0 r3 load", " r3 @x store", " @#0 r3 load", " r3 @y store", "Lab2 @x r3 load", " @#10 r2 load", " r3 r2 <", " Lab1 goto", " @y r3 load", " @#100 r2 load", " r3 r2 <", " Lab1 goto", " Lab3 goto", "Lab1 @x r3 load", " @#3 r2 load", " r3 r2 r3 *", " r3 r3 -", " @#1 r2 load", " r3 r2 r3 +", " r3 @x store", " @y r3 load", " @x r2 load", " r3 r2 r3 +", " r3 @y store", " Lab2 goto", "Lab3 @y r3 load", " r3 print", " halt" ]) self.assertEqual(strGlobal, good)
def test1(self): textCode = "\n".join([ "x = 0", "i = 0", "while i < 10:", " i = i + 1", " x = x + i", "print(x)" ]) code = CP.parse(code=textCode) engine = Processor16Bits() cm = CM(engine, code) actionsList = cm.compile() addressList = engine._getAdresses(actionsList) result = "\n".join( sorted(["{} : {}".format(it, n) for it, n in addressList.items()])) good = "\n".join( ["@i : 21", "@x : 20", "Lab1 : 4", "Lab2 : 9", "Lab3 : 17"]) self.assertEqual(result, good)
def test2(self): textCode = "\n".join([ "x = 0", "i = 0", "while i < 10:", " i = i + 1", " x = x + i", "print(x)" ]) code = CP.parse(code=textCode) engine = Processor12Bits() cm = CM(engine, code) fifos = cm.compile() binaryCode = "\n".join(engine.getBinary(fifos)) good = "\n".join([ "100110010101", "101001011011", "100110010101", "101001011111", "100110010111", "100100011000", "111101011110", "001100001001", "000100010010", "100110010111", "100100011001", "111110001110", "101001011111", "100110010110", "100100010111", "111110001110", "101001011011", "000100000100", "100110010110", "010000000011", "000000000000", "000000000000", "000000000000", "000000000000", "000000001010", "000000000001" ]) self.assertEqual(binaryCode, good)
def test3(self): textCode = "\n".join([ "x = 0", "i = 0", "while i < 10:", " i = i + 1", " x = x + i", "print(x)" ]) code = CP.parse(code=textCode) engine = Processor12Bits() cm = CM(engine, code) actionsList = cm.compile() asm = engine.getAsm(actionsList, True) good = "\n".join([ " LOAD r3, @#0", " STORE @x, r3", " LOAD r3, @#0", " STORE @i, r3", "Lab2 LOAD r3, @i", " LOAD r2, @#10", " CMP r3, r2", " BLT Lab1", " JMP Lab3", "Lab1 LOAD r3, @i", " LOAD r2, @#1", " ADD r3, r3, r2", " STORE @i, r3", " LOAD r3, @x", " LOAD r2, @i", " ADD r3, r3, r2", " STORE @x, r3", " JMP Lab2", "Lab3 LOAD r3, @x", " PRINT r3", " HALT", "@#0 0", "@x 0", "@i 0", "@#10 10", "@#1 1" ]) self.assertEqual(asm, good)
def test3(self): code = CP.parse(filename="example2.code") engine = Processor16Bits() cm = CM(engine, code) actionsList = cm.compile() strGlobal = "\n".join([str(item) for item in actionsList]) good = "\n".join([ " #0 r7 move", " r7 @s store", " #0 r7 move", " r7 @i store", " @m input", "Lab2 @i r7 load", " @m r6 load", " r7 r6 <", " Lab1 goto", " Lab3 goto", "Lab1 @i r7 load", " r7 #2 r7 %", " #0 r6 move", " r7 r6 ==", " Lab4 goto", " Lab5 goto", "Lab4 @s r7 load", " @i r6 load", " r7 r6 r7 +", " r7 @s store", " @s r7 load", " #10 r6 move", " r7 r6 <", " Lab6 goto", " Lab5 goto", "Lab6 @s r7 load", " r7 #2 r7 *", " r7 @y store", " @y r7 load", " r7 print", "Lab5 @i r7 load", " r7 #3 r7 +", " r7 @i store", " Lab2 goto", "Lab3 @s r7 load", " r7 print", " halt" ]) self.assertEqual(strGlobal, good)