|
@@ -50,27 +50,76 @@ end
|
|
|
@test receiver.inbox_log[:in][1] == 7
|
|
@test receiver.inbox_log[:in][1] == 7
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
-@testset "Filter Message (Event Dropping)" begin
|
|
|
|
|
|
|
+@testset "Chained Translations" begin
|
|
|
top = CoupledDEVS(:Top)
|
|
top = CoupledDEVS(:Top)
|
|
|
|
|
|
|
|
sender_ref = add_submodel!(top, :Sender, MockNode;
|
|
sender_ref = add_submodel!(top, :Sender, MockNode;
|
|
|
out_ports=(; out=Int),
|
|
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;
|
|
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)
|
|
model = compile_devs(top; logging=julia_test_file)
|
|
|
simulate_devs!(model, 2.0)
|
|
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"]]
|
|
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
|