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()