# -*- tcl -*-
#Tests for Spanning Tree Problems
#1) Minimum Degree Spanning Tree
#2) Minimum Diameter Spanning Tree
#
# ------------------------------------------------------------------------------------
# Tests concerning returning right values by algorithm
# ------------------------------------------------------------------------------------
#Minimum Diameter Spanning Tree Tests
#Test 1.0
test graphop-t${treeimpl}-g${impl}-s${setimpl}-st${stkimpl}-q${queimpl}-MinimumDiameterSpanningTree-1.0 { graph simulation } {
SETUP_MDST_1
set solution [struct::graph::op::MinimumDiameterSpanningTree mygraph]
set result [list \
[lsort -dict [$solution nodes]] \
[lsort -dict [undirected [$solution arcs]]]]
$solution destroy
mygraph destroy
set result
} {{a b c d e f g h i j} {{a b} {b c} {c d} {c g} {d e} {d h} {e f} {g i} {h j}}}
#Test 1.1 - case when given graph is a spanning tree already
test graphop-t${treeimpl}-g${impl}-s${setimpl}-st${stkimpl}-q${queimpl}-MinimumDiameterSpanningTree-1.1 { graph simulation } {
SETUP_MDST_3
set solution [struct::graph::op::MinimumDiameterSpanningTree mygraph]
set result [list \
[lsort -dict [$solution nodes]] \
[lsort -dict [undirected [$solution arcs]]]]
$solution destroy
mygraph destroy
set result
} {{a b c d e} {{a b} {b c} {c d} {d e}}}
#Test 1.2
test graphop-t${treeimpl}-g${impl}-s${setimpl}-st${stkimpl}-q${queimpl}-MinimumDiameterSpanningTree-1.2 { graph simulation } {
SETUP_MDST_4
set solution [struct::graph::op::MinimumDiameterSpanningTree mygraph]
set result [list \
[lsort -dict [$solution nodes]] \
[lsort -dict [undirected [$solution arcs]]]]
$solution destroy
mygraph destroy
set result
} [tmE \
{{a b c d e f g} {{a b} {b c} {c d} {d e} {d g} {e f}}} \
{{a b c d e f g} {{a b} {b c} {c d} {d e} {d g} {f g}}}]
#Test 1.3
test graphop-t${treeimpl}-g${impl}-s${setimpl}-st${stkimpl}-q${queimpl}-MinimumDiameterSpanningTree-1.3 { graph simulation } {
SETUP_MDST_5
set solution [struct::graph::op::MinimumDiameterSpanningTree mygraph]
set result [list \
[lsort -dict [$solution nodes]] \
[lsort -dict [undirected [$solution arcs]]]]
$solution destroy
mygraph destroy
set result
} {{a b c d e} {{a c} {b c} {c d} {c e}}}
#Minimum Degree Spanning Tree Tests
#Test 1.4
test graphop-t${treeimpl}-g${impl}-s${setimpl}-st${stkimpl}-q${queimpl}-MinimumDegreeSpanningTree-1.4 { graph simulation } {
SETUP_MDST_2
set solution [struct::graph::op::MinimumDegreeSpanningTree mygraph]
set result [list \
[lsort -dict [$solution nodes]] \
[lsort -dict [undirected [$solution arcs]]]]
$solution destroy
mygraph destroy
set result
} {{v1 v2 v3 v4 v5 v6 v7 v8} {{v1 v2} {v1 v3} {v2 v4} {v4 v5} {v5 v7} {v6 v8} {v7 v8}}}
#Test 1.5 - case when graph is "wheel structured" (one central node and the rest of nodes around central one)
test graphop-t${treeimpl}-g${impl}-s${setimpl}-st${stkimpl}-q${queimpl}-MinimumDegreeSpanningTree-1.5 { graph simulation } {
SETUP_MDST_6
set solution [struct::graph::op::MinimumDegreeSpanningTree mygraph]
set result [list \
[lsort -dict [$solution nodes]] \
[lsort -dict [undirected [$solution arcs]]]]
$solution destroy
mygraph destroy
set result
} [tmE [tmSE \
{{a b c d e f g} {{a f} {a g} {b c} {c g} {d e} {e f}}} \
{{a b c d e f g} {{a b} {a f} {b c} {c g} {d g} {e f}}}] \
{{a b c d e f g} {{a f} {b c} {b g} {d e} {d g} {f g}}}]
#Test 1.6 - case when graph is "wheel structured" (one central node and the rest of nodes around central one)
test graphop-t${treeimpl}-g${impl}-s${setimpl}-st${stkimpl}-q${queimpl}-MinimumDegreeSpanningTree-1.6 { graph simulation } {
SETUP_MDST_7
set solution [struct::graph::op::MinimumDegreeSpanningTree mygraph]
set result [list \
[lsort -dict [$solution nodes]] \
[lsort -dict [undirected [$solution arcs]]]]
$solution destroy
mygraph destroy
set result
} [tmE \
{{a b c d e f} {{a f} {b c} {b d} {c e} {e f}}} \
{{a b c d e f} {{a f} {b c} {c d} {d e} {e f}}}]
# -------------------------------------------------------------------------
# Wrong # args: Missing, Too many
# Minimum Diameter Spanning Tree Tests
test graphop-t${treeimpl}-g${impl}-s${setimpl}-st${stkimpl}-q${queimpl}-MinimumDiameterSpanningTree-2.0 { MinimumDiameterSpanningTree, wrong args, missing } {
catch {struct::graph::op::MinimumDiameterSpanningTree} msg
set msg
} [tcltest::wrongNumArgs struct::graph::op::MinimumDiameterSpanningTree {G} 0]
test graphop-t${treeimpl}-g${impl}-s${setimpl}-st${stkimpl}-q${queimpl}-MinimumDiameterSpanningTree-2.1 { MinimumDiameterSpanningTree, wrong args, too many} {
catch {struct::graph::op::MinimumDiameterSpanningTree G s} msg
set msg
} [tcltest::tooManyArgs struct::graph::op::MinimumDiameterSpanningTree {G}]
#Minimum Degree Spanning Tree Tests
test graphop-t${treeimpl}-g${impl}-s${setimpl}-st${stkimpl}-q${queimpl}-MinimumDegreeSpanningTree-2.2 { MinimumDegreeSpanningTree, wrong args, missing } {
catch {struct::graph::op::MinimumDegreeSpanningTree} msg
set msg
} [tcltest::wrongNumArgs struct::graph::op::MinimumDegreeSpanningTree {G} 0]
test graphop-t${treeimpl}-g${impl}-s${setimpl}-st${stkimpl}-q${queimpl}-MinimumDegreeSpanningTree-2.3 { MinimumDegreeSpanningTree, wrong args, too many} {
catch {struct::graph::op::MinimumDegreeSpanningTree G s} msg
set msg
} [tcltest::tooManyArgs struct::graph::op::MinimumDegreeSpanningTree {G}]
# -------------------------------------------------------------------------
# Logical arguments checks and failures