diff options
Diffstat (limited to 'tcllib/modules/struct/disjointset.testsuite')
-rw-r--r-- | tcllib/modules/struct/disjointset.testsuite | 223 |
1 files changed, 223 insertions, 0 deletions
diff --git a/tcllib/modules/struct/disjointset.testsuite b/tcllib/modules/struct/disjointset.testsuite new file mode 100644 index 0000000..09f16a6 --- /dev/null +++ b/tcllib/modules/struct/disjointset.testsuite @@ -0,0 +1,223 @@ +# -*- tcl -*- +# Tests for the 'disjointset' module in the 'struct' library. -*- tcl -*- +# +# This file contains a collection of tests for one or more of the Tcllib +# procedures. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. +# +# Copyright (c) 2008 by Alejandro Eduardo Cruz Paz +# Copyright (c) 2008 by Andreas Kupries (extended for API changes and error conditions) +# +# RCS: @(#) $Id: disjointset.testsuite,v 1.1 2008/09/10 16:23:14 andreas_kupries Exp $ + +#---------------------------------------------------------------------- + +test disjointset-${impl}-1.0 {disjointset creation} { + ::struct::disjointset DS + set result [djstate DS] + DS destroy + set result +} {{} 0} + +test disjointset-${impl}-1.1 {disjointset creation error} { + catch {::struct::disjointset DS other} msg + set result $msg +} {wrong # args: should be "::struct::disjointset ?name?"} + +#---------------------------------------------------------------------- + +test disjointset-${impl}-2.0 {disjointset add-partition error, wrong#args, missing} { + ::struct::disjointset DS + catch {DS add-partition} msg + DS destroy + set msg +} [tcltest::wrongNumArgs ::struct::disjointset::_add-partition {name items} 1] + +test disjointset-${impl}-2.1 {disjointset add-partition error, wrong#args, too many} { + ::struct::disjointset DS + catch {DS add-partition x y} msg + DS destroy + set msg +} [tcltest::tooManyArgs ::struct::disjointset::_add-partition {name items}] + +test disjointset-${impl}-2.2 {disjointset add-partition error, elements already known} { + testset + catch {DS add-partition {1}} msg + DS destroy + set msg +} {The element "1" is already known to the disjoint set ::DS} + +test disjointset-${impl}-2.3 {disjointset add-partition, ok} { + testset + set result [list [DS add-partition {11 14}] [djstate DS]] + DS destroy + set result +} {{} {{0 {1 2 3 4} {5 6} {7 10} {8 9} {11 14}} 6}} + +#---------------------------------------------------------------------- + +test disjointset-${impl}-3.0 {disjointset partitions error, wrong#args, too many} { + ::struct::disjointset DS + catch {DS partitions x} msg + DS destroy + set msg +} [tcltest::tooManyArgs ::struct::disjointset::_partitions {name}] + +test disjointset-${impl}-3.1 {disjointset partitions, ok} { + testset + set result [djstate DS] + DS destroy + set result +} {{0 {1 2 3 4} {5 6} {7 10} {8 9}} 5} + +#---------------------------------------------------------------------- + +test disjointset-${impl}-4.0 {disjointset equal error, wrong#args, missing} { + ::struct::disjointset DS + catch {DS equal} msg + DS destroy + set msg +} [tcltest::wrongNumArgs ::struct::disjointset::_equal {name a b} 1] + +test disjointset-${impl}-4.1 {disjointset equal error, wrong#args, missing} { + ::struct::disjointset DS + catch {DS equal x} msg + DS destroy + set msg +} [tcltest::wrongNumArgs ::struct::disjointset::_equal {name a b} 2] + +test disjointset-${impl}-4.2 {disjointset equal error, wrong#args, too many} { + ::struct::disjointset DS + catch {DS equal x y z} msg + DS destroy + set msg +} [tcltest::tooManyArgs ::struct::disjointset::_equal {name a b}] + +test disjointset-${impl}-4.3 {disjointset equal error, unknown elements} { + testset + catch {DS equal x 1} msg + DS destroy + set msg +} {The element "x" is not known to the disjoint set ::DS} + +test disjointset-${impl}-4.4 {disjointset equal error, unknown elements} { + testset + catch {DS equal 1 x} msg + DS destroy + set msg +} {The element "x" is not known to the disjoint set ::DS} + +test disjointset-${impl}-4.5 {disjointset equal ok, unequal elements} { + testset + set res [DS equal 1 5] + DS destroy + set res +} 0 + +test disjointset-${impl}-4.6 {disjointset equal ok, equal elements} { + testset + set res [DS equal 4 1] + DS destroy + set res +} 1 + +#---------------------------------------------------------------------- + +test disjointset-${impl}-5.0 {disjointset merge error, wrong#args, missing} { + ::struct::disjointset DS + catch {DS merge} msg + DS destroy + set msg +} [tcltest::wrongNumArgs ::struct::disjointset::_merge {name a b} 1] + +test disjointset-${impl}-5.1 {disjointset merge error, wrong#args, missing} { + ::struct::disjointset DS + catch {DS merge x} msg + DS destroy + set msg +} [tcltest::wrongNumArgs ::struct::disjointset::_merge {name a b} 2] + +test disjointset-${impl}-5.2 {disjointset merge error, wrong#args, too many} { + ::struct::disjointset DS + catch {DS merge x y z} msg + DS destroy + set msg +} [tcltest::tooManyArgs ::struct::disjointset::_merge {name a b}] + +test disjointset-${impl}-5.3 {disjointset merge error, unknown elements} { + testset + catch {DS merge x 1} msg + DS destroy + set msg +} {The element "x" is not known to the disjoint set ::DS} + +test disjointset-${impl}-5.4 {disjointset merge error, unknown elements} { + testset + catch {DS merge 1 x} msg + DS destroy + set msg +} {The element "x" is not known to the disjoint set ::DS} + +test disjointset-${impl}-5.5 {disjointset merge ok, different partitions} { + testset + DS merge 1 5 + set result [djstate DS] + DS destroy + set result +} {{0 {1 2 3 4 5 6} {7 10} {8 9}} 4} + +test disjointset-${impl}-5.6 {disjointset merge ok, same partition, no change} { + testset + DS merge 4 3 + set result [djstate DS] + DS destroy + set result +} {{0 {1 2 3 4} {5 6} {7 10} {8 9}} 5} + +#---------------------------------------------------------------------- + +test disjointset-${impl}-6.0 {disjointset find error, wrong#args, missing} { + ::struct::disjointset DS + catch {DS find} msg + DS destroy + set msg +} [tcltest::wrongNumArgs ::struct::disjointset::_find {name item} 1] + +test disjointset-${impl}-6.1 {disjointset find error, wrong#args, too many} { + ::struct::disjointset DS + catch {DS find x y} msg + DS destroy + set msg +} [tcltest::tooManyArgs ::struct::disjointset::_find {name item}] + +test disjointset-${impl}-6.2 {disjointset find, unknown element} { + testset + set result [DS find 11] + DS destroy + set result +} {} + +test disjointset-${impl}-6.3 {disjointset find, known element} { + testset + set result [lsort -dict [DS find 3]] + DS destroy + set result +} {1 2 3 4} + +#---------------------------------------------------------------------- + +test disjointset-${impl}-7.0 {disjointset num-partitions error, wrong#args, too many} { + ::struct::disjointset DS + catch {DS num-partitions x} msg + DS destroy + set msg +} [tcltest::tooManyArgs ::struct::disjointset::_num-partitions {name}] + +test disjointset-${impl}-7.1 {disjointset num-partitions, ok} { + testset + set result [DS num-partitions] + DS destroy + set result +} 5 + +#---------------------------------------------------------------------- |