# -*- tcl -*-
# Graph ops tests - Connected components.
# Copyright (c) 2008-2010 Andreas Kupries <andreas_kupries@users.sourceforge.net>
# All rights reserved.
# RCS: @(#) $Id: components.test,v 1.4 2010/09/09 21:48:27 andreas_kupries Exp $

# Syntax: struct::graph::op::connectedComponents G

# -------------------------------------------------------------------------
# Wrong # args: Missing, Too many

test graphop-t${treeimpl}-g${impl}-s${setimpl}-st${stkimpl}-q${queimpl}-connectedComponents-1.0 {connectedComponents, wrong args, missing} -body {
    struct::graph::op::connectedComponents
} -returnCodes error -result [tcltest::wrongNumArgs struct::graph::op::connectedComponents {g} 0]

test graphop-t${treeimpl}-g${impl}-s${setimpl}-st${stkimpl}-q${queimpl}-connectedComponents-1.1 {connectedComponents, wrong args, too many} -body {
    struct::graph::op::connectedComponents g x
} -returnCodes error -result [tcltest::tooManyArgs struct::graph::op::connectedComponents {g}]

# -------------------------------------------------------------------------
# Logical arguments checks and failures

# -------------------------------------------------------------------------
# Ok arguments.

test graphop-t${treeimpl}-g${impl}-s${setimpl}-st${stkimpl}-q${queimpl}-connectedComponents-3.0 {connectedComponents, empty graph} -setup {
    SETUP
} -body {
    struct::graph::op::connectedComponents mygraph
} -cleanup {
    mygraph destroy
} -result {}

test graphop-t${treeimpl}-g${impl}-s${setimpl}-st${stkimpl}-q${queimpl}-connectedComponents-3.1 {connectedComponents, nodes, no arcs} -setup {
    SETUP
    mygraph node insert 0 1 2 3 4 5
} -body {
    setsetcanon [struct::graph::op::connectedComponents mygraph]
} -cleanup {
    mygraph destroy
} -result {0 1 2 3 4 5}

test graphop-t${treeimpl}-g${impl}-s${setimpl}-st${stkimpl}-q${queimpl}-connectedComponents-3.2 {connectedComponents, single CC} -setup {
    SETUP_A
} -body {
    setsetcanon [struct::graph::op::connectedComponents mygraph]
} -cleanup {
    mygraph destroy
} -result {{'node0' 'node1' 'node2' 'node3' 'node4' 'node5' 'node6'}}

test graphop-t${treeimpl}-g${impl}-s${setimpl}-st${stkimpl}-q${queimpl}-connectedComponents-3.3 {connectedComponents, single CC} -setup {
    SETUP_B
} -body {
    setsetcanon [struct::graph::op::connectedComponents mygraph]
} -cleanup {
    mygraph destroy
} -result {{A B C D E S}}

test graphop-t${treeimpl}-g${impl}-s${setimpl}-st${stkimpl}-q${queimpl}-connectedComponents-3.4 {connectedComponents, single CC} -setup {
    SETUP_C
} -body {
    setsetcanon [struct::graph::op::connectedComponents mygraph]
} -cleanup {
    mygraph destroy
} -result {{A B C D E F}}

test graphop-t${treeimpl}-g${impl}-s${setimpl}-st${stkimpl}-q${queimpl}-connectedComponents-3.5 {connectedComponents, single CC} -setup {
    SETUP_D
} -body {
    setsetcanon [struct::graph::op::connectedComponents mygraph]
} -cleanup {
    mygraph destroy
} -result {{a b c d f g h i j}}

test graphop-t${treeimpl}-g${impl}-s${setimpl}-st${stkimpl}-q${queimpl}-connectedComponents-3.6 {connectedComponents, single CC} -setup {
    SETUP_E
} -body {
    setsetcanon [struct::graph::op::connectedComponents mygraph]
} -cleanup {
    mygraph destroy
} -result {{1b 1w 2b 2w 3b 3w 4b 4w 5b 5w 6b 6w 7b 7w 8b 8w}}

test graphop-t${treeimpl}-g${impl}-s${setimpl}-st${stkimpl}-q${queimpl}-connectedComponents-3.7 {connectedComponents, single CC} -setup {
    SETUP_F
} -body {
    setsetcanon [struct::graph::op::connectedComponents mygraph]
} -cleanup {
    mygraph destroy
} -result {{1b 1w 2b 2w 3b 3w 4b 4w}}

test graphop-t${treeimpl}-g${impl}-s${setimpl}-st${stkimpl}-q${queimpl}-connectedComponents-3.8 {connectedComponents, single CC} -setup {
    SETUP_G
} -body {
    setsetcanon [struct::graph::op::connectedComponents mygraph]
} -cleanup {
    mygraph destroy
} -result {{1b 1w 2b 2w 3b 3w 4b 4w 5b 5w}}

test graphop-t${treeimpl}-g${impl}-s${setimpl}-st${stkimpl}-q${queimpl}-connectedComponents-3.9 {connectedComponents, single CC} -setup {
    SETUP_H
} -body {
    setsetcanon [struct::graph::op::connectedComponents mygraph]
} -cleanup {
    mygraph destroy
} -result {{A B C D E}}

test graphop-t${treeimpl}-g${impl}-s${setimpl}-st${stkimpl}-q${queimpl}-connectedComponents-3.10 {connectedComponents, single CC} -setup {
    SETUP_I
} -body {
    setsetcanon [struct::graph::op::connectedComponents mygraph]
} -cleanup {
    mygraph destroy
} -result {{N1 N2 N3 N4 N5}}

test graphop-t${treeimpl}-g${impl}-s${setimpl}-st${stkimpl}-q${queimpl}-connectedComponents-3.11 {connectedComponents, multiple CC} -setup {
    SETUP_J
} -body {
    setsetcanon [struct::graph::op::connectedComponents mygraph]
} -cleanup {
    mygraph destroy
} -result {{1 4 5} 2 3 {6 7}}

test graphop-t${treeimpl}-g${impl}-s${setimpl}-st${stkimpl}-q${queimpl}-connectedComponents-3.12 {connectedComponents, multiple CC} -setup {
    SETUP_K
} -body {
    setsetcanon [struct::graph::op::connectedComponents mygraph]
} -cleanup {
    mygraph destroy
} -result {{No1 No2 No3 No4} No5}

# ---------------------------------------------------