Browse Source

new transition test for nearly external and internal transition being extremely close eg near confluent

Snej69420 5 months ago
parent
commit
c45fdd6b98
3 changed files with 36 additions and 6 deletions
  1. 1 1
      test/mock_agents.jl
  2. 6 5
      test/runtests.jl
  3. 29 0
      test/test_transitions.jl

+ 1 - 1
test/mock_agents.jl

@@ -6,7 +6,7 @@ import .DEVS2Agents: time_advance, internal_transition!, external_transition!, c
 @agent struct MockNode{I, O}(AtomicDEVS{I, O})
     make_in::Bool = false
     make_out::Bool = false
-    forward::Bool = false
+    forward::Bool = false # auto adds in and output ports
 
     ta::Float64 = Inf
     cycles::Int = 1

+ 6 - 5
test/runtests.jl

@@ -4,17 +4,18 @@ using Agents
 include("../src/DEVS2Agents.jl")
 using .DEVS2Agents
 
-include("mock_agents.jl")
+include("mock_node.jl")
 
 @testset "DEVS Framework Test Suite" begin
 
-    @testset "1. Transitions" begin
-        include("test_transitions.jl")
+    @testset "1. Connections" begin
+        include("test_connections.jl")
     end
 
-    @testset "2. Connections" begin
-        include("test_connections.jl")
+    @testset "2. Transitions" begin
+        include("test_transitions.jl")
     end
+
     @testset "3. Routing & Ports" begin
         include("test_routing.jl")
     end

+ 29 - 0
test/test_transitions.jl

@@ -74,4 +74,33 @@ end
     @test receiver.n_external == 1
     @test receiver.n_confluent == 1
     @test length(receiver.inbox_log) == 1
+end
+
+@testset "Nearly Confluent Transition Test" begin
+    top = CoupledDEVS(:top)
+
+    sender_ref = add_submodel!(top, :sender, MockNode;
+        out_ports=Set([:out]),
+        ta=1.999999, make_out=true
+    )
+    receiver_ref = add_submodel!(top, :receiver, MockNode;
+        inbox=(; in=Int[]),
+        ta=2.000000, make_in=true
+    )
+    connect!(top, sender_ref.out, receiver_ref.in)
+    model = compile_devs(top, (UniversalEvent,))
+
+    simulate_devs!(model)
+
+    sender = model[model.path_to_id["top.sender"]]
+    @test sender.n_internal == 1
+    @test sender.n_external == 0
+    @test sender.n_confluent == 0
+    @test length(sender.inbox_log) == 0
+
+    receiver = model[model.path_to_id["top.receiver"]]
+    @test receiver.n_internal == 1
+    @test receiver.n_external == 1
+    @test receiver.n_confluent == 0
+    @test length(receiver.inbox_log) == 1
 end