# -*- tcl -*- #Blocking flow by MKM - Tests # # # ------------------------------------------------------------------------------------ # Tests concerning returning right values by algorithm #Test 1.0 - test graphop-t${treeimpl}-g${impl}-s${setimpl}-st${stkimpl}-q${queimpl}-BlockingFlowMKM-1.0 { Tight Example, n+4 - nodes graph } { SETUP_BLOCKINGFLOW_1 set result [dictsort [struct::graph::op::BlockingFlowByMKM mygraph s t]] mygraph destroy set result } {{s v1} 3 {s v3} 2 {v1 v2} 2 {v1 v4} 1 {v2 v5} 2 {v3 v4} 1 {v3 v6} 1 {v4 v5} 1 {v4 v7} 1 {v5 t} 3 {v6 v7} 1 {v7 t} 2} #Test 1.1 - case when input residual graph is created from network that hasn't any flows yet test graphop-t${treeimpl}-g${impl}-s${setimpl}-st${stkimpl}-q${queimpl}-BlockingFlowMKM-1.1 { graph simulation } { SETUP_MAXIMUMFLOW_1 set result [dictsort [struct::graph::op::BlockingFlowByMKM mygraph s t]] mygraph destroy set result } {{s v1} 10 {s v2} 4 {v1 v3} 4 {v1 v4} 6 {v2 v4} 4 {v3 t} 4 {v4 t} 10} #Test 1.2 - case when input residual graph is created from network that has already some flows used in it test graphop-t${treeimpl}-g${impl}-s${setimpl}-st${stkimpl}-q${queimpl}-BlockingFlowMKM-1.2 { graph simulation } { SETUP_BLOCKINGFLOW_2 set result [dictsort [struct::graph::op::BlockingFlowByMKM mygraph s t]] mygraph destroy set result } {{s v2} 5 {v2 v4} 5 {v3 t} 5 {v4 v3} 5} #Test 1.3 - case when from residual graph we get level graph with no arcs - the blocking flow is not found #cause there are no paths between sink and source in residual graph. test graphop-t${treeimpl}-g${impl}-s${setimpl}-st${stkimpl}-q${queimpl}-BlockingFlowMKM-1.3 { graph simulation } { SETUP_BLOCKINGFLOW_3 set result [dictsort [struct::graph::op::BlockingFlowByMKM mygraph s t]] mygraph destroy set result } {} # ------------------------------------------------------------------------- # Wrong # args: Missing, Too many test graphop-t${treeimpl}-g${impl}-s${setimpl}-st${stkimpl}-q${queimpl}-BlockingFlowMKM-2.0 { BlockingFlow, wrong args, missing } { catch {struct::graph::op::BlockingFlowByMKM} msg set msg } [tcltest::wrongNumArgs struct::graph::op::BlockingFlowByMKM {G s t} 0] test graphop-t${treeimpl}-g${impl}-s${setimpl}-st${stkimpl}-q${queimpl}-BlockingFlowMKM-2.1 { BlockingFlow, wrong args, missing } { catch {struct::graph::op::BlockingFlowByMKM G} msg set msg } [tcltest::wrongNumArgs struct::graph::op::BlockingFlowByMKM {G s t} 1] test graphop-t${treeimpl}-g${impl}-s${setimpl}-st${stkimpl}-q${queimpl}-BlockingFlowMKM-2.2 { BlockingFlow, wrong args, missing } { catch {struct::graph::op::BlockingFlowByMKM G s} msg set msg } [tcltest::wrongNumArgs struct::graph::op::BlockingFlowByMKM {G s t} 2] test graphop-t${treeimpl}-g${impl}-s${setimpl}-st${stkimpl}-q${queimpl}-BlockingFlowMKM-2.3 { BlockingFlow, wrong args, too many} { catch {struct::graph::op::BlockingFlowByMKM G y x z} msg set msg } [tcltest::tooManyArgs struct::graph::op::BlockingFlowByMKM {G s t}] # ------------------------------------------------------------------------- # Logical arguments checks and failures