Add tests for core/refresher.py
authorJean THOMAS <git0@pub.jeanthomas.me>
Fri, 3 Jul 2020 11:08:07 +0000 (13:08 +0200)
committerJean THOMAS <git0@pub.jeanthomas.me>
Fri, 3 Jul 2020 11:08:07 +0000 (13:08 +0200)
gram/test/test_core_refresher.py [new file with mode: 0644]

diff --git a/gram/test/test_core_refresher.py b/gram/test/test_core_refresher.py
new file mode 100644 (file)
index 0000000..3f8c6e2
--- /dev/null
@@ -0,0 +1,82 @@
+from nmigen import *
+from nmigen.hdl.ast import Past
+from nmigen.asserts import Assert, Assume
+
+from gram.core.refresher import RefreshExecuter, RefreshPostponer
+from gram.compat import *
+from utils import *
+
+class RefreshExecuterTestCase(FHDLTestCase):
+       def test_executer(self):
+               def generic_test(abits, babits, trp, trfc):
+                       m = Module()
+                       m.submodules.dut = dut = RefreshExecuter(abits=abits, babits=babits, trp=trp, trfc=trfc)
+
+                       def process():
+                               yield dut.start.eq(1)
+                               yield
+                               yield
+                               self.assertEqual((yield dut.a), 2**10)
+                               for i in range(trp):
+                                       yield
+                               self.assertEqual((yield dut.a), 0)
+
+                       runSimulation(m, process, "test_refreshexecuter.vcd")
+
+               generic_test(20, 20, 5, 5)
+               generic_test(20, 20, 100, 5)
+
+class RefreshPostponerTestCase(FHDLTestCase):
+       def test_init(self):
+               m = Module()
+               m.submodules.dut = dut = RefreshPostponer(1)
+
+               def process():
+                       self.assertFalse((yield dut.req_o))
+
+               runSimulation(m, process, "test_refreshpostponer.vcd")
+
+       def test_delay(self):
+               def generic_test(delay):
+                       m = Module()
+                       m.submodules.dut = dut = RefreshPostponer(delay)
+
+                       def process():
+                               yield dut.req_i.eq(1)
+                               yield
+
+                               for i in range(delay):
+                                       self.assertFalse((yield dut.req_o))
+                                       yield
+
+                               self.assertTrue((yield dut.req_o))
+
+                       runSimulation(m, process, "test_refreshpostponer.vcd")
+
+               generic_test(1)
+               generic_test(5)
+               generic_test(10)
+
+       def test_req_not_stuck(self):
+               def generic_test(delay):
+                       m = Module()
+                       m.submodules.dut = dut = RefreshPostponer(delay)
+
+                       def process():
+                               yield dut.req_i.eq(1)
+                               yield
+
+                               for i in range(delay):
+                                       yield
+
+                               yield dut.req_i.eq(0)
+                               yield
+                               yield
+
+                               self.assertFalse((yield dut.req_o))
+
+                       runSimulation(m, process, "test_refreshpostponer.vcd")
+
+               generic_test(1)
+               generic_test(5)
+               generic_test(10)