summaryrefslogtreecommitdiff
path: root/tests/modules
diff options
context:
space:
mode:
Diffstat (limited to 'tests/modules')
-rw-r--r--tests/modules/graph/test.lua42
-rw-r--r--tests/modules/jobgraph/test.lua45
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
+