Преглед изворни кода

updated output ports to be typed

Snej69420 пре 5 месеци
родитељ
комит
609a558d61

+ 1 - 1
test/DEVS/runtests.py

@@ -155,7 +155,7 @@ class TypeCastMessage(CoupledDEVS):
         receiver = self.addSubModel(MockNode("receiver", in_ports=["in"]))
         self.connectPorts(sender.p_out["out"], receiver.p_in["in"], z=lambda msg: ceil(msg))
 
-
+# unsupported in PyPDEVS
 class FilterMessage(CoupledDEVS):
     def __init__(self):
         super().__init__("top")

+ 7 - 7
test/test_connections.jl

@@ -15,7 +15,7 @@ end
     add_out_port!(top, :out)
     forwarder_ref = add_submodel!(top, :forwarder, MockNode;
         inbox=(; in=Int[]),
-        out_ports=Set([:out]),
+        out_ports=(; out=Int),
         forward=true
     )
 
@@ -31,12 +31,12 @@ end
     top = CoupledDEVS(:Top)
     nodeA_ref = add_submodel!(top, :NodeA, MockNode;
         inbox=(; in=Int[]),
-        out_ports=Set([:out]),
+        out_ports=(; out=Int),
         make_out=true, ta=1.0
     )
     nodeB_ref = add_submodel!(top, :NodeB, MockNode;
         inbox=(; in=Int[]),
-        out_ports=Set([:out]),
+        out_ports=(; out=Int),
         make_out=true,
     )
 
@@ -73,7 +73,7 @@ end
     )
     atomic_ref2 = add_submodel!(top, :atomic2, MockNode;
         inbox=(; in=Int[]),
-        out_ports=Set([:out]),
+        out_ports=(; out=Int),
         make_out=true
     )
     inner_ref = add_submodel!(top, :inner, inner)
@@ -120,12 +120,12 @@ end
     add_out_port!(inner, :out)
 
     atomic_ref1 = add_submodel!(top, :atomic1, MockNode;
-        out_ports=Set([:out]),
+        out_ports=(; out=Int),
         make_out=true
     )
     atomic_ref2 = add_submodel!(top, :atomic2, MockNode;
         inbox=(; in=Int[]),
-        out_ports=Set([:out]),
+        out_ports=(; out=Int),
         make_out=true
     )
     inner_ref = add_submodel!(top, :inner, inner)
