function test_random_walk(g::DAG, n::Int64)
    # 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)

    properties = graph_properties(g)

    for i = 1:n
        # choose push or pop
        if rand(Bool)
            # push
            opt = get_operations(g)

            # choose one of fuse/split/reduce
            option = rand(1:3)
            if option == 1 && !isempty(opt.nodeFusions)
                push_operation!(g, rand(collect(opt.nodeFusions)))
            elseif option == 2 && !isempty(opt.nodeReductions)
                push_operation!(g, rand(collect(opt.nodeReductions)))
            elseif option == 3 && !isempty(opt.nodeSplits)
                push_operation!(g, rand(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)
end