beam-boot / tests /test_machine.py
StarAtNyte1's picture
Publish Beam Boot / Super Beam source
324ecd2 verified
Raw History Blame Contribute Delete
1.14 kB
import random
import unittest
import torch
from beamboot.machine import NeuralMachine, State, decode_output, reference_step, run, state_bits
class MachineTests(unittest.TestCase):
def test_all_states(self):
program = [('LDI', 7), ('STM', 0), ('SUB', 1), ('JZ', 6), ('ADD', 2), ('JMP', 2), ('LDM', 0), ('OUT', 0), ('HALT', 0)]
model = NeuralMachine(program)
states = [State(pc, acc, ram, out) for pc in range(16) for acc in range(16) for ram in range(16) for out in (False, True)]
with torch.inference_mode():
for start in range(0, len(states), 256):
chunk = states[start:start+256]
actual = model(torch.stack([state_bits(s) for s in chunk]))
self.assertEqual([decode_output(row) for row in actual], [reference_step(program, s) for s in chunk])
def test_writable_memory(self):
program = [('LDI', 11), ('STM', 0), ('LDI', 0), ('LDM', 0), ('OUT', 0), ('HALT', 0)]
states = list(run(NeuralMachine(program)))
self.assertEqual([(s.acc, s.ram) for s in states if s.out], [(11, 11)])
self.assertTrue(states[-1].halt)