summaryrefslogtreecommitdiffstats
path: root/tcllib/modules/struct/sets.testsuite
diff options
context:
space:
mode:
Diffstat (limited to 'tcllib/modules/struct/sets.testsuite')
-rw-r--r--tcllib/modules/struct/sets.testsuite529
1 files changed, 529 insertions, 0 deletions
diff --git a/tcllib/modules/struct/sets.testsuite b/tcllib/modules/struct/sets.testsuite
new file mode 100644
index 0000000..29fd3ef
--- /dev/null
+++ b/tcllib/modules/struct/sets.testsuite
@@ -0,0 +1,529 @@
+# Tests for the 'set' 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) 2004-2008 by Andreas Kupries
+#
+# RCS: @(#) $Id: sets.testsuite,v 1.6 2008/03/09 04:38:47 andreas_kupries Exp $
+
+#----------------------------------------------------------------------
+
+test set-${impl}-1.0 {nothing} {
+ catch {setop} msg
+ set msg
+} [Nothing]
+
+test set-${impl}-1.1 {bogus} {
+ catch {setop foo} msg
+ set msg
+} {bad option "foo": must be add, contains, difference, empty, equal, exclude, include, intersect, intersect3, size, subsetof, subtract, symdiff, or union}
+
+
+test set-${impl}-2.0 {emptiness} {
+ catch {setop empty} msg
+ set msg
+} [tmWrong empty {set} 0]
+
+test set-${impl}-2.1 {emptiness} {
+ catch {setop empty a b} msg
+ set msg
+} [tmTooMany empty {set}]
+
+test set-${impl}-2.2 {emptiness} {
+ setop empty $sempty
+} 1
+
+test set-${impl}-2.3 {emptiness} {
+ setop empty $smultiples
+} 0
+
+test set-${impl}-2.4 {emptiness} {
+ setop empty $sa
+} 0
+
+
+test set-${impl}-3.0 {size} {
+ catch {setop size} msg
+ set msg
+} [tmWrong size {set} 0]
+
+test set-${impl}-3.1 {size} {
+ catch {setop size a b} msg
+ set msg
+} [tmTooMany size {set}]
+
+test set-${impl}-3.2 {size} {
+ setop size $sempty
+} 0
+
+test set-${impl}-3.3 {size} {
+ setop size $smultiples
+} 7
+
+test set-${impl}-3.4 {size} {
+ setop size $sa
+} 4
+
+
+test set-${impl}-4.0 {union} {
+ setop union
+} {}
+
+test set-${impl}-4.1 {union} {
+ setop union $sempty
+} $sempty
+
+test set-${impl}-4.2 {union} {
+ luniq [setop union $smultiples]
+} [luniq $smultiples]
+
+test set-${impl}-4.3 {union} {
+ luniq [setop union $sa]
+} $sa
+
+test set-${impl}-4.4 {union} {
+ lsort [setop union $sa $sb]
+} $sf
+
+test set-${impl}-4.5 {union} {
+ lsort [setop union $sa $sc]
+} $sd
+
+test set-${impl}-4.6 {union} {
+ lsort [setop union $sa $sd]
+} $sd
+
+test set-${impl}-4.7 {union} {
+ lsort [setop union $sa $sempty]
+} $sa
+
+test set-${impl}-4.8 {union} {
+ lsort [setop union $sempty $sa]
+} $sa
+
+test set-${impl}-4.9 {union} {
+ lsort [setop union $sempty $sempty]
+} $sempty
+
+test set-${impl}-4.10 {union} {
+ lsort [setop union $sa $sempty $smultiples]
+} $sg
+
+
+test set-${impl}-5.0 {intersect} {
+ setop intersect
+} {}
+
+test set-${impl}-5.1 {intersect} {
+ setop intersect $sempty
+} $sempty
+
+test set-${impl}-5.2 {intersect} {
+ luniq [setop intersect $smultiples]
+} [luniq $smultiples]
+
+test set-${impl}-5.3 {intersect} {
+ luniq [setop intersect $sa]
+} $sa
+
+test set-${impl}-5.4 {intersect} {
+ lsort [setop intersect $sa $sb]
+} $sempty
+
+test set-${impl}-5.5 {intersect} {
+ lsort [setop intersect $sa $sc]
+} $sh
+
+test set-${impl}-5.6 {intersect} {
+ lsort [setop intersect $sa $sd]
+} $sa
+
+test set-${impl}-5.7 {intersect} {
+ lsort [setop intersect $sa $sempty]
+} $sempty
+
+test set-${impl}-5.8 {intersect} {
+ lsort [setop intersect $sempty $sa]
+} $sempty
+
+test set-${impl}-5.9 {intersect} {
+ lsort [setop intersect $sempty $sempty]
+} $sempty
+
+test set-${impl}-5.10 {intersect} {
+ lsort [setop intersect $sa $sempty $smultiples]
+} $sempty
+
+test set-${impl}-5.11 {intersect} {
+ lsort [setop intersect $sa $sa]
+} $sa
+
+test set-${impl}-5.12 {intersect} {
+ lsort [setop intersect $sa $sc $sd]
+} $sh
+
+test set-${impl}-5.13 {intersect} {
+ lsort [setop intersect $sa $sc {x y}]
+} $sempty
+
+
+test set-${impl}-6.0 {difference} {
+ catch {setop difference} msg
+ set msg
+} [tmWrong difference {A B} 0]
+
+test set-${impl}-6.1 {difference} {
+ catch {setop difference a} msg
+ set msg
+} [tmWrong difference {A B} 1]
+
+test set-${impl}-6.2 {difference} {
+ catch {setop difference a b c} msg
+ set msg
+} [tmTooMany difference {A B}]
+
+test set-${impl}-6.3 {difference} {
+ luniq [setop difference $sa $sempty]
+} $sa
+
+test set-${impl}-6.4 {difference} {
+ setop difference $sempty $sa
+} $sempty
+
+test set-${impl}-6.5 {difference} {
+ lsort [setop difference $sa $sb]
+} $sa
+
+test set-${impl}-6.6 {difference} {
+ lsort [setop difference $sa $sc]
+} $si
+
+test set-${impl}-6.7 {difference} {
+ lsort [setop difference $sa $sd]
+} $sempty
+
+test set-${impl}-6.8 {difference} {
+ lsort [setop difference $sd $sa]
+} $sj
+
+test set-${impl}-6.9 {difference} {
+ lsort [setop difference \
+ [list "Washington, DC (District of Columbia)" Maryland Virginia] \
+ [list "Washington, DC (District of Columbia)" Virginia]]
+} Maryland
+
+test set-${impl}-6.10 {difference} {
+ lsort [setop difference \
+ [list DC Maryland Virginia] \
+ [list DC Virginia]]
+} Maryland
+
+
+test set-${impl}-7.0 {symdiff} {
+ catch {setop symdiff} msg
+ set msg
+} [tmWrong symdiff {A B} 0]
+
+test set-${impl}-7.1 {symdiff} {
+ catch {setop symdiff a} msg
+ set msg
+} [tmWrong symdiff {A B} 1]
+
+test set-${impl}-7.2 {symdiff} {
+ catch {setop symdiff a b c} msg
+ set msg
+} [tmTooMany symdiff {A B}]
+
+test set-${impl}-7.3 {symdiff} {
+ lsort [setop symdiff $sa $sempty]
+} $sa
+
+test set-${impl}-7.4 {symdiff} {
+ lsort [setop symdiff $sempty $sa]
+} $sa
+
+test set-${impl}-7.5 {symdiff} {
+ lsort [setop symdiff $sa $sb]
+} $sf
+
+test set-${impl}-7.6 {symdiff} {
+ lsort [setop symdiff $sa $sc]
+} $sk
+
+test set-${impl}-7.7 {symdiff} {
+ lsort [setop symdiff $sa $sd]
+} $sj
+
+test set-${impl}-7.8 {symdiff} {
+ lsort [setop symdiff $sd $sa]
+} $sj
+
+
+test set-${impl}-8.0 {intersect3} {
+ catch {setop intersect3} msg
+ set msg
+} [tmWrong intersect3 {A B} 0]
+
+test set-${impl}-8.1 {intersect3} {
+ catch {setop intersect3 a} msg
+ set msg
+} [tmWrong intersect3 {A B} 1]
+
+test set-${impl}-8.2 {intersect3} {
+ catch {setop intersect3 a b c} msg
+ set msg
+} [tmTooMany intersect3 {A B}]
+
+test set-${impl}-8.3 {intersect3} {
+ foreach {i da db} [setop intersect3 $sa $sempty] break
+ list [lsort $i] [lsort $da] [lsort $db]
+} [list $sempty $sa $sempty]
+
+test set-${impl}-8.4 {intersect3} {
+ foreach {i da db} [setop intersect3 $sempty $sa] break
+ list [lsort $i] [lsort $da] [lsort $db]
+} [list $sempty $sempty $sa]
+
+test set-${impl}-8.5 {intersect3} {
+ foreach {i da db} [setop intersect3 $sa $sb] break
+ list [lsort $i] [lsort $da] [lsort $db]
+} [list $sempty $sa $sb]
+
+test set-${impl}-8.6 {intersect3} {
+ foreach {i da db} [setop intersect3 $sa $sc] break
+ list [lsort $i] [lsort $da] [lsort $db]
+} [list $sh $si $sj]
+
+test set-${impl}-8.7 {intersect3} {
+ foreach {i da db} [setop intersect3 $sa $sd] break
+ list [lsort $i] [lsort $da] [lsort $db]
+} [list $sa $sempty $sj]
+
+test set-${impl}-8.8 {intersect3} {
+ foreach {i da db} [setop intersect3 $sempty $sempty] break
+ list [lsort $i] [lsort $da] [lsort $db]
+} [list $sempty $sempty $sempty]
+
+test set-${impl}-8.9 {intersect3} {
+ foreach {i da db} [setop intersect3 $sa $sa] break
+ list [lsort $i] [lsort $da] [lsort $db]
+} [list $sa $sempty $sempty]
+
+
+test set-${impl}-9.0 {equal} {
+ catch {setop equal} msg
+ set msg
+} [tmWrong equal {A B} 0]
+
+test set-${impl}-9.1 {equal} {
+ catch {setop equal a} msg
+ set msg
+} [tmWrong equal {A B} 1]
+
+test set-${impl}-9.2 {equal} {
+ catch {setop equal a b c} msg
+ set msg
+} [tmTooMany equal {A B}]
+
+test set-${impl}-9.3 {equal} {
+ setop equal $sempty $sempty
+} 1
+
+test set-${impl}-9.4 {equal} {
+ setop equal $sempty $sa
+} 0
+
+test set-${impl}-9.5 {equal} {
+ setop equal $sa $sempty
+} 0
+
+test set-${impl}-9.6 {equal} {
+ setop equal $sa $sb
+} 0
+
+test set-${impl}-9.7 {equal} {
+ setop equal $sa $sa
+} 1
+
+test set-${impl}-9.8 {equal} {
+ setop equal $sa $sd
+} 0
+
+test set-${impl}-9.9 {equal} {
+ setop equal $smultiples $sg
+} 1
+
+
+test set-${impl}-10.0 {include} {
+ catch {setop include} msg
+ set msg
+} [tmWrong include {Avar element} 0]
+
+test set-${impl}-10.1 {include} {
+ catch {setop include A} msg
+ set msg
+} [tmWrong include {Avar element} 1]
+
+test set-${impl}-10.2 {include, non-existing variable} {
+ catch {unset A}
+ setop include A B
+ set A
+} {B}
+
+test set-${impl}-10.3 {include, missing} {
+ catch {unset A} ; set A $sa
+ setop include A B
+ lsort $A
+} {B a::foo b::foo c::foo d::foo}
+
+test set-${impl}-10.4 {include, known} {
+ catch {unset A} ; set A $sa
+ setop include A a::foo
+ lsort $A
+} $sa
+
+test set-${impl}-10.5-bug-1908098 {include, non-existent variable} {
+ catch {unset A}
+ catch {unset res}
+ lappend res [setop include A a::foo]
+ lappend res [lsort $A]
+} {{} a::foo}
+
+test set-${impl}-11.0 {exclude} {
+ catch {setop exclude} msg
+ set msg
+} [tmWrong exclude {Avar element} 0]
+
+test set-${impl}-11.1 {exclude} {
+ catch {setop exclude A} msg
+ set msg
+} [tmWrong exclude {Avar element} 1]
+
+test set-${impl}-11.2 {exclude, non-existent variable} {
+ catch {unset X}
+ catch {setop exclude X B} msg
+ set msg
+} {can't read "X": no such variable}
+
+test set-${impl}-11.3 {exclude} {
+ catch {unset A} ; set A $sa
+ setop exclude A B
+ lsort $A
+} $sa
+
+test set-${impl}-11.4 {exclude} {
+ catch {unset A} ; set A $sa
+ setop exclude A a::foo
+ lsort $A
+} $sl
+
+
+test set-${impl}-12.0 {add} {
+ catch {setop add} msg
+ set msg
+} [tmWrong add {Avar B} 0]
+
+test set-${impl}-12.1 {add} {
+ catch {setop add A} msg
+ set msg
+} [tmWrong add {Avar B} 1]
+
+test set-${impl}-12.2 {add, non-existent variable} {
+ catch {unset A}
+ catch {unset res}
+ lappend res [setop add A B]
+ lappend res $A
+} {{} B}
+
+test set-${impl}-12.3 {add, missing} {
+ catch {unset A} ; set A $sa
+ setop add A $sb
+ lsort $A
+} $sf
+
+test set-${impl}-12.4 {add, missing&known} {
+ catch {unset A} ; set A $sa
+ setop add A $sc
+ lsort $A
+} $sd
+
+test set-${impl}-12.5 {add, known} {
+ catch {unset A} ; set A $sa
+ setop add A $sa
+ lsort $A
+} $sa
+
+
+test set-${impl}-13.0 {subtract} {
+ catch {setop subtract} msg
+ set msg
+} [tmWrong subtract {Avar B} 0]
+
+test set-${impl}-13.1 {subtract} {
+ catch {setop subtract A} msg
+ set msg
+} [tmWrong subtract {Avar B} 1]
+
+test set-${impl}-13.2 {subtract, non-existent variable} {
+ catch {unset X}
+ catch {setop subtract X B} msg
+ set msg
+} {can't read "X": no such variable}
+
+test set-${impl}-13.3 {subtract} {
+ catch {unset A} ; set A $sa
+ setop subtract A $sb
+ lsort $A
+} $sa
+
+test set-${impl}-13.4 {subtract} {
+ catch {unset A} ; set A $sa
+ setop subtract A $sc
+ lsort $A
+} $si
+
+test set-${impl}-13.5 {subtract} {
+ catch {unset A} ; set A $sa
+ setop subtract A $sa
+ lsort $A
+} {}
+
+
+test set-${impl}-14.0 {subsetof} {
+ catch {setop subsetof} msg
+ set msg
+} [tmWrong subsetof {A B} 0]
+
+test set-${impl}-14.1 {subsetof} {
+ catch {setop subsetof A} msg
+ set msg
+} [tmWrong subsetof {A B} 1]
+
+test set-${impl}-14.2 {subsetof} {
+ setop subsetof $sa $sb
+} 0
+
+test set-${impl}-14.3 {subsetof} {
+ setop subsetof $sa $sc
+} 0
+
+test set-${impl}-14.4 {subsetof} {
+ setop subsetof $sa $sa
+} 1
+
+test set-${impl}-14.5 {subsetof} {
+ setop subsetof $sa $sf
+} 1
+
+#----------------------------------------------------------------------
+
+test set-${impl}-15.0 {shimmering, keep order} {
+ set pure [list a b c d e f] ; # pure value
+ setop difference {} $pure ; # shimmer to set
+ llength $pure ; # shimmer back to list
+ string range $pure 0 end ; # generate and query the string rep
+} {a b c d e f}
+
+#----------------------------------------------------------------------