From: Luke Kenneth Casson Leighton Date: Sat, 4 Jul 2020 14:07:39 +0000 (+0100) Subject: add first cookie-cut test_trap_compunit.py X-Git-Tag: div_pipeline~162^2~92 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=9499502281d6ba93f7a7bf3db27ad734e4273b19;p=soc.git add first cookie-cut test_trap_compunit.py --- diff --git a/src/soc/fu/compunits/test/test_trap_compunit.py b/src/soc/fu/compunits/test/test_trap_compunit.py new file mode 100644 index 00000000..a77c9d1d --- /dev/null +++ b/src/soc/fu/compunits/test/test_trap_compunit.py @@ -0,0 +1,59 @@ +import unittest +from soc.decoder.power_enums import (XER_bits, Function) + +from soc.fu.alu.test.test_pipe_caller import get_cu_inputs +from soc.fu.trap.test.test_pipe_caller import TrapTestCase # creates the tests + +from soc.fu.test.common import ALUHelpers +from soc.fu.compunits.compunits import TrapFunctionUnit +from soc.fu.compunits.test.test_compunit import TestRunner + + +class TrapTestRunner(TestRunner): + def __init__(self, test_data): + super().__init__(test_data, TrapFunctionUnit, self, + Function.TRAP) + + def get_cu_inputs(self, dec2, sim): + """naming (res) must conform to TrapFunctionUnit input regspec + """ + res = yield from get_cu_inputs(dec2, sim) + return res + + def check_cu_outputs(self, res, dec2, sim, code): + """naming (res) must conform to TrapFunctionUnit output regspec + """ + + rc = yield dec2.e.rc.data + op = yield dec2.e.insn_type + cridx_ok = yield dec2.e.write_cr.ok + cridx = yield dec2.e.write_cr.data + + print ("check extra output", repr(code), cridx_ok, cridx) + + if rc: + self.assertEqual(cridx_ok, 1, code) + self.assertEqual(cridx, 0, code) + + sim_o = {} + + yield from ALUHelpers.get_sim_int_o(sim_o, sim, dec2) + yield from ALUHelpers.get_wr_sim_cr_a(sim_o, sim, dec2) + yield from ALUHelpers.get_sim_xer_ov(sim_o, sim, dec2) + yield from ALUHelpers.get_wr_sim_xer_ca(sim_o, sim, dec2) + yield from ALUHelpers.get_sim_xer_so(sim_o, sim, dec2) + + ALUHelpers.check_cr_a(self, res, sim_o, "CR%d %s" % (cridx, code)) + ALUHelpers.check_xer_ov(self, res, sim_o, code) + ALUHelpers.check_xer_ca(self, res, sim_o, code) + ALUHelpers.check_int_o(self, res, sim_o, code) + ALUHelpers.check_xer_so(self, res, sim_o, code) + + +if __name__ == "__main__": + unittest.main(exit=False) + suite = unittest.TestSuite() + suite.addTest(TrapTestRunner(TrapTestCase.test_data)) + + runner = unittest.TextTestRunner() + runner.run(suite)