OSDN Git Service

Updated to tcl 8.4.1
[pf3gnuchains/sourceware.git] / tcl / tests / set.test
1 # Commands covered:  set
2 #
3 # This file contains a collection of tests for one or more of the Tcl
4 # built-in commands.  Sourcing this file into Tcl runs the tests and
5 # generates output for errors.  No output means no errors were found.
6 #
7 # Copyright (c) 1996 Sun Microsystems, Inc.
8 # Copyright (c) 1998-1999 by Scriptics Corporation.
9 #
10 # See the file "license.terms" for information on usage and redistribution
11 # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
12 #
13 # RCS: @(#) $Id$
14
15 if {[lsearch [namespace children] ::tcltest] == -1} {
16     package require tcltest
17     namespace import -force ::tcltest::*
18 }
19
20 catch {unset x}
21 catch {unset i}
22
23 test set-1.1 {TclCompileSetCmd: missing variable name} {
24     list [catch {set} msg] $msg
25 } {1 {wrong # args: should be "set varName ?newValue?"}}
26 test set-1.2 {TclCompileSetCmd: simple variable name} {
27     set i 10
28     list [set i] $i
29 } {10 10}
30 test set-1.3 {TclCompileSetCmd: error compiling variable name} {
31     set i 10
32     catch {set "i"xxx} msg
33     set msg
34 } {extra characters after close-quote}
35 test set-1.4 {TclCompileSetCmd: simple variable name in quotes} {
36     set i 17
37     list [set "i"] $i
38 } {17 17}
39 test set-1.5 {TclCompileSetCmd: simple variable name in braces} {
40     catch {unset {a simple var}}
41     set {a simple var} 27
42     list [set {a simple var}] ${a simple var}
43 } {27 27}
44 test set-1.6 {TclCompileSetCmd: simple array variable name} {
45     catch {unset a}
46     set a(foo) 37
47     list [set a(foo)] $a(foo)
48 } {37 37}
49 test set-1.7 {TclCompileSetCmd: non-simple (computed) variable name} {
50     set x "i"
51     set i 77
52     list [set $x] $i
53 } {77 77}
54 test set-1.8 {TclCompileSetCmd: non-simple (computed) variable name} {
55     set x "i"
56     set i 77
57     list [set [set x] 2] $i
58 } {2 2}
59
60 test set-1.9 {TclCompileSetCmd: 3rd arg => assignment} {
61     set i "abcdef"
62     list [set i] $i
63 } {abcdef abcdef}
64 test set-1.10 {TclCompileSetCmd: only two args => just getting value} {
65     set i {one two}
66     set i
67 } {one two}
68
69 test set-1.11 {TclCompileSetCmd: simple global name} {
70     proc p {} {
71         global i
72         set i 54
73         set i
74     }
75     p
76 } {54}
77 test set-1.12 {TclCompileSetCmd: simple local name} {
78     proc p {bar} {
79         set foo $bar
80         set foo
81     }
82     p 999
83 } {999}
84 test set-1.13 {TclCompileSetCmd: simple but new (unknown) local name} {
85     proc p {} {
86         set bar
87     }
88     catch {p} msg
89     set msg
90 } {can't read "bar": no such variable}
91 test set-1.14 {TclCompileSetCmd: simple local name, >255 locals} {
92     proc 260locals {} {
93         # create 260 locals (the last ones with index > 255)
94         set a0 0; set a1 0; set a2 0; set a3 0; set a4 0
95         set a5 0; set a6 0; set a7 0; set a8 0; set a9 0
96         set b0 0; set b1 0; set b2 0; set b3 0; set b4 0
97         set b5 0; set b6 0; set b7 0; set b8 0; set b9 0
98         set c0 0; set c1 0; set c2 0; set c3 0; set c4 0
99         set c5 0; set c6 0; set c7 0; set c8 0; set c9 0
100         set d0 0; set d1 0; set d2 0; set d3 0; set d4 0
101         set d5 0; set d6 0; set d7 0; set d8 0; set d9 0
102         set e0 0; set e1 0; set e2 0; set e3 0; set e4 0
103         set e5 0; set e6 0; set e7 0; set e8 0; set e9 0
104         set f0 0; set f1 0; set f2 0; set f3 0; set f4 0
105         set f5 0; set f6 0; set f7 0; set f8 0; set f9 0
106         set g0 0; set g1 0; set g2 0; set g3 0; set g4 0
107         set g5 0; set g6 0; set g7 0; set g8 0; set g9 0
108         set h0 0; set h1 0; set h2 0; set h3 0; set h4 0
109         set h5 0; set h6 0; set h7 0; set h8 0; set h9 0
110         set i0 0; set i1 0; set i2 0; set i3 0; set i4 0
111         set i5 0; set i6 0; set i7 0; set i8 0; set i9 0
112         set j0 0; set j1 0; set j2 0; set j3 0; set j4 0
113         set j5 0; set j6 0; set j7 0; set j8 0; set j9 0
114         set k0 0; set k1 0; set k2 0; set k3 0; set k4 0
115         set k5 0; set k6 0; set k7 0; set k8 0; set k9 0
116         set l0 0; set l1 0; set l2 0; set l3 0; set l4 0
117         set l5 0; set l6 0; set l7 0; set l8 0; set l9 0
118         set m0 0; set m1 0; set m2 0; set m3 0; set m4 0
119         set m5 0; set m6 0; set m7 0; set m8 0; set m9 0
120         set n0 0; set n1 0; set n2 0; set n3 0; set n4 0
121         set n5 0; set n6 0; set n7 0; set n8 0; set n9 0
122         set o0 0; set o1 0; set o2 0; set o3 0; set o4 0
123         set o5 0; set o6 0; set o7 0; set o8 0; set o9 0
124         set p0 0; set p1 0; set p2 0; set p3 0; set p4 0
125         set p5 0; set p6 0; set p7 0; set p8 0; set p9 0
126         set q0 0; set q1 0; set q2 0; set q3 0; set q4 0
127         set q5 0; set q6 0; set q7 0; set q8 0; set q9 0
128         set r0 0; set r1 0; set r2 0; set r3 0; set r4 0
129         set r5 0; set r6 0; set r7 0; set r8 0; set r9 0
130         set s0 0; set s1 0; set s2 0; set s3 0; set s4 0
131         set s5 0; set s6 0; set s7 0; set s8 0; set s9 0
132         set t0 0; set t1 0; set t2 0; set t3 0; set t4 0
133         set t5 0; set t6 0; set t7 0; set t8 0; set t9 0
134         set u0 0; set u1 0; set u2 0; set u3 0; set u4 0
135         set u5 0; set u6 0; set u7 0; set u8 0; set u9 0
136         set v0 0; set v1 0; set v2 0; set v3 0; set v4 0
137         set v5 0; set v6 0; set v7 0; set v8 0; set v9 0
138         set w0 0; set w1 0; set w2 0; set w3 0; set w4 0
139         set w5 0; set w6 0; set w7 0; set w8 0; set w9 0
140         set x0 0; set x1 0; set x2 0; set x3 0; set x4 0
141         set x5 0; set x6 0; set x7 0; set x8 0; set x9 0
142         set y0 0; set y1 0; set y2 0; set y3 0; set y4 0
143         set y5 0; set y6 0; set y7 0; set y8 0; set y9 0
144         set z0 0; set z1 0; set z2 0; set z3 0; set z4 0
145         set z5 0; set z6 0; set z7 0; set z8 0; set z9 1234
146     }
147     260locals
148 } {1234}
149 test set-1.15 {TclCompileSetCmd: variable is array} {
150     catch {unset a}
151     set x 27
152     set x [set a(foo) 11]
153     catch {unset a}
154     set x
155 } 11
156 test set-1.16 {TclCompileSetCmd: variable is array, elem substitutions} {
157     catch {unset a}
158     set i 5
159     set x 789
160     set a(foo5) 27
161     set x [set a(foo$i)]
162     catch {unset a}
163     set x
164 } 27
165
166 test set-1.17 {TclCompileSetCmd: doing assignment, simple int} {
167     set i 5
168     set i 123
169 } 123
170 test set-1.18 {TclCompileSetCmd: doing assignment, simple int} {
171     set i 5
172     set i -100
173 } -100
174 test set-1.19 {TclCompileSetCmd: doing assignment, simple but not int} {
175     set i 5
176     set i 0x12MNOP
177     set i
178 } {0x12MNOP}
179 test set-1.20 {TclCompileSetCmd: doing assignment, in quotes} {
180     set i 25
181     set i "-100"
182 } -100
183 test set-1.21 {TclCompileSetCmd: doing assignment, in braces} {
184     set i 24
185     set i {126}
186 } 126
187 test set-1.22 {TclCompileSetCmd: doing assignment, large int} {
188     set i 5
189     set i 200000
190 } 200000
191 test set-1.23 {TclCompileSetCmd: doing assignment, formatted int != int} {
192     set i 25
193     set i 000012345     ;# an octal literal == 5349 decimal
194     list $i [incr i]
195 } {000012345 5350}
196
197 test set-1.24 {TclCompileSetCmd: too many arguments} {
198     set i 10
199     catch {set i 20 30} msg
200     set msg
201 } {wrong # args: should be "set varName ?newValue?"}
202
203 test set-1.25 {TclCompileSetCmd: var is array, braced (no subs)} {
204     # This was a known error in 8.1a* - 8.2.1
205     catch {unset array}
206     set {array($foo)} 5
207 } 5
208 test set-1.26 {TclCompileSetCmd: various array constructs} {
209     # Test all kinds of array constructs that TclCompileSetCmd
210     # may feel inclined to tamper with.
211     proc p {} {
212         set a x
213         set be(hej) 1                                   ; # hej
214         set be($a) 1                                    ; # x
215         set {be($a)} 1                                  ; # $a
216         set be($a,hej) 1                                ; # x,hej
217         set be($a,$a) 5                                 ; # x,x
218         set be(c($a) 1                                  ; # c(x
219         set be(\w\w) 1                                  ; # ww
220         set be(a:$a) [set be(x,$a)]                     ; # a:x
221         set be(hej,$be($a,hej),hej) 1                   ; # hej,1,hej
222         set be([string range hugge 0 2]) 1              ; # hug
223         set be(a\ a) 1                                  ; # a a
224         set be($a\ ,[string range hugge 1 3],hej) 1     ; # x ,ugg,hej
225         set be($a,h"ej) 1                               ; # x,h"ej
226         set be([string range "a b c" 2 end]) 1          ; # b c
227         set [string range bet 0 1](foo) 1               ; # foo
228         set be([set be(a:$a)][set b\e($a)]) 1           ; # 51
229         return [lsort [array names be]]
230     }
231     p
232 } [lsort {hej x $a x,hej x,x c(x ww a:x hej,1,hej hug {a a} {x ,ugg,hej} x,h"ej
233 {b c} foo 51}]; # " just a matching end quote
234
235 test set-2.1 {set command: runtime error, bad variable name} {
236     list [catch {set {"foo}} msg] $msg $errorInfo
237 } {1 {can't read ""foo": no such variable} {can't read ""foo": no such variable
238     while executing
239 "set {"foo}"}}
240 test set-2.2 {set command: runtime error, not array variable} {
241     catch {unset b}
242     set b 44
243     list [catch {set b(123)} msg] $msg
244 } {1 {can't read "b(123)": variable isn't array}}
245 test set-2.3 {set command: runtime error, errors in reading variables} {
246     catch {unset a}
247     set a(6) 44
248     list [catch {set a(18)} msg] $msg
249 } {1 {can't read "a(18)": no such element in array}}
250 test set-2.4 {set command: runtime error, readonly variable} {
251     proc readonly args {error "variable is read-only"}
252     set x 123
253     trace var x w readonly
254     list [catch {set x 1} msg] $msg $errorInfo
255 } {1 {can't set "x": variable is read-only} {can't set "x": variable is read-only
256     while executing
257 "set x 1"}}
258 test set-2.5 {set command: runtime error, basic array operations} {
259     list [catch {set a(other)} msg] $msg
260 } {1 {can't read "a(other)": no such element in array}}
261 test set-2.6 {set command: runtime error, basic array operations} {
262     list [catch {set a} msg] $msg
263 } {1 {can't read "a": variable is array}}
264
265 # Test the uncompiled version of set
266
267 catch {unset a}
268 catch {unset b}
269 catch {unset i}
270 catch {unset x}
271
272 test set-3.1 {uncompiled set command: missing variable name} {
273     set z set
274     list [catch {$z} msg] $msg
275 } {1 {wrong # args: should be "set varName ?newValue?"}}
276 test set-3.2 {uncompiled set command: simple variable name} {
277     set z set
278     $z i 10
279     list [$z i] $i
280 } {10 10}
281 test set-3.3 {uncompiled set command: error compiling variable name} {
282     set z set
283     $z i 10
284     catch {$z "i"xxx} msg
285     $z msg
286 } {extra characters after close-quote}
287 test set-3.4 {uncompiled set command: simple variable name in quotes} {
288     set z set
289     $z i 17
290     list [$z "i"] $i
291 } {17 17}
292 test set-3.5 {uncompiled set command: simple variable name in braces} {
293     set z set
294     catch {unset {a simple var}}
295     $z {a simple var} 27
296     list [$z {a simple var}] ${a simple var}
297 } {27 27}
298 test set-3.6 {uncompiled set command: simple array variable name} {
299     set z set
300     catch {unset a}
301     $z a(foo) 37
302     list [$z a(foo)] $a(foo)
303 } {37 37}
304 test set-3.7 {uncompiled set command: non-simple (computed) variable name} {
305     set z set
306     $z x "i"
307     $z i 77
308     list [$z $x] $i
309 } {77 77}
310 test set-3.8 {uncompiled set command: non-simple (computed) variable name} {
311     set z set
312     $z x "i"
313     $z i 77
314     list [$z [$z x] 2] $i
315 } {2 2}
316
317 test set-3.9 {uncompiled set command: 3rd arg => assignment} {
318     set z set
319     $z i "abcdef"
320     list [$z i] $i
321 } {abcdef abcdef}
322 test set-3.10 {uncompiled set command: only two args => just getting value} {
323     set z set
324     $z i {one two}
325     $z i
326 } {one two}
327
328 test set-3.11 {uncompiled set command: simple global name} {
329     proc p {} {
330         set z set
331         global i
332         $z i 54
333         $z i
334     }
335     p
336 } {54}
337 test set-3.12 {uncompiled set command: simple local name} {
338     proc p {bar} {
339         set z set
340         $z foo $bar
341         $z foo
342     }
343     p 999
344 } {999}
345 test set-3.13 {uncompiled set command: simple but new (unknown) local name} {
346     set z set
347     proc p {} {
348         set z set
349         $z bar
350     }
351     catch {p} msg
352     $z msg
353 } {can't read "bar": no such variable}
354 test set-3.14 {uncompiled set command: simple local name, >255 locals} {
355     proc 260locals {} {
356         set z set
357         # create 260 locals (the last ones with index > 255)
358         $z a0 0; $z a1 0; $z a2 0; $z a3 0; $z a4 0
359         $z a5 0; $z a6 0; $z a7 0; $z a8 0; $z a9 0
360         $z b0 0; $z b1 0; $z b2 0; $z b3 0; $z b4 0
361         $z b5 0; $z b6 0; $z b7 0; $z b8 0; $z b9 0
362         $z c0 0; $z c1 0; $z c2 0; $z c3 0; $z c4 0
363         $z c5 0; $z c6 0; $z c7 0; $z c8 0; $z c9 0
364         $z d0 0; $z d1 0; $z d2 0; $z d3 0; $z d4 0
365         $z d5 0; $z d6 0; $z d7 0; $z d8 0; $z d9 0
366         $z e0 0; $z e1 0; $z e2 0; $z e3 0; $z e4 0
367         $z e5 0; $z e6 0; $z e7 0; $z e8 0; $z e9 0
368         $z f0 0; $z f1 0; $z f2 0; $z f3 0; $z f4 0
369         $z f5 0; $z f6 0; $z f7 0; $z f8 0; $z f9 0
370         $z g0 0; $z g1 0; $z g2 0; $z g3 0; $z g4 0
371         $z g5 0; $z g6 0; $z g7 0; $z g8 0; $z g9 0
372         $z h0 0; $z h1 0; $z h2 0; $z h3 0; $z h4 0
373         $z h5 0; $z h6 0; $z h7 0; $z h8 0; $z h9 0
374         $z i0 0; $z i1 0; $z i2 0; $z i3 0; $z i4 0
375         $z i5 0; $z i6 0; $z i7 0; $z i8 0; $z i9 0
376         $z j0 0; $z j1 0; $z j2 0; $z j3 0; $z j4 0
377         $z j5 0; $z j6 0; $z j7 0; $z j8 0; $z j9 0
378         $z k0 0; $z k1 0; $z k2 0; $z k3 0; $z k4 0
379         $z k5 0; $z k6 0; $z k7 0; $z k8 0; $z k9 0
380         $z l0 0; $z l1 0; $z l2 0; $z l3 0; $z l4 0
381         $z l5 0; $z l6 0; $z l7 0; $z l8 0; $z l9 0
382         $z m0 0; $z m1 0; $z m2 0; $z m3 0; $z m4 0
383         $z m5 0; $z m6 0; $z m7 0; $z m8 0; $z m9 0
384         $z n0 0; $z n1 0; $z n2 0; $z n3 0; $z n4 0
385         $z n5 0; $z n6 0; $z n7 0; $z n8 0; $z n9 0
386         $z o0 0; $z o1 0; $z o2 0; $z o3 0; $z o4 0
387         $z o5 0; $z o6 0; $z o7 0; $z o8 0; $z o9 0
388         $z p0 0; $z p1 0; $z p2 0; $z p3 0; $z p4 0
389         $z p5 0; $z p6 0; $z p7 0; $z p8 0; $z p9 0
390         $z q0 0; $z q1 0; $z q2 0; $z q3 0; $z q4 0
391         $z q5 0; $z q6 0; $z q7 0; $z q8 0; $z q9 0
392         $z r0 0; $z r1 0; $z r2 0; $z r3 0; $z r4 0
393         $z r5 0; $z r6 0; $z r7 0; $z r8 0; $z r9 0
394         $z s0 0; $z s1 0; $z s2 0; $z s3 0; $z s4 0
395         $z s5 0; $z s6 0; $z s7 0; $z s8 0; $z s9 0
396         $z t0 0; $z t1 0; $z t2 0; $z t3 0; $z t4 0
397         $z t5 0; $z t6 0; $z t7 0; $z t8 0; $z t9 0
398         $z u0 0; $z u1 0; $z u2 0; $z u3 0; $z u4 0
399         $z u5 0; $z u6 0; $z u7 0; $z u8 0; $z u9 0
400         $z v0 0; $z v1 0; $z v2 0; $z v3 0; $z v4 0
401         $z v5 0; $z v6 0; $z v7 0; $z v8 0; $z v9 0
402         $z w0 0; $z w1 0; $z w2 0; $z w3 0; $z w4 0
403         $z w5 0; $z w6 0; $z w7 0; $z w8 0; $z w9 0
404         $z x0 0; $z x1 0; $z x2 0; $z x3 0; $z x4 0
405         $z x5 0; $z x6 0; $z x7 0; $z x8 0; $z x9 0
406         $z y0 0; $z y1 0; $z y2 0; $z y3 0; $z y4 0
407         $z y5 0; $z y6 0; $z y7 0; $z y8 0; $z y9 0
408         $z z0 0; $z z1 0; $z z2 0; $z z3 0; $z z4 0
409         $z z5 0; $z z6 0; $z z7 0; $z z8 0; $z z9 1234
410     }
411     260locals
412 } {1234}
413 test set-3.15 {uncompiled set command: variable is array} {
414     set z set
415     catch {unset a}
416     $z x 27
417     $z x [$z a(foo) 11]
418     catch {unset a}
419     $z x
420 } 11
421 test set-3.16 {uncompiled set command: variable is array, elem substitutions} {
422     set z set
423     catch {unset a}
424     $z i 5
425     $z x 789
426     $z a(foo5) 27
427     $z x [$z a(foo$i)]
428     catch {unset a}
429     $z x
430 } 27
431
432 test set-3.17 {uncompiled set command: doing assignment, simple int} {
433     set z set
434     $z i 5
435     $z i 123
436 } 123
437 test set-3.18 {uncompiled set command: doing assignment, simple int} {
438     set z set
439     $z i 5
440     $z i -100
441 } -100
442 test set-3.19 {uncompiled set command: doing assignment, simple but not int} {
443     set z set
444     $z i 5
445     $z i 0x12MNOP
446     $z i
447 } {0x12MNOP}
448 test set-3.20 {uncompiled set command: doing assignment, in quotes} {
449     set z set
450     $z i 25
451     $z i "-100"
452 } -100
453 test set-3.21 {uncompiled set command: doing assignment, in braces} {
454     set z set
455     $z i 24
456     $z i {126}
457 } 126
458 test set-3.22 {uncompiled set command: doing assignment, large int} {
459     set z set
460     $z i 5
461     $z i 200000
462 } 200000
463 test set-3.23 {uncompiled set command: doing assignment, formatted int != int} {
464     set z set
465     $z i 25
466     $z i 000012345     ;# an octal literal == 5349 decimal
467     list $i [incr i]
468 } {000012345 5350}
469
470 test set-3.24 {uncompiled set command: too many arguments} {
471     set z set
472     $z i 10
473     catch {$z i 20 30} msg
474     $z msg
475 } {wrong # args: should be "set varName ?newValue?"}
476
477 test set-4.1 {uncompiled set command: runtime error, bad variable name} {
478     set z set
479     list [catch {$z {"foo}} msg] $msg $errorInfo
480 } {1 {can't read ""foo": no such variable} {can't read ""foo": no such variable
481     while executing
482 "$z {"foo}"}}
483 test set-4.2 {uncompiled set command: runtime error, not array variable} {
484     set z set
485     catch {unset b}
486     $z b 44
487     list [catch {$z b(123)} msg] $msg
488 } {1 {can't read "b(123)": variable isn't array}}
489 test set-4.3 {uncompiled set command: runtime error, errors in reading variables} {
490      set z set
491    catch {unset a}
492     $z a(6) 44
493     list [catch {$z a(18)} msg] $msg
494 } {1 {can't read "a(18)": no such element in array}}
495 test set-4.4 {uncompiled set command: runtime error, readonly variable} {
496     set z set
497     proc readonly args {error "variable is read-only"}
498     $z x 123
499     trace var x w readonly
500     list [catch {$z x 1} msg] $msg $errorInfo
501 } {1 {can't set "x": variable is read-only} {can't set "x": variable is read-only
502     while executing
503 "$z x 1"}}
504 test set-4.5 {uncompiled set command: runtime error, basic array operations} {
505     set z set
506     list [catch {$z a(other)} msg] $msg
507 } {1 {can't read "a(other)": no such element in array}}
508 test set-4.6 {set command: runtime error, basic array operations} {
509     set z set
510     list [catch {$z a} msg] $msg
511 } {1 {can't read "a": variable is array}}
512
513 # cleanup
514 catch {unset a}
515 catch {unset b}
516 catch {unset i}
517 catch {unset x}
518 catch {unset z}
519 ::tcltest::cleanupTests
520 return