|
|
@@ -1,7 +1,7 @@
|
|
|
from pypdevs.simulator import Simulator
|
|
|
from pypdevs.DEVS import CoupledDEVS
|
|
|
from MockNode import MockNode
|
|
|
-
|
|
|
+from math import ceil
|
|
|
|
|
|
def run_test(model, duration=None, variant=""):
|
|
|
test = model()
|
|
|
@@ -25,21 +25,21 @@ def run_test(model, duration=None, variant=""):
|
|
|
class Internal(CoupledDEVS):
|
|
|
def __init__(self):
|
|
|
super().__init__("Top")
|
|
|
- self.receiver = self.addSubModel(MockNode("receiver", in_ports=["in"], ta=2.0))
|
|
|
+ receiver = self.addSubModel(MockNode("receiver", in_ports=["in"], ta=2.0))
|
|
|
|
|
|
class External(CoupledDEVS):
|
|
|
def __init__(self):
|
|
|
super().__init__("Top")
|
|
|
- self.sender = self.addSubModel(MockNode("sender", out_ports=["out"], ta=1.0, make_out=True))
|
|
|
- self.receiver = self.addSubModel(MockNode("receiver", in_ports=["in"]))
|
|
|
- self.connectPorts(self.sender.p_out["out"], self.receiver.p_in["in"])
|
|
|
+ sender = self.addSubModel(MockNode("sender", out_ports=["out"], ta=1.0, make_out=True))
|
|
|
+ receiver = self.addSubModel(MockNode("receiver", in_ports=["in"]))
|
|
|
+ self.connectPorts(sender.p_out["out"], receiver.p_in["in"])
|
|
|
|
|
|
class ElapsedTimeInterruption(CoupledDEVS):
|
|
|
def __init__(self):
|
|
|
super().__init__("Top")
|
|
|
- self.sender = self.addSubModel(MockNode("sender", out_ports=["out"], ta=1.5, make_out=True))
|
|
|
- self.receiver = self.addSubModel(MockNode("receiver", in_ports=["in"], ta=5.0))
|
|
|
- self.connectPorts(self.sender.p_out["out"], self.receiver.p_in["in"])
|
|
|
+ sender = self.addSubModel(MockNode("sender", out_ports=["out"], ta=1.5, make_out=True))
|
|
|
+ receiver = self.addSubModel(MockNode("receiver", in_ports=["in"], ta=5.0))
|
|
|
+ self.connectPorts(sender.p_out["out"], receiver.p_in["in"])
|
|
|
|
|
|
class ElapsedTimeReset(CoupledDEVS):
|
|
|
def __init__(self):
|
|
|
@@ -53,16 +53,16 @@ class ElapsedTimeReset(CoupledDEVS):
|
|
|
class Confluent(CoupledDEVS):
|
|
|
def __init__(self):
|
|
|
super().__init__("Top")
|
|
|
- self.sender = self.addSubModel(MockNode("sender", out_ports=["out"], ta=2.0, make_out=True))
|
|
|
- self.receiver = self.addSubModel(MockNode("receiver", in_ports=["in"], ta=2.0))
|
|
|
- self.connectPorts(self.sender.p_out["out"], self.receiver.p_in["in"])
|
|
|
+ sender = self.addSubModel(MockNode("sender", out_ports=["out"], ta=2.0, make_out=True))
|
|
|
+ receiver = self.addSubModel(MockNode("receiver", in_ports=["in"], ta=2.0))
|
|
|
+ self.connectPorts(sender.p_out["out"], receiver.p_in["in"])
|
|
|
|
|
|
class NearlyConfluent(CoupledDEVS):
|
|
|
def __init__(self):
|
|
|
super().__init__("Top")
|
|
|
- self.sender = self.addSubModel(MockNode("sender", out_ports=["out"], ta=1.999, make_out=True))
|
|
|
- self.receiver = self.addSubModel(MockNode("receiver", in_ports=["in"], ta=2.0))
|
|
|
- self.connectPorts(self.sender.p_out["out"], self.receiver.p_in["in"])
|
|
|
+ sender = self.addSubModel(MockNode("sender", out_ports=["out"], ta=1.999, make_out=True))
|
|
|
+ receiver = self.addSubModel(MockNode("receiver", in_ports=["in"], ta=2.0))
|
|
|
+ self.connectPorts(sender.p_out["out"], receiver.p_in["in"])
|
|
|
|
|
|
# ---------------------------------------------------------------
|
|
|
# test routing
|
|
|
@@ -70,16 +70,16 @@ class NearlyConfluent(CoupledDEVS):
|
|
|
class UnconnectedPort(CoupledDEVS):
|
|
|
def __init__(self):
|
|
|
super().__init__("Top")
|
|
|
- self.sender = self.addSubModel(MockNode("sender", out_ports=["out"], ta=1.0, make_out=True))
|
|
|
+ sender = self.addSubModel(MockNode("sender", out_ports=["out"], ta=1.0, make_out=True))
|
|
|
|
|
|
class PassThrough(CoupledDEVS):
|
|
|
def __init__(self):
|
|
|
super().__init__("Top")
|
|
|
- self.Sender = self.addSubModel(MockNode("Sender", out_ports=["out"], ta=1.0, make_out=True))
|
|
|
+ sender = self.addSubModel(MockNode("Sender", out_ports=["out"], ta=1.0, make_out=True))
|
|
|
self.Forwarder = self.addSubModel(MockNode("Forwarder", in_ports=["in"], out_ports=["out"], ta=1.0, forward=True))
|
|
|
- self.Receiver = self.addSubModel(MockNode("Receiver", in_ports=["in"]))
|
|
|
- self.connectPorts(self.Sender.p_out["out"], self.Forwarder.p_in["in"])
|
|
|
- self.connectPorts(self.Forwarder.p_out["out"], self.Receiver.p_in["in"])
|
|
|
+ receiver = self.addSubModel(MockNode("Receiver", in_ports=["in"]))
|
|
|
+ self.connectPorts(sender.p_out["out"], self.Forwarder.p_in["in"])
|
|
|
+ self.connectPorts(self.Forwarder.p_out["out"], receiver.p_in["in"])
|
|
|
|
|
|
class CyclicCoupling(CoupledDEVS):
|
|
|
def __init__(self):
|
|
|
@@ -92,35 +92,35 @@ class CyclicCoupling(CoupledDEVS):
|
|
|
class FanIn(CoupledDEVS):
|
|
|
def __init__(self):
|
|
|
super().__init__("Top")
|
|
|
- self.Sender1 = self.addSubModel(MockNode("Sender1", out_ports=["out"], ta=1.0, make_out=True))
|
|
|
- self.Sender2 = self.addSubModel(MockNode("Sender2", out_ports=["out"], ta=1.0, make_out=True))
|
|
|
- self.Receiver = self.addSubModel(MockNode("Receiver", in_ports=["in"]))
|
|
|
- self.connectPorts(self.Sender1.p_out["out"], self.Receiver.p_in["in"])
|
|
|
- self.connectPorts(self.Sender2.p_out["out"], self.Receiver.p_in["in"])
|
|
|
+ sender1 = self.addSubModel(MockNode("Sender1", out_ports=["out"], ta=1.0, make_out=True))
|
|
|
+ sender2 = self.addSubModel(MockNode("Sender2", out_ports=["out"], ta=1.0, make_out=True))
|
|
|
+ receiver = self.addSubModel(MockNode("Receiver", in_ports=["in"]))
|
|
|
+ self.connectPorts(sender1.p_out["out"], receiver.p_in["in"])
|
|
|
+ self.connectPorts(sender2.p_out["out"], receiver.p_in["in"])
|
|
|
|
|
|
class FanOut(CoupledDEVS):
|
|
|
def __init__(self):
|
|
|
super().__init__("Top")
|
|
|
- self.Sender = self.addSubModel(MockNode("Sender", out_ports=["out"], ta=1.0, make_out=True))
|
|
|
- self.Receiver1 = self.addSubModel(MockNode("Receiver1", in_ports=["in"]))
|
|
|
- self.Receiver2 = self.addSubModel(MockNode("Receiver2", in_ports=["in"]))
|
|
|
- self.connectPorts(self.Sender.p_out["out"], self.Receiver1.p_in["in"])
|
|
|
- self.connectPorts(self.Sender.p_out["out"], self.Receiver2.p_in["in"])
|
|
|
+ sender = self.addSubModel(MockNode("Sender", out_ports=["out"], ta=1.0, make_out=True))
|
|
|
+ receiver1 = self.addSubModel(MockNode("Receiver1", in_ports=["in"]))
|
|
|
+ receiver2 = self.addSubModel(MockNode("Receiver2", in_ports=["in"]))
|
|
|
+ self.connectPorts(sender.p_out["out"], receiver1.p_in["in"])
|
|
|
+ self.connectPorts(sender.p_out["out"], receiver2.p_in["in"])
|
|
|
|
|
|
# --- Nested Architecture for FlattenedConnection ---
|
|
|
class Child1(CoupledDEVS):
|
|
|
def __init__(self, name="child1"):
|
|
|
super().__init__(name)
|
|
|
- self.sender = self.addSubModel(MockNode("sender", out_ports=["out"], ta=1.0, make_out=True))
|
|
|
+ sender = self.addSubModel(MockNode("sender", out_ports=["out"], ta=1.0, make_out=True))
|
|
|
self.p_out = self.addOutPort("out")
|
|
|
- self.connectPorts(self.sender.p_out["out"], self.p_out)
|
|
|
+ self.connectPorts(sender.p_out["out"], self.p_out)
|
|
|
|
|
|
class Child2(CoupledDEVS):
|
|
|
def __init__(self, name="child2"):
|
|
|
super().__init__(name)
|
|
|
- self.receiver = self.addSubModel(MockNode("receiver", in_ports=["in"]))
|
|
|
+ receiver = self.addSubModel(MockNode("receiver", in_ports=["in"]))
|
|
|
self.p_in = self.addInPort("in")
|
|
|
- self.connectPorts(self.p_in, self.receiver.p_in["in"])
|
|
|
+ self.connectPorts(self.p_in, receiver.p_in["in"])
|
|
|
|
|
|
class FlattenedConnection(CoupledDEVS):
|
|
|
def __init__(self):
|
|
|
@@ -138,6 +138,31 @@ class ComplexBag(CoupledDEVS):
|
|
|
self.connectPorts(self.sA.p_out["out"], self.rec.p_in["in_A"])
|
|
|
self.connectPorts(self.sB.p_out["out"], self.rec.p_in["in_B"])
|
|
|
|
|
|
+# ---------------------------------------------------------------
|
|
|
+# test translations
|
|
|
+# ---------------------------------------------------------------
|
|
|
+class MutateMessage(CoupledDEVS):
|
|
|
+ def __init__(self):
|
|
|
+ super().__init__("top")
|
|
|
+ sender = self.addSubModel(MockNode("sender", out_ports=["out"], ta=1.0, make_out=True, output_msg=6.0))
|
|
|
+ receiver = self.addSubModel(MockNode("receiver", in_ports=["in"]))
|
|
|
+ self.connectPorts(sender.p_out["out"], receiver.p_in["in"], z=lambda msg: msg * 1.5)
|
|
|
+
|
|
|
+class TypeCastMessage(CoupledDEVS):
|
|
|
+ def __init__(self):
|
|
|
+ super().__init__("top")
|
|
|
+ sender = self.addSubModel(MockNode("sender", out_ports=["out"], ta=1.0, make_out=True, output_msg=6.6))
|
|
|
+ receiver = self.addSubModel(MockNode("receiver", in_ports=["in"]))
|
|
|
+ self.connectPorts(sender.p_out["out"], receiver.p_in["in"], z=lambda msg: ceil(msg))
|
|
|
+
|
|
|
+
|
|
|
+class FilterMessage(CoupledDEVS):
|
|
|
+ def __init__(self):
|
|
|
+ super().__init__("top")
|
|
|
+ sender = self.addSubModel(MockNode("sender", out_ports=["out"], ta=1.0, make_out=True))
|
|
|
+ receiver = self.addSubModel(MockNode("receiver", in_ports=["in"]))
|
|
|
+ self.connectPorts(sender.p_out["out"], receiver.p_in["in"], z=lambda msg: None)
|
|
|
+
|
|
|
# ---------------------------------------------------------------
|
|
|
# test miscellaneous
|
|
|
# ---------------------------------------------------------------
|
|
|
@@ -148,7 +173,7 @@ class SimDurationBoundary(CoupledDEVS):
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
- # test_transitions.jl
|
|
|
+ # transitions
|
|
|
run_test(Internal)
|
|
|
run_test(External)
|
|
|
run_test(ElapsedTimeInterruption, 2)
|
|
|
@@ -157,7 +182,7 @@ if __name__ == '__main__':
|
|
|
run_test(Confluent)
|
|
|
run_test(NearlyConfluent)
|
|
|
|
|
|
- # test_routing.jl
|
|
|
+ # routing
|
|
|
run_test(UnconnectedPort)
|
|
|
run_test(PassThrough)
|
|
|
run_test(CyclicCoupling, 12)
|
|
|
@@ -166,5 +191,10 @@ if __name__ == '__main__':
|
|
|
run_test(FlattenedConnection)
|
|
|
run_test(ComplexBag)
|
|
|
|
|
|
- # test_miscellaneous.jl
|
|
|
+ # translations
|
|
|
+ run_test(MutateMessage)
|
|
|
+ run_test(TypeCastMessage)
|
|
|
+ run_test(FilterMessage)
|
|
|
+
|
|
|
+ # miscellaneous
|
|
|
run_test(SimDurationBoundary, 3.5)
|