You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.3 KiB
Python
54 lines
1.3 KiB
Python
3 years ago
|
from riscemu import AssemblyFileLoader
|
||
|
from riscemu.colors import *
|
||
|
|
||
|
FMT_SUCCESS = FMT_GREEN + FMT_BOLD
|
||
|
|
||
|
def run_test(path: str):
|
||
|
from riscemu import CPU, UserModeCPU, RunConfig
|
||
|
from riscemu.instructions import InstructionSetDict
|
||
|
from test.test_isa import TestIS
|
||
|
import os
|
||
|
|
||
|
fname = os.path.basename(path)
|
||
|
|
||
|
ISAs = list(InstructionSetDict.values())
|
||
|
ISAs.append(TestIS)
|
||
|
|
||
|
cpu = UserModeCPU(ISAs, RunConfig())
|
||
|
try:
|
||
|
program = AssemblyFileLoader(path, {}).parse()
|
||
|
cpu.load_program(program)
|
||
|
cpu.launch(program)
|
||
|
except Exception as ex:
|
||
|
print(FMT_ERROR + '[Test] 🔴 failed with exception "{}" ({})'.format(ex, fname) + FMT_NONE)
|
||
|
raise ex
|
||
|
|
||
|
if cpu.halted:
|
||
|
for isa in cpu.instruction_sets:
|
||
|
if isinstance(isa, TestIS):
|
||
|
if not isa.failed:
|
||
|
print(FMT_SUCCESS + '[Test] 🟢 successful {}'.format(fname) + FMT_NONE)
|
||
|
return not isa.failed
|
||
|
return False
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
|
||
|
import os
|
||
|
import glob
|
||
|
|
||
|
successes = 0
|
||
|
failures = 0
|
||
|
ttl = 0
|
||
|
|
||
|
for path in glob.glob(f'{os.path.dirname(__file__)}/*.asm'):
|
||
|
print(FMT_BLUE + '[Test] running testcase ' + os.path.basename(path) + FMT_NONE)
|
||
|
ttl += 1
|
||
|
if run_test(path):
|
||
|
successes += 1
|
||
|
else:
|
||
|
failures += 1
|
||
|
|
||
|
|
||
|
|