--- /dev/null
+import unittest
+
+from migen.fhdl.std import *
+from migen.flow.actor import *
+from migen.flow.transactions import *
+from migen.flow.network import *
+from migen.actorlib.sim import *
+
+from migen.test.support import SimCase, SimBench
+
+def source_gen(sent):
+ for i in range(10):
+ yield Token("source", {"value": i})
+ sent.append(i)
+
+class SimSource(SimActor):
+ def __init__(self):
+ self.source = Source([("value", 32)])
+ self.sent = []
+ SimActor.__init__(self, source_gen(self.sent))
+
+def sink_gen(received):
+ while True:
+ t = Token("sink")
+ yield t
+ received.append(t.value["value"])
+
+class SimSink(SimActor):
+ def __init__(self):
+ self.sink = Sink([("value", 32)])
+ self.received = []
+ SimActor.__init__(self, sink_gen(self.received))
+
+class SourceSinkCase(SimCase, unittest.TestCase):
+ class TestBench(SimBench):
+ def __init__(self):
+ self.source = SimSource()
+ self.sink = SimSink()
+ g = DataFlowGraph()
+ g.add_connection(self.source, self.sink)
+ self.submodules.comp = CompositeActor(g)
+
+ def do_simulation(self, selfp):
+ if self.source.token_exchanger.done:
+ raise StopSimulation
+
+ def test_equal(self):
+ self.run_with(lambda tb, tbp: None)
+ self.assertEqual(self.tb.source.sent, self.tb.sink.received)
+
+class SourceSinkDirectCase(SimCase, unittest.TestCase):
+ class TestBench(SimBench):
+ def __init__(self):
+ self.source = SimSource()
+ self.sink = SimSink()
+ self.submodules += self.source, self.sink
+ self.comb += self.sink.sink.connect(self.source.source)
+
+ def do_simulation(self, selfp):
+ if self.source.token_exchanger.done:
+ raise StopSimulation
+
+ def test_equal(self):
+ self.run_with(lambda tb, tbp: None)
+ self.assertEqual(self.tb.source.sent, self.tb.sink.received)