PreviousUpNext

15.4.794  src/lib/graph/test-max-flow.pkg

## test-max-flow.pkg
#

# Invoked by src/lib/graph/test-all.pkg

CM::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

}


Comments and suggestions to: bugs@mythryl.org

PreviousUpNext