set-old.test
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:30k
源码类别:

通讯编程

开发平台:

Visual C++

  1. # Commands covered:  set, unset, array
  2. #
  3. # This file includes the original set of tests for Tcl's set command.
  4. # Since the set command is now compiled, a new set of tests covering
  5. # the new implementation is in the file "set.test". Sourcing this file
  6. # into Tcl runs the tests and generates output for errors.
  7. # No output means no errors were found.
  8. #
  9. # Copyright (c) 1991-1993 The Regents of the University of California.
  10. # Copyright (c) 1994-1997 Sun Microsystems, Inc.
  11. # Copyright (c) 1998-1999 by Scriptics Corporation.
  12. #
  13. # See the file "license.terms" for information on usage and redistribution
  14. # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  15. #
  16. # RCS: @(#) $Id: set-old.test,v 1.16.2.1 2003/03/27 21:46:32 msofer Exp $
  17. if {[lsearch [namespace children] ::tcltest] == -1} {
  18.     package require tcltest
  19.     namespace import -force ::tcltest::*
  20. }
  21. proc ignore args {}
  22. # Simple variable operations.
  23. catch {unset a}
  24. test set-old-1.1 {basic variable setting and unsetting} {
  25.     set a 22
  26. } 22
  27. test set-old-1.2 {basic variable setting and unsetting} {
  28.     set a 123
  29.     set a
  30. } 123
  31. test set-old-1.3 {basic variable setting and unsetting} {
  32.     set a xxx
  33.     format %s $a
  34. } xxx
  35. test set-old-1.4 {basic variable setting and unsetting} {
  36.     set a 44
  37.     unset a
  38.     list [catch {set a} msg] $msg
  39. } {1 {can't read "a": no such variable}}
  40. # Basic array operations.
  41. catch {unset a}
  42. set a(xyz) 2
  43. set a(44) 3
  44. set {a(a long name)} test
  45. test set-old-2.1 {basic array operations} {
  46.     lsort [array names a]
  47. } {44 {a long name} xyz}
  48. test set-old-2.2 {basic array operations} {
  49.     set a(44)
  50. } 3
  51. test set-old-2.3 {basic array operations} {
  52.     set a(xyz)
  53. } 2
  54. test set-old-2.4 {basic array operations} {
  55.     set "a(a long name)"
  56. } test
  57. test set-old-2.5 {basic array operations} {
  58.     list [catch {set a(other)} msg] $msg
  59. } {1 {can't read "a(other)": no such element in array}}
  60. test set-old-2.6 {basic array operations} {
  61.     list [catch {set a} msg] $msg
  62. } {1 {can't read "a": variable is array}}
  63. test set-old-2.7 {basic array operations} {
  64.     format %s $a(44)
  65. } 3
  66. test set-old-2.8 {basic array operations} {
  67.     format %s $a(a long name)
  68. } test
  69. unset a(44)
  70. test set-old-2.9 {basic array operations} {
  71.     lsort [array names a]
  72. } {{a long name} xyz}
  73. test set-old-2.10 {basic array operations} {
  74.     catch {unset b}
  75.     list [catch {set b(123)} msg] $msg
  76. } {1 {can't read "b(123)": no such variable}}
  77. test set-old-2.11 {basic array operations} {
  78.     catch {unset b}
  79.     set b 44
  80.     list [catch {set b(123)} msg] $msg
  81. } {1 {can't read "b(123)": variable isn't array}}
  82. test set-old-2.12 {basic array operations} {
  83.     list [catch {set a 14} msg] $msg
  84. } {1 {can't set "a": variable is array}}
  85. unset a
  86. test set-old-2.13 {basic array operations} {
  87.     list [catch {set a(xyz)} msg] $msg
  88. } {1 {can't read "a(xyz)": no such variable}}
  89. # Test the set commands, and exercise the corner cases of the code
  90. # that parses array references into two parts.
  91. test set-old-3.1 {set command} {
  92.     list [catch {set} msg] $msg
  93. } {1 {wrong # args: should be "set varName ?newValue?"}}
  94. test set-old-3.2 {set command} {
  95.     list [catch {set x y z} msg] $msg
  96. } {1 {wrong # args: should be "set varName ?newValue?"}}
  97. test set-old-3.3 {set command} {
  98.     catch {unset a}
  99.     list [catch {set a} msg] $msg
  100. } {1 {can't read "a": no such variable}}
  101. test set-old-3.4 {set command} {
  102.     catch {unset a}
  103.     set a(14) 83
  104.     list [catch {set a 22} msg] $msg
  105. } {1 {can't set "a": variable is array}}
  106. # Test the corner-cases of parsing array names, using set and unset.
  107. test set-old-4.1 {parsing array names} {
  108.     catch {unset a}
  109.     set a(()) 44
  110.     list [catch {array names a} msg] $msg
  111. } {0 ()}
  112. test set-old-4.2 {parsing array names} {
  113.     catch {unset a a(abcd}
  114.     set a(abcd 33
  115.     info exists a(abcd
  116. } 1
  117. test set-old-4.3 {parsing array names} {
  118.     catch {unset a a(abcd}
  119.     set a(abcd 33
  120.     list [catch {array names a} msg] $msg
  121. } {0 {}}
  122. test set-old-4.4 {parsing array names} {
  123.     catch {unset a abcd)}
  124.     set abcd) 33
  125.     info exists abcd)
  126. } 1
  127. test set-old-4.5 {parsing array names} {
  128.     set a(bcd yyy
  129.     catch {unset a}
  130.     list [catch {set a(bcd} msg] $msg
  131. } {0 yyy}
  132. test set-old-4.6 {parsing array names} {
  133.     catch {unset a}
  134.     set a 44
  135.     list [catch {set a(bcd test} msg] $msg
  136. } {0 test}
  137. # Errors in reading variables
  138. test set-old-5.1 {errors in reading variables} {
  139.     catch {unset a}
  140.     list [catch {set a} msg] $msg
  141. } {1 {can't read "a": no such variable}}
  142. test set-old-5.2 {errors in reading variables} {
  143.     catch {unset a}
  144.     set a 44
  145.     list [catch {set a(18)} msg] $msg
  146. } {1 {can't read "a(18)": variable isn't array}}
  147. test set-old-5.3 {errors in reading variables} {
  148.     catch {unset a}
  149.     set a(6) 44
  150.     list [catch {set a(18)} msg] $msg
  151. } {1 {can't read "a(18)": no such element in array}}
  152. test set-old-5.4 {errors in reading variables} {
  153.     catch {unset a}
  154.     set a(6) 44
  155.     list [catch {set a} msg] $msg
  156. } {1 {can't read "a": variable is array}}
  157. # Errors and other special cases in writing variables
  158. test set-old-6.1 {creating array during write} {
  159.     catch {unset a}
  160.     trace var a rwu ignore
  161.     list [catch {set a(14) 186} msg] $msg [array names a]
  162. } {0 186 14}
  163. test set-old-6.2 {errors in writing variables} {
  164.     catch {unset a}
  165.     set a xxx
  166.     list [catch {set a(14) 186} msg] $msg
  167. } {1 {can't set "a(14)": variable isn't array}}
  168. test set-old-6.3 {errors in writing variables} {
  169.     catch {unset a}
  170.     set a(100) yyy
  171.     list [catch {set a 2} msg] $msg
  172. } {1 {can't set "a": variable is array}}
  173. test set-old-6.4 {expanding variable size} {
  174.     catch {unset a}
  175.     list [set a short] [set a "longer name"] [set a "even longer name"] 
  176.     [set a "a much much truly longer name"]
  177. } {short {longer name} {even longer name} {a much much truly longer name}}
  178. # Unset command, Tcl_UnsetVar procedures
  179. test set-old-7.1 {unset command} {
  180.     catch {unset a}; catch {unset b}; catch {unset c}; catch {unset d}
  181.     set a 44
  182.     set b 55
  183.     set c 66
  184.     set d 77
  185.     unset a b c
  186.     list [catch {set a(0) 0}] [catch {set b(0) 0}] [catch {set c(0) 0}] 
  187.     [catch {set d(0) 0}]
  188. } {0 0 0 1}
  189. test set-old-7.2 {unset command} {
  190.     list [catch {unset} msg] $msg
  191. } {0 {}}
  192. # Used to return:
  193. #{1 {wrong # args: should be "unset ?-nocomplain? ?--? ?varName varName ...?"}}
  194. test set-old-7.3 {unset command} {
  195.     catch {unset a}
  196.     list [catch {unset a} msg] $msg
  197. } {1 {can't unset "a": no such variable}}
  198. test set-old-7.4 {unset command} {
  199.     catch {unset a}
  200.     set a 44
  201.     list [catch {unset a(14)} msg] $msg
  202. } {1 {can't unset "a(14)": variable isn't array}}
  203. test set-old-7.5 {unset command} {
  204.     catch {unset a}
  205.     set a(0) xx
  206.     list [catch {unset a(14)} msg] $msg
  207. } {1 {can't unset "a(14)": no such element in array}}
  208. test set-old-7.6 {unset command} {
  209.     catch {unset a}; catch {unset b}; catch {unset c}
  210.     set a foo
  211.     set c gorp
  212.     list [catch {unset a a a(14)} msg] $msg [info exists c]
  213. } {1 {can't unset "a": no such variable} 1}
  214. test set-old-7.7 {unsetting globals from within procedures} {
  215.     set y 0
  216.     proc p1 {} {
  217. global y
  218. set z [p2]
  219. return [list $z [catch {set y} msg] $msg]
  220.     }
  221.     proc p2 {} {global y; unset y; list [catch {set y} msg] $msg}
  222.     p1
  223. } {{1 {can't read "y": no such variable}} 1 {can't read "y": no such variable}}
  224. test set-old-7.8 {unsetting globals from within procedures} {
  225.     set y 0
  226.     proc p1 {} {
  227. global y
  228. p2
  229. return [list [catch {set y 44} msg] $msg]
  230.     }
  231.     proc p2 {} {global y; unset y}
  232.     concat [p1] [list [catch {set y} msg] $msg]
  233. } {0 44 0 44}
  234. test set-old-7.9 {unsetting globals from within procedures} {
  235.     set y 0
  236.     proc p1 {} {
  237. global y
  238. unset y
  239. return [list [catch {set y 55} msg] $msg]
  240.     }
  241.     concat [p1] [list [catch {set y} msg] $msg]
  242. } {0 55 0 55}
  243. test set-old-7.10 {unset command} {
  244.     catch {unset a}
  245.     set a(14) 22
  246.     unset a(14)
  247.     list [catch {set a(14)} msg] $msg [catch {array names a} msg2] $msg2
  248. } {1 {can't read "a(14)": no such element in array} 0 {}}
  249. test set-old-7.11 {unset command} {
  250.     catch {unset a}
  251.     set a(14) 22
  252.     unset a
  253.     list [catch {set a(14)} msg] $msg [catch {array names a} msg2] $msg2
  254. } {1 {can't read "a(14)": no such variable} 0 {}}
  255. test set-old-7.12 {unset command, -nocomplain} {
  256.     catch {unset a}
  257.     list [info exists a] [catch {unset -nocomplain a}] [info exists a]
  258. } {0 0 0}
  259. test set-old-7.13 {unset command, -nocomplain} {
  260.     set -nocomplain abc
  261.     list [info exists -nocomplain] [catch {unset -nocomplain}] 
  262.     [info exists -nocomplain] [catch {unset -- -nocomplain}] 
  263.     [info exists -nocomplain]
  264. } {1 0 1 0 0}
  265. test set-old-7.14 {unset command, --} {
  266.     set -- abc
  267.     list [info exists --] [catch {unset --}] 
  268.     [info exists --] [catch {unset -- --}] 
  269.     [info exists --]
  270. } {1 0 1 0 0}
  271. test set-old-7.15 {unset command, -nocomplain} {
  272.     set -nocomplain abc
  273.     set -- abc
  274.     list [info exists -nocomplain] [catch {unset -- -nocomplain}] 
  275.     [info exists -nocomplain] [info exists --] 
  276.     [catch {unset -- -nocomplain}] [info exists --] 
  277.     [catch {unset -- --}] [info exists --]
  278. } {1 0 0 1 1 1 0 0}
  279. test set-old-7.16 {unset command, -nocomplain} {
  280.     set -nocomplain abc
  281.     set var abc
  282.     list [info exists bogus] [catch {unset -nocomplain bogus var bogus}] 
  283.     [info exists -nocomplain] [info exists var] 
  284.     [catch {unset -nocomplain -nocomplain}] [info exists -nocomplain]
  285. } {0 0 1 0 0 0}
  286. test set-old-7.17 {unset command, -nocomplain (no abbreviation)} {
  287.     set -nocomp abc
  288.     list [info exists -nocomp] [catch {unset -nocomp}] [info exists -nocomp]
  289. } {1 0 0}
  290. test set-old-7.18 {unset command, -nocomplain (no abbreviation)} {
  291.     catch {unset -nocomp}
  292.     list [info exists -nocomp] [catch {unset -nocomp}]
  293. } {0 1}
  294. # Array command.
  295. test set-old-8.1 {array command} {
  296.     list [catch {array} msg] $msg
  297. } {1 {wrong # args: should be "array option arrayName ?arg ...?"}}
  298. test set-old-8.2 {array command} {
  299.     list [catch {array a} msg] $msg
  300. } {1 {wrong # args: should be "array option arrayName ?arg ...?"}}
  301. test set-old-8.3 {array command} {
  302.     catch {unset a}
  303.     list [catch {array anymore a b} msg] $msg
  304. } {1 {"a" isn't an array}}
  305. test set-old-8.4 {array command} {
  306.     catch {unset a}
  307.     set a 44
  308.     list [catch {array anymore a b} msg] $msg
  309. } {1 {"a" isn't an array}}
  310. test set-old-8.5 {array command} {
  311.     proc foo {} {
  312. set a 44
  313. upvar 0 a x
  314. list [catch {array anymore x b} msg] $msg
  315.     }
  316.     foo
  317. } {1 {"x" isn't an array}}
  318. test set-old-8.6 {array command} {
  319.     catch {unset a}
  320.     set a(22) 3
  321.     list [catch {array gorp a} msg] $msg
  322. } {1 {bad option "gorp": must be anymore, donesearch, exists, get, names, nextelement, set, size, startsearch, statistics, or unset}}
  323. test set-old-8.7 {array command, anymore option} {
  324.     catch {unset a}
  325.     list [catch {array anymore a x} msg] $msg
  326. } {1 {"a" isn't an array}}
  327. test set-old-8.8 {array command, anymore option, array doesn't exist yet but has compiler-allocated procedure slot} {
  328.     proc foo {x} {
  329.         if {$x==1} {
  330.             return [array anymore a x]
  331.         }
  332.         set a(x) 123
  333.     }
  334.     list [catch {foo 1} msg] $msg
  335. } {1 {"a" isn't an array}}
  336. test set-old-8.9 {array command, donesearch option} {
  337.     catch {unset a}
  338.     list [catch {array donesearch a x} msg] $msg
  339. } {1 {"a" isn't an array}}
  340. test set-old-8.10 {array command, donesearch option, array doesn't exist yet but has compiler-allocated procedure slot} {
  341.     proc foo {x} {
  342.         if {$x==1} {
  343.             return [array donesearch a x]
  344.         }
  345.         set a(x) 123
  346.     }
  347.     list [catch {foo 1} msg] $msg
  348. } {1 {"a" isn't an array}}
  349. test set-old-8.11 {array command, exists option} {
  350.     list [catch {array exists a b} msg] $msg
  351. } {1 {wrong # args: should be "array exists arrayName"}}
  352. test set-old-8.12 {array command, exists option} {
  353.     catch {unset a}
  354.     array exists a
  355. } {0}
  356. test set-old-8.13 {array command, exists option} {
  357.     catch {unset a}
  358.     set a(0) 1
  359.     array exists a
  360. } {1}
  361. test set-old-8.14 {array command, exists option, array doesn't exist yet but has compiler-allocated procedure slot} {
  362.     proc foo {x} {
  363.         if {$x==1} {
  364.             return [array exists a]
  365.         }
  366.         set a(x) 123
  367.     }
  368.     list [catch {foo 1} msg] $msg
  369. } {0 0}
  370. test set-old-8.15 {array command, get option} {
  371.     list [catch {array get} msg] $msg
  372. } {1 {wrong # args: should be "array option arrayName ?arg ...?"}}
  373. test set-old-8.16 {array command, get option} {
  374.     list [catch {array get a b c} msg] $msg
  375. } {1 {wrong # args: should be "array get arrayName ?pattern?"}}
  376. test set-old-8.17 {array command, get option} {
  377.     catch {unset a}
  378.     array get a
  379. } {}
  380. test set-old-8.18 {array command, get option} {
  381.     catch {unset a}
  382.     set a(22) 3
  383.     set {a(long name)} {}
  384.     lsort [array get a]
  385. } {{} 22 3 {long name}}
  386. test set-old-8.19 {array command, get option (unset variable)} {
  387.     catch {unset a}
  388.     set a(x) 3
  389.     trace var a(y) w ignore
  390.     array get a
  391. } {x 3}
  392. test set-old-8.20 {array command, get option, with pattern} {
  393.     catch {unset a}
  394.     set a(x1) 3
  395.     set a(x2) 4
  396.     set a(x3) 5
  397.     set a(b1) 24
  398.     set a(b2) 25
  399.     lsort [array get a x*]
  400. } {3 4 5 x1 x2 x3}
  401. test set-old-8.21 {array command, get option, array doesn't exist yet but has compiler-allocated procedure slot} {
  402.     proc foo {x} {
  403.         if {$x==1} {
  404.             return [array get a]
  405.         }
  406.         set a(x) 123
  407.     }
  408.     list [catch {foo 1} msg] $msg
  409. } {0 {}}
  410. test set-old-8.22 {array command, names option} {
  411.     catch {unset a}
  412.     set a(22) 3
  413.     list [catch {array names a 4 5} msg] $msg
  414. } {1 {bad option "4": must be -exact, -glob, or -regexp}}
  415. test set-old-8.23 {array command, names option} {
  416.     catch {unset a}
  417.     array names a
  418. } {}
  419. test set-old-8.24 {array command, names option} {
  420.     catch {unset a}
  421.     set a(22) 3; set a(Textual_name) 44; set "a(name with spaces)" xxx
  422.     list [catch {lsort [array names a]} msg] $msg
  423. } {0 {22 Textual_name {name with spaces}}}
  424. test set-old-8.25 {array command, names option} {
  425.     catch {unset a}
  426.     set a(22) 3; set a(33) 44;
  427.     trace var a(xxx) w ignore
  428.     list [catch {lsort [array names a]} msg] $msg
  429. } {0 {22 33}}
  430. test set-old-8.26 {array command, names option} {
  431.     catch {unset a}
  432.     set a(22) 3; set a(33) 44;
  433.     trace var a(xxx) w ignore
  434.     set a(xxx) value
  435.     list [catch {lsort [array names a]} msg] $msg
  436. } {0 {22 33 xxx}}
  437. test set-old-8.27 {array command, names option} {
  438.     catch {unset a}
  439.     set a(axy) 3
  440.     set a(bxy) 44
  441.     set a(no) yes
  442.     set a(xxx) value
  443.     list [lsort [array names a *xy]] [lsort [array names a]]
  444. } {{axy bxy} {axy bxy no xxx}}
  445. test set-old-8.28 {array command, names option, array doesn't exist yet but has compiler-allocated procedure slot} {
  446.     proc foo {x} {
  447.         if {$x==1} {
  448.             return [array names a]
  449.         }
  450.         set a(x) 123
  451.     }
  452.     list [catch {foo 1} msg] $msg
  453. } {0 {}}
  454. test set-old-8.29 {array command, nextelement option} {
  455.     list [catch {array nextelement a} msg] $msg
  456. } {1 {wrong # args: should be "array nextelement arrayName searchId"}}
  457. test set-old-8.30 {array command, nextelement option} {
  458.     catch {unset a}
  459.     list [catch {array nextelement a b} msg] $msg
  460. } {1 {"a" isn't an array}}
  461. test set-old-8.31 {array command, nextelement option, array doesn't exist yet but has compiler-allocated procedure slot} {
  462.     proc foo {x} {
  463.         if {$x==1} {
  464.             return [array nextelement a b]
  465.         }
  466.         set a(x) 123
  467.     }
  468.     list [catch {foo 1} msg] $msg
  469. } {1 {"a" isn't an array}}
  470. test set-old-8.32 {array command, set option} {
  471.     list [catch {array set a} msg] $msg
  472. } {1 {wrong # args: should be "array set arrayName list"}}
  473. test set-old-8.33 {array command, set option} {
  474.     list [catch {array set a 1 2} msg] $msg
  475. } {1 {wrong # args: should be "array set arrayName list"}}
  476. test set-old-8.34 {array command, set option} {
  477.     list [catch {array set a "a { c"} msg] $msg
  478. } {1 {unmatched open brace in list}}
  479. test set-old-8.35 {array command, set option} {
  480.     catch {unset a}
  481.     set a 44
  482.     list [catch {array set a {a b c d}} msg] $msg
  483. } {1 {can't set "a(a)": variable isn't array}}
  484. test set-old-8.36 {array command, set option} {
  485.     catch {unset a}
  486.     set a(xx) yy
  487.     array set a {b c d e}
  488.     lsort [array get a]
  489. } {b c d e xx yy}
  490. test set-old-8.37 {array command, set option, array doesn't exist yet but has compiler-allocated procedure slot} {
  491.     proc foo {x} {
  492.         if {$x==1} {
  493.             return [array set a {x 0}]
  494.         }
  495.         set a(x)
  496.     }
  497.     list [catch {foo 1} msg] $msg
  498. } {0 {}}
  499. test set-old-8.38 {array command, set option} {
  500.     catch {unset aVaRnAmE}
  501.     array set aVaRnAmE {}
  502.     list [info exists aVaRnAmE] [catch {set aVaRnAmE} msg] $msg
  503. } {1 1 {can't read "aVaRnAmE": variable is array}}
  504. test set-old-8.38.1 {array command, set scalar} {
  505.     catch {unset aVaRnAmE}
  506.     set aVaRnAmE 1
  507.     list [catch {array set aVaRnAmE {}} msg] $msg
  508. } {1 {can't array set "aVaRnAmE": variable isn't array}}
  509. test set-old-8.38.2 {array command, set alias} {
  510.     catch {unset aVaRnAmE}
  511.     upvar 0 aVaRnAmE anAliAs
  512.     array set anAliAs {}
  513.     list [array exists aVaRnAmE] [catch {set anAliAs} msg] $msg
  514. } {1 1 {can't read "anAliAs": variable is array}}
  515. test set-old-8.38.3 {array command, set element alias} {
  516.     catch {unset aVaRnAmE}
  517.     list [catch {upvar 0 aVaRnAmE(elem) elemAliAs}] 
  518.     [catch {array set elemAliAs {}} msg] $msg
  519. } {0 1 {can't array set "elemAliAs": variable isn't array}}
  520. test set-old-8.38.4 {array command, empty set with populated array} {
  521.     catch {unset aVaRnAmE}
  522.     array set aVaRnAmE [list e1 v1 e2 v2]
  523.     array set aVaRnAmE {}
  524.     array set aVaRnAmE [list e3 v3]
  525.     list [lsort [array names aVaRnAmE]] [catch {set aVaRnAmE(e2)} msg] $msg
  526. } {{e1 e2 e3} 0 v2}
  527. test set-old-8.38.5 {array command, set with non-existent namespace} {
  528.     list [catch {array set bogusnamespace::var {}} msg] $msg
  529. } {1 {can't set "bogusnamespace::var": parent namespace doesn't exist}}
  530. test set-old-8.38.6 {array command, set with non-existent namespace} {
  531.     list [catch {array set bogusnamespace::var {a b}} msg] $msg
  532. } {1 {can't set "bogusnamespace::var": parent namespace doesn't exist}}
  533. test set-old-8.38.7 {array command, set with non-existent namespace} {
  534.     list [catch {array set bogusnamespace::var(0) {a b}} msg] $msg
  535. } {1 {can't set "bogusnamespace::var(0)": variable isn't array}}
  536. test set-old-8.39 {array command, size option} {
  537.     catch {unset a}
  538.     array size a
  539. } {0}
  540. test set-old-8.40 {array command, size option} {
  541.     list [catch {array size a 4} msg] $msg
  542. } {1 {wrong # args: should be "array size arrayName"}}
  543. test set-old-8.41 {array command, size option} {
  544.     catch {unset a}
  545.     array size a
  546. } {0}
  547. test set-old-8.42 {array command, size option} {
  548.     catch {unset a}
  549.     set a(22) 3; set a(Textual_name) 44; set "a(name with spaces)" xxx
  550.     list [catch {array size a} msg] $msg
  551. } {0 3}
  552. test set-old-8.43 {array command, size option} {
  553.     catch {unset a}
  554.     set a(22) 3; set a(xx) 44; set a(y) xxx
  555.     unset a(22) a(y) a(xx)
  556.     list [catch {array size a} msg] $msg
  557. } {0 0}
  558. test set-old-8.44 {array command, size option} {
  559.     catch {unset a}
  560.     set a(22) 3;
  561.     trace var a(33) rwu ignore
  562.     list [catch {array size a} msg] $msg
  563. } {0 1}
  564. test set-old-8.45 {array command, size option, array doesn't exist yet but has compiler-allocated procedure slot} {
  565.     proc foo {x} {
  566.         if {$x==1} {
  567.             return [array size a]
  568.         }
  569.         set a(x) 123
  570.     }
  571.     list [catch {foo 1} msg] $msg
  572. } {0 0}
  573. test set-old-8.46 {array command, startsearch option} {
  574.     list [catch {array startsearch a b} msg] $msg
  575. } {1 {wrong # args: should be "array startsearch arrayName"}}
  576. test set-old-8.47 {array command, startsearch option} {
  577.     catch {unset a}
  578.     list [catch {array startsearch a} msg] $msg
  579. } {1 {"a" isn't an array}}
  580. test set-old-8.48 {array command, startsearch option, array doesn't exist yet but has compiler-allocated procedure slot} {
  581.     catch {rename p ""}
  582.     proc p {x} {
  583.         if {$x==1} {
  584.             return [array startsearch a]
  585.         }
  586.         set a(x) 123
  587.     }
  588.     list [catch {p 1} msg] $msg
  589. } {1 {"a" isn't an array}}
  590. test set-old-8.49 {array command, statistics option} {
  591.     catch {unset a}
  592.     set a(abc) 1
  593.     set a(def) 2
  594.     set a(ghi) 3
  595.     set a(jkl) 4
  596.     set a(mno) 5
  597.     set a(pqr) 6
  598.     set a(stu) 7
  599.     set a(vwx) 8
  600.     set a(yz) 9
  601.     array statistics a
  602. } "9 entries in table, 4 buckets
  603. number of buckets with 0 entries: 0
  604. number of buckets with 1 entries: 0
  605. number of buckets with 2 entries: 3
  606. number of buckets with 3 entries: 1
  607. number of buckets with 4 entries: 0
  608. number of buckets with 5 entries: 0
  609. number of buckets with 6 entries: 0
  610. number of buckets with 7 entries: 0
  611. number of buckets with 8 entries: 0
  612. number of buckets with 9 entries: 0
  613. number of buckets with 10 or more entries: 0
  614. average search distance for entry: 1.7"
  615. test set-old-8.50 {array command, array names -exact on glob pattern} {
  616.     catch {unset a}
  617.     set a(1*2) 1
  618.     list [catch {array names a -exact 1*2} msg] $msg
  619. } {0 1*2}
  620. test set-old-8.51 {array command, array names -glob on glob pattern} {
  621.     catch {unset a}
  622.     set a(1*2) 1
  623.     set a(12) 1
  624.     set a(11) 1
  625.     list [catch {lsort [array names a -glob 1*2]} msg] $msg
  626. } {0 {1*2 12}}
  627. test set-old-8.52 {array command, array names -regexp on regexp pattern} {
  628.     catch {unset a}
  629.     set a(1*2) 1
  630.     set a(12) 1
  631.     set a(11) 1
  632.     list [catch {lsort [array names a -regexp ^1]} msg] $msg
  633. } {0 {1*2 11 12}}
  634. test set-old-8.53 {array command, array names -regexp} {
  635.     catch {unset a}
  636.     set a(-glob) 1
  637.     set a(-regexp) 1
  638.     set a(-exact) 1
  639.     list [catch {array names a -regexp} msg] $msg
  640. } {0 -regexp}
  641. test set-old-8.54 {array command, array names -exact} {
  642.     catch {unset a}
  643.     set a(-glob) 1
  644.     set a(-regexp) 1
  645.     set a(-exact) 1
  646.     list [catch {array names a -exact} msg] $msg
  647. } {0 -exact}
  648. test set-old-8.55 {array command, array names -glob} {
  649.     catch {unset a}
  650.     set a(-glob) 1
  651.     set a(-regexp) 1
  652.     set a(-exact) 1
  653.     list [catch {array names a -glob} msg] $msg
  654. } {0 -glob}
  655. test set-old-8.56 {array command, array statistics on a non-array} {
  656. catch {unset a}
  657. list [catch {array statistics a} msg] $msg
  658. } [list 1 ""a" isn't an array"]
  659. test set-old-9.1 {ids for array enumeration} {
  660.     catch {unset a}
  661.     set a(a) 1
  662.     list [array star a] [array star a] [array done a s-1-a; array star a] 
  663.     [array done a s-2-a; array d a s-3-a; array start a]
  664. } {s-1-a s-2-a s-3-a s-1-a}
  665. test set-old-9.2 {array enumeration} {
  666.     catch {unset a}
  667.     set a(a) 1
  668.     set a(b) 1
  669.     set a(c) 1
  670.     set x [array startsearch a]
  671.     lsort [list [array nextelement a $x] [array ne a $x] [array next a $x] 
  672.     [array next a $x] [array next a $x]]
  673. } {{} {} a b c}
  674. test set-old-9.3 {array enumeration} {
  675.     catch {unset a}
  676.     set a(a) 1
  677.     set a(b) 1
  678.     set a(c) 1
  679.     set x [array startsearch a]
  680.     set y [array startsearch a]
  681.     set z [array startsearch a]
  682.     lsort [list [array nextelement a $x] [array ne a $x] 
  683.     [array next a $y] [array next a $z] [array next a $y] 
  684.     [array next a $z] [array next a $y] [array next a $z] 
  685.     [array next a $y] [array next a $z] [array next a $x] 
  686.     [array next a $x]]
  687. } {{} {} {} a a a b b b c c c}
  688. test set-old-9.4 {array enumeration: stopping searches} {
  689.     catch {unset a}
  690.     set a(a) 1
  691.     set a(b) 1
  692.     set a(c) 1
  693.     set x [array startsearch a]
  694.     set y [array startsearch a]
  695.     set z [array startsearch a]
  696.     lsort [list [array next a $x] [array next a $x] [array next a $y] 
  697.     [array done a $z; array next a $x] 
  698.     [array done a $x; array next a $y] [array next a $y]]
  699. } {a a b b c c}
  700. test set-old-9.5 {array enumeration: stopping searches} {
  701.     catch {unset a}
  702.     set a(a) 1
  703.     set x [array startsearch a]
  704.     array done a $x
  705.     list [catch {array next a $x} msg] $msg
  706. } {1 {couldn't find search "s-1-a"}}
  707. test set-old-9.6 {array enumeration: searches automatically stopped} {
  708.     catch {unset a}
  709.     set a(a) 1
  710.     set x [array startsearch a]
  711.     set y [array startsearch a]
  712.     set a(b) 1
  713.     list [catch {array next a $x} msg] $msg 
  714.     [catch {array next a $y} msg2] $msg2
  715. } {1 {couldn't find search "s-1-a"} 1 {couldn't find search "s-2-a"}}
  716. test set-old-9.7 {array enumeration: searches automatically stopped} {
  717.     catch {unset a}
  718.     set a(a) 1
  719.     set x [array startsearch a]
  720.     set y [array startsearch a]
  721.     set a(a) 2
  722.     list [catch {array next a $x} msg] $msg 
  723.     [catch {array next a $y} msg2] $msg2
  724. } {0 a 0 a}
  725. test set-old-9.8 {array enumeration: searches automatically stopped} {
  726.     catch {unset a}
  727.     set a(a) 1
  728.     set a(c) 2
  729.     set x [array startsearch a]
  730.     set y [array startsearch a]
  731.     catch {unset a(c)}
  732.     list [catch {array next a $x} msg] $msg 
  733.     [catch {array next a $y} msg2] $msg2
  734. } {1 {couldn't find search "s-1-a"} 1 {couldn't find search "s-2-a"}}
  735. test set-old-9.9 {array enumeration: searches automatically stopped} {
  736.     catch {unset a}
  737.     set a(a) 1
  738.     set x [array startsearch a]
  739.     set y [array startsearch a]
  740.     catch {unset a(c)}
  741.     list [catch {array next a $x} msg] $msg 
  742.     [catch {array next a $y} msg2] $msg2
  743. } {0 a 0 a}
  744. test set-old-9.10 {array enumeration: searches automatically stopped} {
  745.     catch {unset a}
  746.     set a(a) 1
  747.     set x [array startsearch a]
  748.     set y [array startsearch a]
  749.     trace var a(b) r {}
  750.     list [catch {array next a $x} msg] $msg 
  751.     [catch {array next a $y} msg2] $msg2
  752. } {1 {couldn't find search "s-1-a"} 1 {couldn't find search "s-2-a"}}
  753. test set-old-9.11 {array enumeration: searches automatically stopped} {
  754.     catch {unset a}
  755.     set a(a) 1
  756.     set x [array startsearch a]
  757.     set y [array startsearch a]
  758.     trace var a(a) r {}
  759.     list [catch {array next a $x} msg] $msg 
  760.     [catch {array next a $y} msg2] $msg2
  761. } {0 a 0 a}
  762. test set-old-9.12 {array enumeration with traced undefined elements} {
  763.     catch {unset a}
  764.     set a(a) 1
  765.     trace var a(b) r {}
  766.     set x [array startsearch a]
  767.     lsort [list [array next a $x] [array next a $x]]
  768. } {{} a}
  769. test set-old-10.1 {array enumeration errors} {
  770.     list [catch {array start} msg] $msg
  771. } {1 {wrong # args: should be "array option arrayName ?arg ...?"}}
  772. test set-old-10.2 {array enumeration errors} {
  773.     list [catch {array start a b} msg] $msg
  774. } {1 {wrong # args: should be "array startsearch arrayName"}}
  775. test set-old-10.3 {array enumeration errors} {
  776.     catch {unset a}
  777.     list [catch {array start a} msg] $msg
  778. } {1 {"a" isn't an array}}
  779. test set-old-10.4 {array enumeration errors} {
  780.     catch {unset a}
  781.     set a(a) 1
  782.     set x [array startsearch a]
  783.     list [catch {array next a} msg] $msg
  784. } {1 {wrong # args: should be "array nextelement arrayName searchId"}}
  785. test set-old-10.5 {array enumeration errors} {
  786.     catch {unset a}
  787.     set a(a) 1
  788.     set x [array startsearch a]
  789.     list [catch {array next a b c} msg] $msg
  790. } {1 {wrong # args: should be "array nextelement arrayName searchId"}}
  791. test set-old-10.6 {array enumeration errors} {
  792.     catch {unset a}
  793.     set a(a) 1
  794.     set x [array startsearch a]
  795.     list [catch {array next a a-1-a} msg] $msg
  796. } {1 {illegal search identifier "a-1-a"}}
  797. test set-old-10.7 {array enumeration errors} {
  798.     catch {unset a}
  799.     set a(a) 1
  800.     set x [array startsearch a]
  801.     list [catch {array next a sx1-a} msg] $msg
  802. } {1 {illegal search identifier "sx1-a"}}
  803. test set-old-10.8 {array enumeration errors} {
  804.     catch {unset a}
  805.     set a(a) 1
  806.     set x [array startsearch a]
  807.     list [catch {array next a s--a} msg] $msg
  808. } {1 {illegal search identifier "s--a"}}
  809. test set-old-10.9 {array enumeration errors} {
  810.     catch {unset a}
  811.     set a(a) 1
  812.     set x [array startsearch a]
  813.     list [catch {array next a s-1-b} msg] $msg
  814. } {1 {search identifier "s-1-b" isn't for variable "a"}}
  815. test set-old-10.10 {array enumeration errors} {
  816.     catch {unset a}
  817.     set a(a) 1
  818.     set x [array startsearch a]
  819.     list [catch {array next a s-1ba} msg] $msg
  820. } {1 {illegal search identifier "s-1ba"}}
  821. test set-old-10.11 {array enumeration errors} {
  822.     catch {unset a}
  823.     set a(a) 1
  824.     set x [array startsearch a]
  825.     list [catch {array next a s-2-a} msg] $msg
  826. } {1 {couldn't find search "s-2-a"}}
  827. test set-old-10.12 {array enumeration errors} {
  828.     list [catch {array done a} msg] $msg
  829. } {1 {wrong # args: should be "array donesearch arrayName searchId"}}
  830. test set-old-10.13 {array enumeration errors} {
  831.     list [catch {array done a b c} msg] $msg
  832. } {1 {wrong # args: should be "array donesearch arrayName searchId"}}
  833. test set-old-10.14 {array enumeration errors} {
  834.     list [catch {array done a b} msg] $msg
  835. } {1 {illegal search identifier "b"}}
  836. test set-old-10.15 {array enumeration errors} {
  837.     list [catch {array anymore a} msg] $msg
  838. } {1 {wrong # args: should be "array anymore arrayName searchId"}}
  839. test set-old-10.16 {array enumeration errors} {
  840.     list [catch {array any a b c} msg] $msg
  841. } {1 {wrong # args: should be "array anymore arrayName searchId"}}
  842. test set-old-10.17 {array enumeration errors} {
  843.     catch {unset a}
  844.     set a(0) 44
  845.     list [catch {array any a bogus} msg] $msg
  846. } {1 {illegal search identifier "bogus"}}
  847. # Array enumeration with "anymore" option
  848. test set-old-11.1 {array anymore option} {
  849.     catch {unset a}
  850.     set a(a) 1
  851.     set a(b) 2
  852.     set a(c) 3
  853.     array startsearch a
  854.     lsort [list [array anymore a s-1-a] [array next a s-1-a] 
  855.     [array anymore a s-1-a] [array next a s-1-a] 
  856.     [array anymore a s-1-a] [array next a s-1-a] 
  857.     [array anymore a s-1-a] [array next a s-1-a]]
  858. } {{} 0 1 1 1 a b c}
  859. test set-old-11.2 {array anymore option} {
  860.     catch {unset a}
  861.     set a(a) 1
  862.     set a(b) 2
  863.     set a(c) 3
  864.     array startsearch a
  865.     lsort [list [array next a s-1-a] [array next a s-1-a] 
  866.     [array anymore a s-1-a] [array next a s-1-a] 
  867.     [array next a s-1-a] [array anymore a s-1-a]]
  868. } {{} 0 1 a b c}
  869. # Special check to see that the value of a variable is handled correctly
  870. # if it is returned as the result of a procedure (must not free the variable
  871. # string while deleting the call frame).  Errors will only be detected if
  872. # a memory consistency checker such as Purify is being used.
  873. test set-old-12.1 {cleanup on procedure return} {
  874.     proc foo {} {
  875. set x 12345
  876.     }
  877.     foo
  878. } 12345
  879. test set-old-12.2 {cleanup on procedure return} {
  880.     proc foo {} {
  881. set x(1) 23456
  882.     }
  883.     foo
  884. } 23456
  885. # Must delete variables when done, since these arrays get used as
  886. # scalars by other tests.
  887. catch {unset a}
  888. catch {unset b}
  889. catch {unset c}
  890. catch {unset aVaRnAmE}
  891. # cleanup
  892. ::tcltest::cleanupTests
  893. return