1
0

Added simple test infrastructure, and some simple tests.

This commit is contained in:
Jon Michael Aanes 2015-12-17 00:06:26 +01:00
parent 3f21bb52e3
commit 9397c8cc56
3 changed files with 72 additions and 2 deletions

View File

@ -2,7 +2,8 @@
import re
import sys
REGISTERS=["%rip","%rbp","%rsp","","%rax","%rdi","%r8","%r9"]
REGISTERS=["%rax", "%rbx", "%rcx", "%rdx", "%rsp", "%rbp", "%rsi", "%rdi",
"%r8," "%r9," "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"]
REG_STATUS_TO_COLOR = {
"insert": "green",
"change": "yellow",
@ -191,6 +192,7 @@ class Emulator:
elif opcode[:3] == "cmp":
self.compareVal(instruct[1],instruct[2])
elif opcode == "jg":
if self.status["g"]:
self.registers['%rip'] = self.labels[instruct[1]]

View File

@ -60,7 +60,8 @@ if __name__ == "__main__":
printf("Running for fib({})", a)
# Setup
emu = infernal.Emulator(fib_prog) #infernal.Emulator(fib_iter_prog)
registers = ["%rip","%rbp","%rsp","","%rax","%rdi","%r8","%r9"]
emu = infernal.Emulator(fib_prog, registers)
painter = infernal.TikzPainter()
emu.setStack("junk...", "calling eip")
emu.setRegs( rip = 0, rbp = 'old bp', rdi = a )

67
tests/tests.py Normal file
View File

@ -0,0 +1,67 @@
import os,sys,inspect
sys.path.insert(1, os.path.join(sys.path[0], '..'))
import infernal
################################################################################
tests = []
def add_test(name, result, register, code):
tests.append((name, result, register, code))
def execute_test (register, code):
emu = infernal.Emulator(code)
emu.setStack("junk...", "calling eip")
emu.setRegs( rip = 0, rbp = 'old bp')
for line_nr in emu:
pass
return emu.getVal(register)
def printf (str, *args):
print(str.format(*args))
def execute_tests():
print("Executing tests!")
total_tests = 0
failed_tests = 0
error_tests = 0
for name, result, register, code in tests:
total_tests += 1
try:
output = execute_test(register, code)
if output != result:
failed_tests += 1
printf("Failed in {}. {} was {}, should be {}",
name, register, result, output)
except BaseException as e:
error_tests += 1
printf("Encountered error in {}: {}",name,e)
printf("Tests done! {}/{}.",
total_tests - failed_tests - error_tests, total_tests)
printf("{} failed, and {} encountered a python error",
failed_tests, error_tests)
################################################################################
add_test("constant $255", 255, "%rsi", """
movq $255, %rsi
""")
add_test("static addition 10+$20", 30, "%rsi", """
movq $10, %rsi
addq $20, %rsi
""")
add_test("register addition 10+20", 30, "%rsi", """
movq $10, %rsi
movq $20, %rax
addq %rax, %rsi
""")
################################################################################
if __name__ == "__main__":
execute_tests()