fhdl.ast, back.pysim: implement shifts.

This commit is contained in:
whitequark 2018-12-15 09:58:30 +00:00
parent 46f5addf05
commit db4600d52b
5 changed files with 50 additions and 16 deletions

View file

@ -182,6 +182,20 @@ class OperatorTestCase(FHDLTestCase):
v5 = 10 ^ Const(0, 4)
self.assertEqual(v5.shape(), (4, False))
def test_shl(self):
v1 = Const(1, 4) << Const(4)
self.assertEqual(repr(v1), "(<< (const 4'd1) (const 3'd4))")
self.assertEqual(v1.shape(), (11, False))
v2 = Const(1, 4) << Const(-3)
self.assertEqual(v2.shape(), (7, False))
def test_shr(self):
v1 = Const(1, 4) >> Const(4)
self.assertEqual(repr(v1), "(>> (const 4'd1) (const 3'd4))")
self.assertEqual(v1.shape(), (4, False))
v2 = Const(1, 4) >> Const(-3)
self.assertEqual(v2.shape(), (8, False))
def test_lt(self):
v = Const(0, 4) < Const(0, 6)
self.assertEqual(repr(v), "(< (const 4'd0) (const 6'd0))")

View file

@ -71,6 +71,18 @@ class SimulatorUnitTestCase(FHDLTestCase):
stmt = lambda a, b: a ^ b
self.assertOperator(stmt, [C(0b1100, 4), C(0b1010, 4)], C(0b0110, 4))
def test_shl(self):
stmt = lambda a, b: a << b
self.assertOperator(stmt, [C(0b1001, 4), C(0)], C(0b1001, 5))
self.assertOperator(stmt, [C(0b1001, 4), C(3)], C(0b1001000, 7))
self.assertOperator(stmt, [C(0b1001, 4), C(-2)], C(0b10, 7))
def test_shr(self):
stmt = lambda a, b: a >> b
self.assertOperator(stmt, [C(0b1001, 4), C(0)], C(0b1001, 4))
self.assertOperator(stmt, [C(0b1001, 4), C(2)], C(0b10, 4))
self.assertOperator(stmt, [C(0b1001, 4), C(-2)], C(0b100100, 5))
def test_eq(self):
stmt = lambda a, b: a == b
self.assertOperator(stmt, [C(0, 4), C(0, 4)], C(1))