| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- julia_test_file = "test/traces/julia.csv"
- @testset "Mutate Message" begin
- top = CoupledDEVS(:Top)
- sender_ref = add_submodel!(top, :Sender, MockNode;
- out_ports=(; out=Float64),
- make_out=true, ta=1.0, output_msg=6.0
- )
- receiver_ref = add_submodel!(top, :Receiver, MockNode;
- 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/MutateMessage.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]) == Float64
- @test receiver.inbox_log[:in][1] == 9.0
- end
- @testset "Type Cast Message" begin
- top = CoupledDEVS(:Top)
- sender_ref = add_submodel!(top, :Sender, MockNode;
- out_ports=(; out=Float64),
- make_out=true, ta=1.0, output_msg=6.6
- )
- receiver_ref = add_submodel!(top, :Receiver, MockNode;
- 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/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]) == Int
- @test receiver.inbox_log[:in][1] == 7
- end
- @testset "Chained Translations" begin
- top = CoupledDEVS(:Top)
- sender_ref = add_submodel!(top, :Sender, MockNode;
- out_ports=(; out=Int),
- 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=Int[]),
- )
- 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/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 "Fan-Out Translation Test" begin
- top = CoupledDEVS(:Top)
- sender_ref = add_submodel!(top, :Sender, MockNode;
- out_ports=(; out=Int),
- make_out=true, ta=1.0, output_msg=8
- )
- receiver_ref1 = add_submodel!(top, :Receiver1, MockNode;
- inbox=(; in=Int[]),
- )
- receiver_ref2 = add_submodel!(top, :Receiver2, MockNode;
- inbox=(; in=Int[]),
- )
- t1 = (msg) -> (msg * 2)
- t2 = (msg) -> (msg ^ 2)
- connect!(top, sender_ref.out, receiver_ref1.in; Z=t1)
- connect!(top, sender_ref.out, receiver_ref2.in; Z=t2)
- model = compile_devs(top; logging=julia_test_file)
- simulate_devs!(model)
- test_trace_equivalence(julia_test_file, "test/traces/TranslationFanOut.csv")
- receiver1 = model[model.path_to_id["Top.Receiver1"]]
- receiver2 = model[model.path_to_id["Top.Receiver2"]]
- @test receiver1.n_external == 1
- @test receiver2.n_external == 1
- @test length(receiver1.inbox_log) == 1
- @test length(receiver2.inbox_log) == 1
- @test receiver1.inbox_log[:in][1] == 16
- @test receiver2.inbox_log[:in][1] == 64
- end
- @testset "Flattened Translation" begin
- parent = CoupledDEVS(:parent)
- child1 = CoupledDEVS(:child1)
- add_out_port!(child1, :out)
- 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
|