diff options
Diffstat (limited to 'tests/modules')
| -rw-r--r-- | tests/modules/graph/test.lua | 42 | ||||
| -rw-r--r-- | tests/modules/jobgraph/test.lua | 45 |
2 files changed, 87 insertions, 0 deletions
diff --git a/tests/modules/graph/test.lua b/tests/modules/graph/test.lua index fe1d63e8d..7c17a4fec 100644 --- a/tests/modules/graph/test.lua +++ b/tests/modules/graph/test.lua @@ -170,6 +170,48 @@ function test_paritail_topo_sort_dynamic(t) end end +function test_remove_edge_and_vertex(t) + local gh = graph.new(true) + gh:add_edge("a", "b") + gh:add_edge("b", "c") + gh:add_edge("c", "d") + gh:add_edge("a", "d") + + t:require(gh:has_edge("a", "b")) + gh:remove_edge("a", "b") + t:require(not gh:has_edge("a", "b")) + t:require(gh:has_edge("a", "d")) + + gh:remove_vertex("c") + t:require(not gh:has_edge("b", "c")) + t:require(not gh:has_edge("c", "d")) + t:are_equal(#gh:vertices(), 3) + local order = gh:topo_sort() + t:require(#order == 3) + + gh:add_edge("b", "a") + gh:add_edge("d", "b") + local _, has_cycle = gh:topo_sort() + t:require(has_cycle) +end + +function test_clone_reverse_undirected(t) + local ug = graph.new(false) + ug:add_edge(1, 2) + ug:add_edge(2, 3) + ug:add_edge(3, 1) + + local clone = ug:clone() + t:require(#clone:edges() == #ug:edges()) + t:require(clone:has_edge(1, 2)) + t:require(clone:has_edge(2, 1)) + + local rev = ug:reverse() + t:require(rev:has_edge(1, 2)) + t:require(rev:has_edge(2, 1)) + t:require(#rev:edges() == #ug:edges()) +end + function test_find_cycle(t) local edges = { {9, 1}, diff --git a/tests/modules/jobgraph/test.lua b/tests/modules/jobgraph/test.lua new file mode 100644 index 000000000..ba01d38da --- /dev/null +++ b/tests/modules/jobgraph/test.lua @@ -0,0 +1,45 @@ +import("async.jobgraph") + +local function dummy_job() end + +function test_group_bridge_reuse(t) + local jobs = jobgraph.new() + jobs:group("foo", function () + jobs:add("foo/1", dummy_job) + jobs:add("foo/2", dummy_job) + end) + jobs:group("bar", function () + jobs:add("bar/1", dummy_job) + end) + jobs:add_orders("foo", "bar") + local vertices_before = #jobs._dag:vertices() + jobs:add_orders("foo", "bar") + local vertices_after = #jobs._dag:vertices() + t:are_equal(vertices_before, vertices_after) +end + +function test_group_bridge_updates_with_new_job(t) + local jobs = jobgraph.new() + jobs:group("foo", function () + jobs:add("foo/1", dummy_job) + end) + jobs:group("bar", function () + jobs:add("bar/1", dummy_job) + end) + jobs:add_orders("foo", "bar") + jobs:group("foo", function () + jobs:add("foo/2", dummy_job) + end) + + local queue = jobs:build() + local first = queue:getfree() + t:require(first.name == "foo/1" or first.name == "foo/2") + queue:remove(first) + local second = queue:getfree() + t:require(second.name == "foo/1" or second.name == "foo/2") + t:require(second.name ~= first.name) + queue:remove(second) + local third = queue:getfree() + t:are_equal(third.name, "bar/1") +end + |
