source [file dirname [info script]]/testing.tcl needs cmd array unset -nocomplain a array set a { 1 one 2 two 22 "twenty two" 3 three } test array-1.1 "array exists - true" { array exists a } {1} test array-1.2 "array exists - false" { array exists b } {0} test array-1.3 "array size" { array size a } {4} test array-1.4 "array size - nonexistant" { array size b } {0} test array-1.5 "array get" { set result {} foreach {name value} [array get a] { lappend result $name $value } lsort $result } {1 2 22 3 one three {twenty two} two} test array-1.6 "array get - pattern" { set result {} foreach {name value} [array get a 2*] { lappend result $name $value } lsort $result } {2 22 {twenty two} two} test array-1.7 "array names" { lsort [array names a] } {1 2 22 3} test array-1.8 "array get - pattern" { lsort [array names a 2*] } {2 22} #set b $a array set b [array get a] test array-1.9 "array set - replace" { array set b {22 twenty-two} set b(22) } {twenty-two} test array-1.10 "array unset - pattern" { array unset b 2* lsort [array names b] } {1 3} test array-1.11 "array unset - all" { array unset b list [array size b] [array exists b] } {0 0} test array-1.12 "array set to invalid variable" -body { unset -nocomplain a b set a 1 array set a(1) {b c} } -returnCodes error -result {can't set "a(1)": variable isn't array} test array-1.13 "unset missing array element" -body { unset -nocomplain a set a(1) one unset a(2) } -returnCodes error -result {can't unset "a(2)": no such element in array} test array-1.14 "access array via unset var" -body { unset -nocomplain b expr {$a($b) + 4} } -returnCodes error -result {can't read "b": no such variable} test array-1.15 "array unset non-variable" -body { array unset nonvariable 4 } -result {} test array-1.16 "array names non-variable" -body { array names nonvariable } -result {} test array-1.17 "array get non-variable" -body { array get nonvariable } -result {} # This seems like incorrect behaviour, but it matches tclsh test array-1.18 "array size non-array" -body { set x 1 array size x } -result {0} # This seems like incorrect behaviour, but it matches tclsh test array-1.19 "array unset non-array" -body { set x 6 array unset x 4 } -result {} test array-1.20 "array stat" -body { set output [array stat a] regexp "entries in table.*buckets" $output } -result {1} test array-1.21 "array stat non-array" -body { array stat badvariable } -returnCodes error -result {"badvariable" isn't an array} test array-1.22 "array set non-even args" -body { array set x { 1 one 2 two 3 } } -returnCodes error -result {list must have an even number of elements} test array-1.23 "array exists non-array" -body { set x 4 array exists x } -result {0} test array-2.1 {array -help} -constraints jim -body { array -help } -match glob -result {Usage: "array command ... ", where command is one of: *} test array-2.2 {array -help get} -constraints jim -body { array -help get } -result {Usage: array get arrayName ?pattern?} test array-2.3 {array -help ambiguous} -constraints jim -body { array -help s } -match glob -result {Usage: "array command ... ", where command is one of: *} test array-2.3 {array -help nomatch} -constraints jim -body { array -help unknown } -match glob -result {Usage: "array command ... ", where command is one of: *} test array-2.4 {array ambiguous} -constraints jim -body { array s } -returnCodes error -match glob -result {array, ambiguous command "s": should be *} testreport