File size: 952 Bytes
324ecd2 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | import random
import unittest
from beamboot.vector_unit import VectorUnit, LANES, ROWS
class VectorUnitTests(unittest.TestCase):
def test_exact_int4_dot_against_reference(self):
rng = random.Random(417)
weights = [[rng.randint(-8, 7) for _ in range(LANES)] for _ in range(ROWS)]
unit = VectorUnit(weights)
for _ in range(300):
row = rng.randrange(ROWS)
acts = [rng.randint(0, 15) for _ in range(LANES)]
expected = sum(w * a for w, a in zip(weights[row], acts))
self.assertEqual(unit.dot(row, acts), expected)
def test_extremes(self):
weights = [[-8]*LANES, [7]*LANES] + [[0]*LANES]*(ROWS-2)
unit = VectorUnit(weights)
self.assertEqual(unit.dot(0, [15]*LANES), -8*15*LANES)
self.assertEqual(unit.dot(1, [15]*LANES), 7*15*LANES)
self.assertEqual(unit.dot(2, [15]*LANES), 0)
if __name__ == '__main__':
unittest.main()
|