From 8ebeecb5d705a3218ff4e7bf695b696822e4e6d8 Mon Sep 17 00:00:00 2001 From: Abhishek Bhatt Date: Thu, 1 Feb 2024 19:04:09 -0500 Subject: [PATCH] update and polish the code --- src/queries.jl | 2 +- test/test_entanglement_consumer.jl | 58 ++++++++++++++++++------------ test/test_tags_and_queries.jl | 3 +- 3 files changed, 38 insertions(+), 25 deletions(-) diff --git a/src/queries.jl b/src/queries.jl index c1a28be7..f17f4a70 100644 --- a/src/queries.jl +++ b/src/queries.jl @@ -262,7 +262,7 @@ for (tagsymbol, tagvariant) in pairs(tag_types) argssig_wild = [:($a::$t) for (a,t) in zip(args, sig_wild)] wild_checks = [:(isa($(args[i]),Wildcard) || $(args[i])(tag[$i])) for i in idx] nonwild_checks = [:(tag[$i]==$(args[i])) for i in complement_idx] - newmethod_reg = quote function query(reg::Register, $(argssig_wild...), ::Val{allB}=Val{false}(); locked::Union{Nothing,Bool}=nothing, assigned::Union{Nothing,Bool}=nothing) where {allB} + newmethod_reg = quote function query(reg::Register, $(argssig_wild...), ::Val{allB}=Val{false}(), ::Val{fifo}=Val{true}(); locked::Union{Nothing,Bool}=nothing, assigned::Union{Nothing,Bool}=nothing) where {allB, fifo} res = NamedTuple{(:slot, :tag), Tuple{RegRef, Tag}}[] for (reg_idx, tags) in enumerate(reg.tags) slot = reg[reg_idx] diff --git a/test/test_entanglement_consumer.jl b/test/test_entanglement_consumer.jl index 6f5c71ca..eae00f62 100644 --- a/test/test_entanglement_consumer.jl +++ b/test/test_entanglement_consumer.jl @@ -4,35 +4,47 @@ using Graphs using ConcurrentSim using Test -using Logging -logger = ConsoleLogger(Logging.Debug; meta_formatter=(args...)->(:black,"","")) -global_logger(logger) +if isinteractive() + using Logging + logger = ConsoleLogger(Logging.Warn; meta_formatter=(args...)->(:black,"","")) + global_logger(logger) + println("Logger set to debug") +end -n = 5 +for i in 1:30, n in 3:30 -net = RegisterNet([Register(100) for j in 1:n]) -sim = get_time_tracker(net) + net = RegisterNet([Register(10) for j in 1:n]) + sim = get_time_tracker(net) -for e in edges(net) - eprot = EntanglerProt(sim, net, e.src, e.dst; rounds=-1, randomize=true) - @process eprot() -end + for e in edges(net) + eprot = EntanglerProt(sim, net, e.src, e.dst; rounds=-1, randomize=true) + @process eprot() + end -for v in 2:n-1 - sprot = SwapperProt(sim, net, v; rounds=-1) - @process sprot() -end + for v in 2:n-1 + sprot = SwapperProt(sim, net, v; rounds=-1) + @process sprot() + end -for v in vertices(net) - etracker = EntanglementTracker(sim, net, v) - @process etracker() -end + for v in vertices(net) + etracker = EntanglementTracker(sim, net, v) + @process etracker() + end + + econ = EntanglementConsumer(sim, net, 1, 3, [], 1.0) + @process econ() -econ = EntanglementConsumer(sim, net, 1, 3, [], 1.0) -@process econ() + run(sim, 100) -run(sim, 400) + for i in 1:100 + if !isnothing(econ.log[i][2]) + @test econ.log[i][2] ≈ 1.0 + @test econ.log[i][3] ≈ 1.0 + end + end -@test length([econ.log[i] for i in 1:400 if !isnothing(econ.log[i][2])]) > 300 -# length([net[2].tags[i][end] for i in 1:100 if net[2].tags[i][end][2]==4]) # almost all slots connnected to either 3, 4 or 5, so no room for swaps \ No newline at end of file +end +# @test length([econ.log[i] for i in 1:400 if !isnothing(econ.log[i][2])]) > 300 +# length([net[2].tags[i][end] for i in 1:100 if net[2].tags[i][end][2]==4]) # almost all slots connnected to either 3, 4 or 5, so no room for swaps +# [net[2].tags[i][end] for i in 1:100] \ No newline at end of file diff --git a/test/test_tags_and_queries.jl b/test/test_tags_and_queries.jl index 46d975cc..f8622514 100644 --- a/test/test_tags_and_queries.jl +++ b/test/test_tags_and_queries.jl @@ -46,7 +46,7 @@ tag!(reg[3], EntanglementCounterpart, 5, 1) tag!(reg[3], EntanglementCounterpart, 1, 9) tag!(reg[3], EntanglementCounterpart, 5, 1) -queryall(reg[3], EntanglementCounterpart, 5, 1) +@test query(reg[3], EntanglementCounterpart, 5, 1) == (depth = 7, tag = Tag(EntanglementCounterpart, 5, 1)) @test queryall(reg[3], EntanglementCounterpart, 5, 1) == [(depth = 7, tag = Tag(EntanglementCounterpart, 5, 1)), (depth = 5, tag = Tag(EntanglementCounterpart, 5, 1)), (depth = 2, tag = Tag(EntanglementCounterpart, 5, 1))] @test queryall(reg[3], EntanglementCounterpart, 5, 1; fifo=false) == [(depth = 2, tag = Tag(EntanglementCounterpart, 5, 1)), (depth = 5, tag = Tag(EntanglementCounterpart, 5, 1)), (depth = 7, tag = Tag(EntanglementCounterpart, 5, 1))] @@ -77,5 +77,6 @@ tag!(reg[1], EntanglementCounterpart, 1, 9) tag!(reg[1], EntanglementCounterpart, 5, 1) tag!(reg[1], EntanglementCounterpart, 9, 3) +@test query(reg, EntanglementCounterpart, 5, 1) == (slot = reg[4], tag = Tag(EntanglementCounterpart, 5, 1)) @test queryall(reg, EntanglementCounterpart, 5, 1) == [(slot = reg[4], tag = Tag(EntanglementCounterpart, 5, 1)), (slot = reg[3], tag = Tag(EntanglementCounterpart, 5, 1)), (slot = reg[1], tag = Tag(EntanglementCounterpart, 5, 1))] @test queryall(reg, Tag(EntanglementCounterpart, 5, 1); fifo=false) == [(slot = reg[1], tag = Tag(EntanglementCounterpart, 5, 1)), (slot = reg[3], tag = Tag(EntanglementCounterpart, 5, 1)), (slot = reg[4], tag = Tag(EntanglementCounterpart, 5, 1))] \ No newline at end of file