## test-max-flow.pkg
#
# Invoked by
src/lib/graph/test-all.pkgCM::make "graphs.lib";
package test_max_flow {
my G as graph::GRAPH g = digraph_by_adjacency_list::graph("foo", (), 10) : graph::graph( String, Int, Void )
package max_flow = maximum_flow_g (pkg type Element = Int use int
zero = 0
my ==== : Int * Int -> Bool = op =
end)
my _ = apply g.add_node
[(0, "s"),
(1, "v1"),
(2, "v2"),
(3, "v3"),
(4, "v4"),
(5, "t")
]
my _ = apply g.add_edge
[(0, 1, 16),
(0, 2, 13),
(1, 2, 10),
(2, 1, 4),
(1, 3, 12),
(2, 4, 14),
(3, 2, 9),
(4, 3, 7),
(3, 5, 20),
(4, 5, 4)
]
fun flows ((i, j, c), f) =
print (int::to_string i + " -> " + int::to_string j + " flow=" + int::to_string f +
" cap=" + int::to_string c + "\n")
fun cap (i, j, c) = c
fun test ()
=
let flow = max_flow::max_flow { graph=G, s=0, t=5, capacity=cap, flows=flows }
in if flow != 23 then raise exception MATCH else flow
end
}