beam-boot / tests /test_memory.py
StarAtNyte1's picture
Publish Beam Boot / Super Beam source
324ecd2 verified
Raw History Blame Contribute Delete
1.67 kB
import random
import unittest
from beamboot.memory import AttentionMemory
class TestAttentionMemory(unittest.TestCase):
def test_latest_write_and_missing(self):
mem = AttentionMemory()
self.assertIsNone(mem.read(3))
mem.write(3, 12)
mem.write(5, 99)
mem.write(3, 231)
self.assertEqual(mem.read_byte(3), 231)
self.assertEqual(mem.read_byte(5), 99)
self.assertIsNone(mem.read(2))
def test_against_reference(self):
randomizer = random.Random(42)
mem, reference = AttentionMemory(temperature=0.00001), {}
for _ in range(500):
address = randomizer.randrange(16)
if randomizer.random() < .55:
value = randomizer.randrange(256)
reference[address] = value
mem.write(address, value)
else:
self.assertEqual(mem.read_byte(address), reference.get(address))
def test_sliding_window_forgets(self):
mem = AttentionMemory(window=2)
mem.write(1, 42)
mem.write(2, 10)
mem.write(3, 20)
self.assertIsNone(mem.read(1))
self.assertEqual(mem.read_byte(2), 10)
def test_softmax_is_not_exact(self):
mem = AttentionMemory(temperature=1.0)
mem.write(1, 0)
mem.write(1, 255)
self.assertNotEqual(mem.read_byte(1), 255)
def test_validation(self):
mem = AttentionMemory()
with self.assertRaises(ValueError): mem.write(16, 1)
with self.assertRaises(ValueError): mem.write(1, 256)
with self.assertRaises(ValueError): mem.read(-1)
if __name__ == '__main__':
unittest.main()