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

通讯编程

开发平台:

Visual C++

  1. # This file is a -*- tcl -*- test script
  2. # Commands covered: lset
  3. #
  4. # This file contains a collection of tests for one or more of the Tcl
  5. # built-in commands.  Sourcing this file into Tcl runs the tests and
  6. # generates output for errors.  No output means no errors were found.
  7. #
  8. # Copyright (c) 2001 by Kevin B. Kenny.  All rights reserved.
  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. if {[lsearch [namespace children] ::tcltest] == -1} {
  15.     package require tcltest
  16.     namespace import -force ::tcltest::*
  17. }
  18. proc failTrace {name1 name2 op} {
  19.     error "trace failed"
  20. }
  21. set lset lset
  22. set noRead {}
  23. trace add variable noRead read failTrace
  24. set noWrite {a b c}
  25. trace add variable noWrite write failTrace
  26. test lset-1.1 {lset, not compiled, arg count} {
  27.     list [catch {eval $lset} msg] $msg
  28. } "1 {wrong # args: should be "lset listVar index ?index...? value"}"
  29. test lset-1.2 {lset, not compiled, no such var} {
  30.     list [catch {eval [list $lset noSuchVar 0 {}]} msg] $msg
  31. } "1 {can't read "noSuchVar": no such variable}"
  32. test lset-1.3 {lset, not compiled, var not readable} {
  33.     list [catch {eval [list $lset noRead 0 {}]} msg] $msg
  34. } "1 {can't read "noRead": trace failed}"
  35. test lset-2.1 {lset, not compiled, 3 args, second arg a plain index} {
  36.     set x {0 1 2}
  37.     list [eval [list $lset x 0 3]] $x
  38. } {{3 1 2} {3 1 2}}
  39. test lset-2.2 {lset, not compiled, 3 args, second arg neither index nor list} {
  40.     set x {0 1 2}
  41.     list [catch {
  42. eval [list $lset x {{bad}1} 3]
  43.     } msg] $msg
  44. } "1 {bad index "{bad}1": must be integer or end?-integer?}"
  45. test lset-3.1 {lset, not compiled, 3 args, data duplicated} {
  46.     set x {0 1 2}
  47.     list [eval [list $lset x 0 $x]] $x
  48. } {{{0 1 2} 1 2} {{0 1 2} 1 2}}
  49. test lset-3.2 {lset, not compiled, 3 args, data duplicated} {
  50.     set x {0 1}
  51.     set y $x
  52.     list [eval [list $lset x 0 2]] $x $y
  53. } {{2 1} {2 1} {0 1}}
  54. test lset-3.3 {lset, not compiled, 3 args, data duplicated} {
  55.     set x {0 1}
  56.     set y $x
  57.     list [eval [list $lset x 0 $x]] $x $y
  58. } {{{0 1} 1} {{0 1} 1} {0 1}}
  59. test lset-3.4 {lset, not compiled, 3 args, data duplicated} {
  60.     set x {0 1 2}
  61.     list [eval [list $lset x [list 0] $x]] $x
  62. } {{{0 1 2} 1 2} {{0 1 2} 1 2}}
  63. test lset-3.5 {lset, not compiled, 3 args, data duplicated} {
  64.     set x {0 1}
  65.     set y $x
  66.     list [eval [list $lset x [list 0] 2]] $x $y
  67. } {{2 1} {2 1} {0 1}}
  68. test lset-3.6 {lset, not compiled, 3 args, data duplicated} {
  69.     set x {0 1}
  70.     set y $x
  71.     list [eval [list $lset x [list 0] $x]] $x $y
  72. } {{{0 1} 1} {{0 1} 1} {0 1}}
  73. test lset-4.1 {lset, not compiled, 3 args, not a list} {
  74.     set a "x {"
  75.     list [catch {
  76. eval [list $lset a [list 0] y]
  77.     } msg] $msg
  78. } {1 {unmatched open brace in list}}
  79. test lset-4.2 {lset, not compiled, 3 args, bad index} {
  80.     set a {x y z}
  81.     list [catch {
  82. eval [list $lset a [list 2a2] w]
  83.     } msg] $msg
  84. } {1 {bad index "2a2": must be integer or end?-integer?}}
  85. test lset-4.3 {lset, not compiled, 3 args, index out of range} {
  86.     set a {x y z}
  87.     list [catch {
  88. eval [list $lset a [list -1] w]
  89.     } msg] $msg
  90. } {1 {list index out of range}}
  91. test lset-4.4 {lset, not compiled, 3 args, index out of range} {
  92.     set a {x y z}
  93.     list [catch {
  94. eval [list $lset a [list 3] w]
  95.     } msg] $msg
  96. } {1 {list index out of range}}
  97. test lset-4.5 {lset, not compiled, 3 args, index out of range} {
  98.     set a {x y z}
  99.     list [catch {
  100. eval [list $lset a [list end--1] w]
  101.     } msg] $msg
  102. } {1 {list index out of range}}
  103. test lset-4.6 {lset, not compiled, 3 args, index out of range} {
  104.     set a {x y z}
  105.     list [catch {
  106. eval [list $lset a [list end-3] w]
  107.     } msg] $msg
  108. } {1 {list index out of range}}
  109. test lset-4.7 {lset, not compiled, 3 args, not a list} {
  110.     set a "x {"
  111.     list [catch {
  112. eval [list $lset a 0 y]
  113.     } msg] $msg
  114. } {1 {unmatched open brace in list}}
  115. test lset-4.8 {lset, not compiled, 3 args, bad index} {
  116.     set a {x y z}
  117.     list [catch {
  118. eval [list $lset a 2a2 w]
  119.     } msg] $msg
  120. } {1 {bad index "2a2": must be integer or end?-integer?}}
  121. test lset-4.9 {lset, not compiled, 3 args, index out of range} {
  122.     set a {x y z}
  123.     list [catch {
  124. eval [list $lset a -1 w]
  125.     } msg] $msg
  126. } {1 {list index out of range}}
  127. test lset-4.10 {lset, not compiled, 3 args, index out of range} {
  128.     set a {x y z}
  129.     list [catch {
  130. eval [list $lset a 3 w]
  131.     } msg] $msg
  132. } {1 {list index out of range}}
  133. test lset-4.11 {lset, not compiled, 3 args, index out of range} {
  134.     set a {x y z}
  135.     list [catch {
  136. eval [list $lset a end--1 w]
  137.     } msg] $msg
  138. } {1 {list index out of range}}
  139. test lset-4.12 {lset, not compiled, 3 args, index out of range} {
  140.     set a {x y z}
  141.     list [catch {
  142. eval [list $lset a end-3 w]
  143.     } msg] $msg
  144. } {1 {list index out of range}}
  145. test lset-5.1 {lset, not compiled, 3 args, can't set variable} {
  146.     list [catch {
  147. eval [list $lset noWrite 0 d]
  148.     } msg] $msg $noWrite
  149. } {1 {can't set "noWrite": trace failed} {d b c}}
  150. test lset-5.2 {lset, not compiled, 3 args, can't set variable} {
  151.     list [catch {
  152. eval [list $lset noWrite [list 0] d]
  153.     } msg] $msg $noWrite
  154. } {1 {can't set "noWrite": trace failed} {d b c}}
  155. test lset-6.1 {lset, not compiled, 3 args, 1-d list basics} {
  156.     set a {x y z}
  157.     list [eval [list $lset a 0 a]] $a
  158. } {{a y z} {a y z}}
  159. test lset-6.2 {lset, not compiled, 3 args, 1-d list basics} {
  160.     set a {x y z}
  161.     list [eval [list $lset a [list 0] a]] $a
  162. } {{a y z} {a y z}}
  163. test lset-6.3 {lset, not compiled, 1-d list basics} {
  164.     set a {x y z}
  165.     list [eval [list $lset a 2 a]] $a
  166. } {{x y a} {x y a}}
  167. test lset-6.4 {lset, not compiled, 1-d list basics} {
  168.     set a {x y z}
  169.     list [eval [list $lset a [list 2] a]] $a
  170. } {{x y a} {x y a}}
  171. test lset-6.5 {lset, not compiled, 1-d list basics} {
  172.     set a {x y z}
  173.     list [eval [list $lset a end a]] $a
  174. } {{x y a} {x y a}}
  175. test lset-6.6 {lset, not compiled, 1-d list basics} {
  176.     set a {x y z}
  177.     list [eval [list $lset a [list end] a]] $a
  178. } {{x y a} {x y a}}
  179. test lset-6.7 {lset, not compiled, 1-d list basics} {
  180.     set a {x y z}
  181.     list [eval [list $lset a end-0 a]] $a
  182. } {{x y a} {x y a}}
  183. test lset-6.8 {lset, not compiled, 1-d list basics} {
  184.     set a {x y z}
  185.     list [eval [list $lset a [list end-0] a]] $a
  186. } {{x y a} {x y a}}
  187. test lset-6.9 {lset, not compiled, 1-d list basics} {
  188.     set a {x y z}
  189.     list [eval [list $lset a end-2 a]] $a
  190. } {{a y z} {a y z}}
  191. test lset-6.10 {lset, not compiled, 1-d list basics} {
  192.     set a {x y z}
  193.     list [eval [list $lset a [list end-2] a]] $a
  194. } {{a y z} {a y z}}
  195. test lset-7.1 {lset, not compiled, data sharing} {
  196.     set a 0
  197.     list [eval [list $lset a $a {gag me}]] $a
  198. } {{{gag me}} {{gag me}}}
  199. test lset-7.2 {lset, not compiled, data sharing} {
  200.     set a [list 0]
  201.     list [eval [list $lset a $a {gag me}]] $a
  202. } {{{gag me}} {{gag me}}}
  203. test lset-7.3 {lset, not compiled, data sharing} {
  204.     set a {x y}
  205.     list [eval [list $lset a 0 $a]] $a
  206. } {{{x y} y} {{x y} y}}
  207. test lset-7.4 {lset, not compiled, data sharing} {
  208.     set a {x y}
  209.     list [eval [list $lset a [list 0] $a]] $a
  210. } {{{x y} y} {{x y} y}}
  211. test lset-7.5 {lset, not compiled, data sharing} {
  212.     set n 0
  213.     set a {x y}
  214.     list [eval [list $lset a $n $n]] $a $n
  215. } {{0 y} {0 y} 0}
  216. test lset-7.6 {lset, not compiled, data sharing} {
  217.     set n [list 0]
  218.     set a {x y}
  219.     list [eval [list $lset a $n $n]] $a $n
  220. } {{0 y} {0 y} 0}
  221. test lset-7.7 {lset, not compiled, data sharing} {
  222.     set n 0
  223.     set a [list $n $n]
  224.     list [eval [list $lset a $n 1]] $a $n
  225. } {{1 0} {1 0} 0}
  226. test lset-7.8 {lset, not compiled, data sharing} {
  227.     set n [list 0]
  228.     set a [list $n $n]
  229.     list [eval [list $lset a $n 1]] $a $n
  230. } {{1 0} {1 0} 0}
  231. test lset-7.9 {lset, not compiled, data sharing} {
  232.     set a 0
  233.     list [eval [list $lset a $a $a]] $a
  234. } {0 0}
  235. test lset-7.10 {lset, not compiled, data sharing} {
  236.     set a [list 0]
  237.     list [eval [list $lset a $a $a]] $a
  238. } {0 0}
  239. test lset-8.1 {lset, not compiled, malformed sublist} {
  240.     set a [list "a {" b]
  241.     list [catch {eval [list $lset a 0 1 c]} msg] $msg
  242. } {1 {unmatched open brace in list}}
  243. test lset-8.2 {lset, not compiled, malformed sublist} {
  244.     set a [list "a {" b]
  245.     list [catch {eval [list $lset a {0 1} c]} msg] $msg
  246. } {1 {unmatched open brace in list}}
  247. test lset-8.3 {lset, not compiled, bad second index} {
  248.     set a {{b c} {d e}}
  249.     list [catch {eval [list $lset a 0 2a2 f]} msg] $msg
  250. } {1 {bad index "2a2": must be integer or end?-integer?}}
  251. test lset-8.4 {lset, not compiled, bad second index} {
  252.     set a {{b c} {d e}}
  253.     list [catch {eval [list $lset a {0 2a2} f]} msg] $msg
  254. } {1 {bad index "2a2": must be integer or end?-integer?}}
  255. test lset-8.5 {lset, not compiled, second index out of range} {
  256.     set a {{b c} {d e} {f g}}
  257.     list [catch {eval [list $lset a 2 -1 h]} msg] $msg
  258. } {1 {list index out of range}}
  259. test lset-8.6 {lset, not compiled, second index out of range} {
  260.     set a {{b c} {d e} {f g}}
  261.     list [catch {eval [list $lset a {2 -1} h]} msg] $msg
  262. } {1 {list index out of range}}
  263. test lset-8.7 {lset, not compiled, second index out of range} {
  264.     set a {{b c} {d e} {f g}}
  265.     list [catch {eval [list $lset a 2 2 h]} msg] $msg
  266. } {1 {list index out of range}}
  267. test lset-8.8 {lset, not compiled, second index out of range} {
  268.     set a {{b c} {d e} {f g}}
  269.     list [catch {eval [list $lset a {2 2} h]} msg] $msg
  270. } {1 {list index out of range}}
  271. test lset-8.9 {lset, not compiled, second index out of range} {
  272.     set a {{b c} {d e} {f g}}
  273.     list [catch {eval [list $lset a 2 end--1 h]} msg] $msg
  274. } {1 {list index out of range}}
  275. test lset-8.10 {lset, not compiled, second index out of range} {
  276.     set a {{b c} {d e} {f g}}
  277.     list [catch {eval [list $lset a {2 end--1} h]} msg] $msg
  278. } {1 {list index out of range}}
  279. test lset-8.11 {lset, not compiled, second index out of range} {
  280.     set a {{b c} {d e} {f g}}
  281.     list [catch {eval [list $lset a 2 end-2 h]} msg] $msg
  282. } {1 {list index out of range}}
  283. test lset-8.12 {lset, not compiled, second index out of range} {
  284.     set a {{b c} {d e} {f g}}
  285.     list [catch {eval [list $lset a {2 end-2} h]} msg] $msg
  286. } {1 {list index out of range}}
  287. test lset-9.1 {lset, not compiled, entire variable} {
  288.     set a x
  289.     list [eval [list $lset a y]] $a
  290. } {y y}
  291. test lset-9.2 {lset, not compiled, entire variable} {
  292.     set a x
  293.     list [eval [list $lset a {} y]] $a
  294. } {y y}
  295. test lset-10.1 {lset, not compiled, shared data} {
  296.     set row {p q}
  297.     set a [list $row $row]
  298.     list [eval [list $lset a 0 0 x]] $a
  299. } {{{x q} {p q}} {{x q} {p q}}}
  300. test lset-10.2 {lset, not compiled, shared data} {
  301.     set row {p q}
  302.     set a [list $row $row]
  303.     list [eval [list $lset a {0 0} x]] $a
  304. } {{{x q} {p q}} {{x q} {p q}}}
  305. test lset-11.1 {lset, not compiled, 2-d basics} {
  306.     set a {{b c} {d e}}
  307.     list [eval [list $lset a 0 0 f]] $a
  308. } {{{f c} {d e}} {{f c} {d e}}}
  309. test lset-11.2 {lset, not compiled, 2-d basics} {
  310.     set a {{b c} {d e}}
  311.     list [eval [list $lset a {0 0} f]] $a
  312. } {{{f c} {d e}} {{f c} {d e}}}
  313. test lset-11.3 {lset, not compiled, 2-d basics} {
  314.     set a {{b c} {d e}}
  315.     list [eval [list $lset a 0 1 f]] $a
  316. } {{{b f} {d e}} {{b f} {d e}}}
  317. test lset-11.4 {lset, not compiled, 2-d basics} {
  318.     set a {{b c} {d e}}
  319.     list [eval [list $lset a {0 1} f]] $a
  320. } {{{b f} {d e}} {{b f} {d e}}}
  321. test lset-11.5 {lset, not compiled, 2-d basics} {
  322.     set a {{b c} {d e}}
  323.     list [eval [list $lset a 1 0 f]] $a
  324. } {{{b c} {f e}} {{b c} {f e}}}
  325. test lset-11.6 {lset, not compiled, 2-d basics} {
  326.     set a {{b c} {d e}}
  327.     list [eval [list $lset a {1 0} f]] $a
  328. } {{{b c} {f e}} {{b c} {f e}}}
  329. test lset-11.7 {lset, not compiled, 2-d basics} {
  330.     set a {{b c} {d e}}
  331.     list [eval [list $lset a 1 1 f]] $a
  332. } {{{b c} {d f}} {{b c} {d f}}}
  333. test lset-11.8 {lset, not compiled, 2-d basics} {
  334.     set a {{b c} {d e}}
  335.     list [eval [list $lset a {1 1} f]] $a
  336. } {{{b c} {d f}} {{b c} {d f}}}
  337. test lset-12.0 {lset, not compiled, typical sharing pattern} {
  338.     set zero 0
  339.     set row [list $zero $zero $zero $zero]
  340.     set ident [list $row $row $row $row]
  341.     for { set i 0 } { $i < 4 } { incr i } {
  342. eval [list $lset ident $i $i 1]
  343.     }
  344.     set ident
  345. } {{1 0 0 0} {0 1 0 0} {0 0 1 0} {0 0 0 1}}
  346. test lset-13.0 {lset, not compiled, shimmering hell} {
  347.     set a 0
  348.     list [eval [list $lset a $a $a $a $a {gag me}]] $a
  349. } {{{{{{gag me}}}}} {{{{{gag me}}}}}}
  350. test lset-13.1 {lset, not compiled, shimmering hell} {
  351.     set a [list 0]
  352.     list [eval [list $lset a $a $a $a $a {gag me}]] $a
  353. } {{{{{{gag me}}}}} {{{{{gag me}}}}}}
  354. test lset-13.2 {lset, not compiled, shimmering hell} {
  355.     set a [list 0 0 0 0]
  356.     list [eval [list $lset a $a {gag me}]] $a
  357. } {{{{{{gag me}}}} 0 0 0} {{{{{gag me}}}} 0 0 0}}
  358. test lset-14.1 {lset, not compiled, list args, is string rep preserved?} {
  359.     set a { { 1 2 } { 3 4 } }
  360.     catch { eval [list $lset a {1 5} 5] }
  361.     list $a [lindex $a 1]
  362. } "{ { 1 2 } { 3 4 } } { 3 4 }"
  363. test lset-14.2 {lset, not compiled, flat args, is string rep preserved?} {
  364.     set a { { 1 2 } { 3 4 } }
  365.     catch { eval [list $lset a 1 5 5] }
  366.     list $a [lindex $a 1]
  367. } "{ { 1 2 } { 3 4 } } { 3 4 }"
  368. catch {unset noRead}
  369. catch {unset noWrite}
  370. catch {rename failTrace {}}
  371. catch {unset ::x}
  372. catch {unset ::y}
  373. # cleanup
  374. ::tcltest::cleanupTests
  375. return