aboutsummaryrefslogtreecommitdiff
path: root/tests/array.test
blob: 8035d35fa8d1648948402dbb357a9ab758f6ede0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
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-1.24 "unset -nocomplain missing array element" -body {
	unset -nocomplain a
	set a(1) one
	unset -nocomplain a(2)
} -result {}

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