metagraphoptimization.jl/test/known_graphs.jl
Anton Reinhard 97ccb3f3fb
Some checks failed
MetagraphOptimization_CI / docs (push) Failing after 6m56s
MetagraphOptimization_CI / test (push) Failing after 7m25s
Remove occurrences of Fusion/Fuse
2024-08-13 17:57:16 +02:00

60 lines
1.6 KiB
Julia

using MetagraphOptimization
using Random
RNG = Random.MersenneTwister(321)
function test_known_graph(name::String, n)
@testset "Test $name Graph ($n)" begin
graph = parse_dag(joinpath(@__DIR__, "..", "input", "$name.txt"), ABCModel())
props = get_properties(graph)
test_random_walk(RNG, graph, n)
end
end
function test_random_walk(RNG, g::DAG, n::Int64)
@testset "Test Random Walk ($n)" begin
# the purpose here is to do "random" operations and reverse them again and validate that the graph stays the same and doesn't diverge
reset_graph!(g)
@test is_valid(g)
properties = get_properties(g)
for i in 1:n
# choose push or pop
if rand(RNG, Bool)
# push
opt = get_operations(g)
# choose one of split/reduce
option = rand(RNG, 1:2)
if option == 1 && !isempty(opt.nodeReductions)
push_operation!(g, rand(RNG, collect(opt.nodeReductions)))
elseif option == 2 && !isempty(opt.nodeSplits)
push_operation!(g, rand(RNG, collect(opt.nodeSplits)))
else
i = i - 1
end
else
# pop
if (can_pop(g))
pop_operation!(g)
else
i = i - 1
end
end
end
reset_graph!(g)
@test is_valid(g)
@test properties == get_properties(g)
end
end
test_known_graph("AB->AB", 10000)
test_known_graph("AB->ABBB", 10000)
test_known_graph("AB->ABBBBB", 1000)