import unittest from beamboot.hf_decoder_cpu import DecoderCPU from beamboot.large_cpu import LargeCPU, LargeRuntime class DecoderCPUTests(unittest.TestCase): def test_transition_in_stock_decoder(self): program = [('LDI', 7), ('STORE', 3), ('LDI', 2), ('ADDM', 3), ('STORE', 4), ('LOAD', 3), ('OUT', 0), ('LOAD', 4), ('OUT', 0), ('SUB', 9), ('JZ', 12), ('HALT', 0), ('HALT', 0)] actual = DecoderCPU(program) ref = LargeRuntime(LargeCPU(program)) for _ in range(30): got, expected = actual.step(), ref.step() self.assertEqual(got, expected) if got.halt: break self.assertTrue(actual.halted) def test_monitor_boots_and_adds(self): from beamboot.os import OperatingMonitor machine = OperatingMonitor(backend='decoder') self.assertEqual(machine.boot(), 'BEAM>\n') self.assertEqual(machine.version(), 'BEAMBOOT 0.1\n') self.assertEqual(machine.add(7, 8), 15) self.assertEqual(machine.add(15, 3), 2)