add test in Repl where integers are passed in as the Value. they end up being
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Thu, 30 Sep 2021 12:59:02 +0000 (13:59 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sat, 2 Oct 2021 14:59:30 +0000 (15:59 +0100)
passed to Const which ascertains how much space is needed.

for proper Type 1 (ast) nmigen language abstraction, a test is needed
(similar to the one in ast.Mux for bool) which converts *only* integers
to Value, preserving existing behaviour.  there was no unit test for
this case

nmigen/hdl/ast.py
tests/test_hdl_ast.py

index ef90f463850f2655a828f6d08ee5492dc69fc687..ef4a5dfbb61fd70511df8bd9443744d8850e07f2 100644 (file)
@@ -161,8 +161,6 @@ class Value(metaclass=ABCMeta):
         return _InternalPart(self, offset, width, stride, src_loc_at=src_loc_at)
     def __Repl__(self, count, *, src_loc_at=0):
         return _InternalRepl(self, count, src_loc_at=src_loc_at)
-    def __Repl__(self, count, *, src_loc_at=0):
-        return _InternalRepl(self, count, src_loc_at=src_loc_at)
     def __Cat__(self, *args, src_loc_at=0):
         return _InternalCat(self, *args, src_loc_at=src_loc_at)
     def __Mux__(self, val1, val0):
@@ -918,6 +916,8 @@ class _InternalCat(Value):
 
 @final
 def Repl(value, count, *, src_loc_at=0):
+    if not isinstance(value, Value): # rare instances where integers are passed
+        value = Value.cast(value)
     return value.__Repl__(count, src_loc_at=src_loc_at)
 
 
index 28a12a5e6e0485bd025a26527cd95317a6515ff3..53985c840e6f05375baef21a7325f2f6007486a4 100644 (file)
@@ -750,6 +750,12 @@ class ReplTestCase(FHDLTestCase):
         s2 = Repl(Const(10), 0)
         self.assertEqual(s2.shape(), unsigned(0))
 
+    def test_integer(self):
+        s1 = Repl(0, 3) # integer value, 1 bit long
+        self.assertEqual(s1.shape(), unsigned(3))
+        s1 = Repl(0b1010, 3) # takes 4 bits to store, repeated 3 times => 12 bit
+        self.assertEqual(s1.shape(), unsigned(12))
+
     def test_count_wrong(self):
         with self.assertRaises(TypeError):
             Repl(Const(10), -1)