Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/tcl8.5.2/tests/set.test @ 47

Last change on this file since 47 was 25, checked in by landauf, 17 years ago

added tcl to libs

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