浏览代码

new translation test, translating over coupled connections

Snej69420 5 月之前
父节点
当前提交
406d856f2f
共有 1 个文件被更改,包括 59 次插入 和 10 次删除
  1. 59 10
      test/test_translations.jl

+ 59 - 10
test/test_translations.jl

@@ -50,27 +50,76 @@ end
     @test receiver.inbox_log[:in][1] == 7
 end
 
-@testset "Filter Message (Event Dropping)" begin
+@testset "Chained Translations" begin
     top = CoupledDEVS(:Top)
 
     sender_ref = add_submodel!(top, :Sender, MockNode;
         out_ports=(; out=Int),
-        make_out=true, ta=1.0,
+        make_out=true, ta=1.0
+    )
+    forwarder_ref = add_submodel!(top, :Forwarder, MockNode;
+        inbox=(; in=Int[]),
+        out_ports=(; out=Int),
+        forward=true, ta=1.0
     )
-
     receiver_ref = add_submodel!(top, :Receiver, MockNode;
-        inbox=(; in=Any[]),
+        inbox=(; in=Int[]),
     )
 
-    filter_func = (msg) -> nothing
-    connect!(top, sender_ref.out, receiver_ref.in; Z=filter_func)
+    connect!(top, sender_ref.out, forwarder_ref.in)
+    connect!(top, forwarder_ref.out, receiver_ref.in)
 
     model = compile_devs(top; logging=julia_test_file)
     simulate_devs!(model, 2.0)
-    test_trace_equivalence(julia_test_file, "test/traces/FilterMessage.csv")
+    test_trace_equivalence(julia_test_file, "test/traces/PassThrough.csv")
+
+    forwarder = model[model.path_to_id["Top.Forwarder"]]
+    @test forwarder.n_external == 1
+    @test length(forwarder.inbox_log) == 1
+    @test typeof(forwarder.inbox_log[:in][1]) == Int
+    @test forwarder.inbox_log[:in][1] == 42
+
+    @test forwarder.n_internal == 1
+    @test forwarder.forward_msg === nothing
 
     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]) == Int
+    @test receiver.inbox_log[:in][1] == 42
+end
+
+@testset "Flattened Translation" begin
+    parent = CoupledDEVS(:parent)
+
+    child1 = CoupledDEVS(:child1)
+    add_out_port!(child1, :out)
 
-    @test receiver.n_external == 0
-    @test isempty(receiver.inbox_log) || isempty(receiver.inbox_log[:in])
-end
+    child2 = CoupledDEVS(:child2)
+    add_in_port!(child2, :in)
+
+    sender_ref = add_submodel!(child1, :sender, MockNode;
+        out_ports=(; out=Int),
+        make_out=true, ta=1.0, output_msg=2
+    )
+    receiver_ref = add_submodel!(child2, :receiver, MockNode;
+        inbox=(; in=Int[]),
+    )
+    multiply = (msg) -> (msg ^ 2)
+    connect!(child1, sender_ref.out, self.out; Z=multiply)
+    connect!(child2, self.in, receiver_ref.in; Z=multiply)
+
+    node_ref1 = add_submodel!(parent, :child1, child1)
+    node_ref2 = add_submodel!(parent, :child2, child2)
+    connect!(parent, node_ref1.out, node_ref2.in; Z=multiply)
+
+    model = compile_devs(parent; logging=julia_test_file)
+    simulate_devs!(model)
+    test_trace_equivalence(julia_test_file, "test/traces/FlattenedTranslation.csv")
+
+    receiver = model[model.path_to_id["parent.child2.receiver"]]
+    @test receiver.n_external == 1
+    @test length(receiver.inbox_log) == 1
+    @test typeof(receiver.inbox_log[:in][1]) == Int
+    @test receiver.inbox_log[:in][1] == 256
+end