@@ -182,7 +182,7 @@ end
     add_in_port!(child2, :in)
 
     sender_ref = add_submodel!(child1, :sender, MockNode;
-        out_ports=Set([:out]),
+        out_ports=(; out=Int),
         make_out=true, ta=1.0
     )
     receiver_ref = add_submodel!(child2, :receiver, MockNode;

+ 1 - 1
test/test_miscellaneous.jl

@@ -25,7 +25,7 @@ end
     top = CoupledDEVS(:Top)
 
     sender = add_submodel!(top, :Sender, MockNode;
-        out_ports=Set([:out]), ta=1.0
+        out_ports=(; out=Int), ta=1.0
     )
 
     model = compile_devs(top; logging="")

+ 11 - 11
test/test_routing.jl

@@ -5,7 +5,7 @@ julia_test_file = "test/traces/julia.csv"
 
     # Sender produces output, but it is NEVER connected to anything!
     sender_ref = add_submodel!(top, :sender, MockNode;
-        out_ports=Set([:out]), ta=1.0, make_out=true
+        out_ports=(; out=Int), ta=1.0, make_out=true
     )
 
     # Compile and run
@@ -24,12 +24,12 @@ end
     top = CoupledDEVS(:Top)
 
     sender_ref = add_submodel!(top, :Sender, MockNode;
-        out_ports=Set([:out]),
+        out_ports=(; out=Int),
         make_out=true, ta=1.0
     )
     forwarder_ref = add_submodel!(top, :Forwarder, MockNode;
         inbox=(; in=Int[]),
-        out_ports=Set([:out]),
+        out_ports=(; out=Int),
         forward=true, ta=1.0
     )
     receiver_ref = add_submodel!(top, :Receiver, MockNode;
@@ -63,12 +63,12 @@ end
     top = CoupledDEVS(:Top)
     nodeA_ref = add_submodel!(top, :NodeA, MockNode;
         inbox=(; in=Int[]),
-        out_ports=Set([:out]),
+        out_ports=(; out=Int),
         forward=true, ta=1.0, forward_msg=1
     )
     nodeB_ref = add_submodel!(top, :NodeB, MockNode;
         inbox=(; in=Int[]),
-        out_ports=Set([:out]),
+        out_ports=(; out=Int),
         forward=true, ta=1.0
     )
 
@@ -91,11 +91,11 @@ end
     top = CoupledDEVS(:Top)
 
     sender_ref1 = add_submodel!(top, :Sender1, MockNode;
-        out_ports=Set([:out]),
+        out_ports=(; out=Int),
         ta=1.0, make_out=true
     )
     sender_ref2 = add_submodel!(top, :Sender2, MockNode;
-        out_ports=Set([:out]),
+        out_ports=(; out=Int),
         ta=1.0, make_out=true
     )
     receiver_ref = add_submodel!(top, :Receiver, MockNode;
@@ -120,7 +120,7 @@ end
     top = CoupledDEVS(:Top)
 
     sender_ref = add_submodel!(top, :Sender, MockNode;
-        out_ports=Set([:out]),
+        out_ports=(; out=Int),
         make_out=true, ta=1.0
     )
     receiver_ref1 = add_submodel!(top, :Receiver1, MockNode;
@@ -157,7 +157,7 @@ end
     add_in_port!(child2, :in)
 
     sender_ref = add_submodel!(child1, :sender, MockNode;
-        out_ports=Set([:out]),
+        out_ports=(; out=Int),
         make_out=true, ta=1.0
     )
     receiver_ref = add_submodel!(child2, :receiver, MockNode;
@@ -184,8 +184,8 @@ end
 @testset "Complex Bag Semantics (Multi-Port)" begin
     top = CoupledDEVS(:top)
 
-    sA = add_submodel!(top, :sA, MockNode; out_ports=Set([:out]), ta=2.0, make_out=true)
-    sB = add_submodel!(top, :sB, MockNode; out_ports=Set([:out]), ta=2.0, make_out=true)
+    sA = add_submodel!(top, :sA, MockNode; out_ports=(; out=Int), ta=2.0, make_out=true)
+    sB = add_submodel!(top, :sB, MockNode; out_ports=(; out=Int), ta=2.0, make_out=true)
 
     # Receiver with TWO input ports
     rec = add_submodel!(top, :rec, MockNode;

+ 9 - 10
test/test_transitions.jl

@@ -4,7 +4,7 @@ julia_test_file = "test/traces/julia.csv"
     top = CoupledDEVS(:top)
 
     sender_ref = add_submodel!(top, :sender, MockNode;
-        out_ports=Set([:out]), make_out=true, ta=1.0
+        out_ports=(; out=Int), make_out=true, ta=1.0
     )
 
     transient_node = add_submodel!(top, :transient, MockNode;
@@ -24,7 +24,7 @@ end
 @testset "Test Order Output-Transition" begin
     top = CoupledDEVS(:top)
     sender_ref = add_submodel!(top, :sender, MockNode;
-        out_ports=Set([:out]),
+        out_ports=(; out=Int),
         make_out=true, ta=2.0
     )
 
@@ -49,7 +49,7 @@ end
 @testset "Phantom Event Purging" begin
     top = CoupledDEVS(:top)
     # Fast sender, fires every 1.0 seconds
-    sender = add_submodel!(top, :sender, MockNode; out_ports=Set([:out]), ta=1.0, cycles=5, make_out=true)
+    sender = add_submodel!(top, :sender, MockNode; out_ports=(; out=Int), ta=1.0, cycles=5, make_out=true)
 
     # Slow receiver, wants to fire at 10.0 seconds
     rec = add_submodel!(top, :rec, MockNode; inbox=(; in=Int[]), ta=4.0)
@@ -85,7 +85,7 @@ end
     top = CoupledDEVS(:top)
 
     sender_ref = add_submodel!(top, :sender, MockNode;
-        out_ports=Set([:out]),
+        out_ports=(; out=Int),
         ta=1.0, make_out=true
     )
     receiver_ref = add_submodel!(top, :receiver, MockNode;
@@ -107,12 +107,11 @@ end
     @test receiver.n_internal == 0
     @test receiver.n_external == 1
     @test receiver.n_confluent == 0
-    # Check that time advance was interrupted correctly (if your mock tracks this)
 end
 
 @testset "Elapsed Time Interruption" begin
     top = CoupledDEVS(:top)
-    sender_ref = add_submodel!(top, :sender, MockNode; out_ports=Set([:out]), ta=1.5, make_out=true)
+    sender_ref = add_submodel!(top, :sender, MockNode; out_ports=(; out=Int), ta=1.5, make_out=true)
     receiver_ref = add_submodel!(top, :receiver, MockNode; inbox=(; in=Int[]), ta=5.0)
     connect!(top, sender_ref.out, receiver_ref.in)
 
@@ -128,8 +127,8 @@ end
 @testset "Elapsed Time Reset (Multiple Interruptions)" begin
     top = CoupledDEVS(:top)
 
-    s1 = add_submodel!(top, :s1, MockNode; out_ports=Set([:out]), ta=3.0, make_out=true)
-    s2 = add_submodel!(top, :s2, MockNode; out_ports=Set([:out]), ta=5.0, make_out=true)
+    s1 = add_submodel!(top, :s1, MockNode; out_ports=(; out=Int), ta=3.0, make_out=true)
+    s2 = add_submodel!(top, :s2, MockNode; out_ports=(; out=Int), ta=5.0, make_out=true)
 
     rec = add_submodel!(top, :rec, MockNode; inbox=(; in=Int[]), ta=10.0)
 
@@ -151,7 +150,7 @@ end
     top = CoupledDEVS(:top)
 
     sender_ref = add_submodel!(top, :sender, MockNode;
-        out_ports=Set([:out]),
+        out_ports=(; out=Int),
         ta=2.0, make_out=true
     )
     receiver_ref = add_submodel!(top, :receiver, MockNode;
@@ -179,7 +178,7 @@ end
     top = CoupledDEVS(:top)
 
     sender_ref = add_submodel!(top, :sender, MockNode;
-        out_ports=Set([:out]),
+        out_ports=(; out=Int),
         ta=1.999, make_out=true
     )
     receiver_ref = add_submodel!(top, :receiver, MockNode;

+ 9 - 9
test/test_translations.jl

@@ -4,19 +4,19 @@ julia_test_file = "test/traces/julia.csv"
     top = CoupledDEVS(:Top)
 
     sender_ref = add_submodel!(top, :Sender, MockNode;
-        out_ports=Set([:out]),
+        out_ports=(; out=Float64),
         make_out=true, ta=1.0, output_msg=6.0
     )
 
     receiver_ref = add_submodel!(top, :Receiver, MockNode;
-        inbox=(; in=Any[]),
+        inbox=(; in=Float64[]),
     )
     translate = (msg) -> (msg * 1.5)
     connect!(top, sender_ref.out, receiver_ref.in; Z=translate)
 
     model = compile_devs(top; logging=julia_test_file)
     simulate_devs!(model, 2.0)
-#     test_trace_equivalence(julia_test_file, "test/traces/Mutate.csv")
+    test_trace_equivalence(julia_test_file, "test/traces/MutateMessage.csv")
 
     receiver = model[model.path_to_id["Top.Receiver"]]
     @test receiver.n_external == 1
@@ -29,24 +29,24 @@ end
     top = CoupledDEVS(:Top)
 
     sender_ref = add_submodel!(top, :Sender, MockNode;
-        out_ports=Set([:out]),
+        out_ports=(; out=Float64),
         make_out=true, ta=1.0, output_msg=6.6
     )
 
     receiver_ref = add_submodel!(top, :Receiver, MockNode;
-        inbox=(; in=Any[]),
+        inbox=(; in=Int[]),
     )
     translate = (msg) -> (ceil(msg))
     connect!(top, sender_ref.out, receiver_ref.in; Z=translate)
 
     model = compile_devs(top; logging=julia_test_file)
     simulate_devs!(model, 2.0)
-#     test_trace_equivalence(julia_test_file, "test/traces/Mutate.csv")
+    test_trace_equivalence(julia_test_file, "test/traces/TypeCastMessage.csv")
 
     receiver = model[model.path_to_id["Top.Receiver"]]
     @test receiver.n_external == 1
     @test length(receiver.inbox_log) == 1
-    @test typeof(receiver.inbox_log[:in][1]) == Int64
+    @test typeof(receiver.inbox_log[:in][1]) == Int
     @test receiver.inbox_log[:in][1] == 7
 end
 
@@ -54,7 +54,7 @@ end
     top = CoupledDEVS(:Top)
 
     sender_ref = add_submodel!(top, :Sender, MockNode;
-        out_ports=Set([:out]),
+        out_ports=(; out=Int),
         make_out=true, ta=1.0,
     )
 
@@ -67,7 +67,7 @@ end
 
     model = compile_devs(top; logging=julia_test_file)
     simulate_devs!(model, 2.0)
-#     test_trace_equivalence(julia_test_file, "test/traces/expected_FilteringModel.csv")
+    test_trace_equivalence(julia_test_file, "test/traces/FilterMessage.csv")
 
     receiver = model[model.path_to_id["Top.Receiver"]]