os/persistentdata/persistentstorage/sqlite3api/TEST/TCL/tcldistribution/tests/set.test
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
     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.8 2000/04/10 17:19:04 ericm Exp $
    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