From 78dc0cb7b421036a5df431b9e286b2d1cbf03584 Mon Sep 17 00:00:00 2001 From: jand Date: Wed, 2 Jul 2003 08:01:14 +0000 Subject: [PATCH] set slice with left index open implementation and test --- myhdl/intbv.py | 8 ++++---- myhdl/test_intbv.py | 29 +++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/myhdl/intbv.py b/myhdl/intbv.py index 177f5d97..13c29060 100644 --- a/myhdl/intbv.py +++ b/myhdl/intbv.py @@ -121,10 +121,10 @@ class intbv(object): def __setslice__(self, i, j, val): if j == maxint: # default j = 0 -## if i == 0: # default -## q = self._val % (2**j) -## self._val = val * 2**j + q -## return + if i == 0: # default + q = self._val % (2**j) + self._val = val * 2**j + q + return if i <= j or i < 1 or j < 0: raise ValueError, "intbv[i:j] = v: requires i > j >= 0" \ " i, j ,v == %s, %s %s" % (i, j, val) diff --git a/myhdl/test_intbv.py b/myhdl/test_intbv.py index 059cfd21..babf817a 100644 --- a/myhdl/test_intbv.py +++ b/myhdl/test_intbv.py @@ -123,6 +123,14 @@ def setSlice(s, i, j, val): si = len(exts)-i sj = len(exts)-j return exts[:si] + val[si-sj:] + exts[sj:] + +def setSliceLeftOpen(s, j, val): + ext = '0' * (j-len(s)+1) + exts = ext + s + if j: + return val + exts[-j:] + else: + return val class TestIntBvIndexing(TestCase): @@ -250,6 +258,27 @@ class TestIntBvIndexing(TestCase): refi = ~long(setSlice(s, i, j, extv), 2) self.assertEqual(bvi, refi) + def testSetSliceLeftOpen(self): + self.seqsSetup() + toggle = 0 + for s in self.seqs: + n = long(s, 2) + for j in range(0, len(s)+5): + for v in self.seqv: + bv = intbv(n) + bvi = intbv(~n) + val = long(v, 2) + toggle ^= 1 + if toggle: + val = intbv(val) + bv[:j] = val + bvi[:j] = -1-val + ref = long(setSliceLeftOpen(s, j, v), 2) + self.assertEqual(bv, ref) + refi = ~long(setSliceLeftOpen(s, j, v), 2) + self.assertEqual(bvi, refi) + + class TestIntBvAsInt(TestCase):