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()