Bladeren bron

clean up and additional translation test case

Snej69420 5 maanden geleden
bovenliggende
commit
d4d68fd00e

+ 73 - 0
test/DEVS/test_routing.py

@@ -0,0 +1,73 @@
+from pypdevs.DEVS import CoupledDEVS
+from MockNode import MockNode
+
+class UnconnectedPort(CoupledDEVS):
+    def __init__(self):
+        super().__init__("Top")
+        sender = self.addSubModel(MockNode("sender", out_ports=["out"], ta=1.0, make_out=True))
+
+class PassThrough(CoupledDEVS):
+    def __init__(self):
+        super().__init__("Top")
+        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))
+        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):
+        super().__init__("Top")
+        self.NodeA = self.addSubModel(MockNode("NodeA", in_ports=["in"], out_ports=["out"], ta=1.0, forward=True, forward_msg=1))
+        self.NodeB = self.addSubModel(MockNode("NodeB", in_ports=["in"], out_ports=["out"], ta=1.0, forward=True))
+        self.connectPorts(self.NodeA.p_out["out"], self.NodeB.p_in["in"])
+        self.connectPorts(self.NodeB.p_out["out"], self.NodeA.p_in["in"])
+
+class FanIn(CoupledDEVS):
+    def __init__(self):
+        super().__init__("Top")
+        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")
+        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)
+        sender = self.addSubModel(MockNode("sender", out_ports=["out"], ta=1.0, make_out=True))
+        self.p_out = self.addOutPort("out")
+        self.connectPorts(sender.p_out["out"], self.p_out)
+
+class Child2(CoupledDEVS):
+    def __init__(self, name="child2"):
+        super().__init__(name)
+        receiver = self.addSubModel(MockNode("receiver", in_ports=["in"]))
+        self.p_in = self.addInPort("in")
+        self.connectPorts(self.p_in, receiver.p_in["in"])
+
+class FlattenedConnection(CoupledDEVS):
+    def __init__(self):
+        super().__init__("parent")
+        self.child1 = self.addSubModel(Child1("child1"))
+        self.child2 = self.addSubModel(Child2("child2"))
+        self.connectPorts(self.child1.p_out, self.child2.p_in)
+
+class ComplexBag(CoupledDEVS):
+    def __init__(self):
+        super().__init__("top")
+        self.sA = self.addSubModel(MockNode("sA", out_ports=["out"], ta=2.0, make_out=True))
+        self.sB = self.addSubModel(MockNode("sB", out_ports=["out"], ta=2.0, make_out=True))
+        self.rec = self.addSubModel(MockNode("rec", in_ports=["in_A", "in_B"]))
+        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"])

+ 44 - 0
test/DEVS/test_transitions.py

@@ -0,0 +1,44 @@
+from pypdevs.DEVS import CoupledDEVS
+from MockNode import MockNode
+
+class Internal(CoupledDEVS):
+    def __init__(self):
+        super().__init__("Top")
+        receiver = self.addSubModel(MockNode("receiver", in_ports=["in"], ta=2.0))
+
+class External(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"])
+
+class ElapsedTimeInterruption(CoupledDEVS):
+    def __init__(self):
+        super().__init__("Top")
+        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):
+        super().__init__("Top")
+        self.s1 = self.addSubModel(MockNode("s1", out_ports=["out"], ta=3.0, make_out=True))
+        self.s2 = self.addSubModel(MockNode("s2", out_ports=["out"], ta=5.0, make_out=True))
+        self.rec = self.addSubModel(MockNode("rec", in_ports=["in"], ta=10.0))
+        self.connectPorts(self.s1.p_out["out"], self.rec.p_in["in"])
+        self.connectPorts(self.s2.p_out["out"], self.rec.p_in["in"])
+
+class Confluent(CoupledDEVS):
+    def __init__(self):
+        super().__init__("Top")
+        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")
+        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"])

+ 38 - 0
test/DEVS/test_translations.py

@@ -0,0 +1,38 @@
+from pypdevs.DEVS import CoupledDEVS
+from MockNode import MockNode
+from math import ceil
+
+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 Child1(CoupledDEVS):
+    def __init__(self, name="child1"):
+        super().__init__(name)
+        sender = self.addSubModel(MockNode("sender", out_ports=["out"], ta=1.0, make_out=True, output_msg=2))
+        self.p_out = self.addOutPort("out")
+        self.connectPorts(sender.p_out["out"], self.p_out, z=lambda msg: msg ** 2)
+
+class Child2(CoupledDEVS):
+    def __init__(self, name="child2"):
+        super().__init__(name)
+        receiver = self.addSubModel(MockNode("receiver", in_ports=["in"]))
+        self.p_in = self.addInPort("in")
+        self.connectPorts(self.p_in, receiver.p_in["in"], z=lambda msg: msg ** 2)
+
+class FlattenedTranslation(CoupledDEVS):
+    def __init__(self):
+        super().__init__("parent")
+        self.child1 = self.addSubModel(Child1("child1"))
+        self.child2 = self.addSubModel(Child2("child2"))
+        self.connectPorts(self.child1.p_out, self.child2.p_in, z=lambda msg: msg ** 2)

+ 0 - 5
test/traces/FilterMessage.csv

@@ -1,5 +0,0 @@
-time,model_path,transition_type,next_ta,inputs,outputs,state
-0.000000,top.sender,INIT,1.000000,none,none,Cycles: 1
-0.000000,top.receiver,INIT,inf,none,none,Cycles: 1
-1.000000,top.sender,INTERNAL,inf,none,out:[42],Cycles: 0
-1.000000,top.receiver,EXTERNAL,inf,in:[None],none,Cycles: 1

+ 5 - 0
test/traces/FlattenedTranslation.csv

@@ -0,0 +1,5 @@
+time,model_path,transition_type,next_ta,inputs,outputs,state
+0.000000,parent.child1.sender,INIT,1.000000,none,none,Cycles: 1
+0.000000,parent.child2.receiver,INIT,inf,none,none,Cycles: 1
+1.000000,parent.child1.sender,INTERNAL,inf,none,out:[2],Cycles: 0
+1.000000,parent.child2.receiver,EXTERNAL,inf,in:[256],none,Cycles: 1