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

通讯编程

开发平台:

Visual C++

  1. # Commands covered:  lindex
  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) 1991-1993 The Regents of the University of California.
  8. # Copyright (c) 1994 Sun Microsystems, Inc.
  9. # Copyright (c) 1998-1999 by Scriptics Corporation.
  10. # Copyright (c) 2001 by Kevin B. Kenny.  All rights reserved.
  11. #
  12. # See the file "license.terms" for information on usage and redistribution
  13. # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  14. #
  15. # RCS: @(#) $Id: lindex.test,v 1.10 2002/04/19 13:08:56 dkf Exp $
  16. if {[lsearch [namespace children] ::tcltest] == -1} {
  17.     package require tcltest
  18.     namespace import -force ::tcltest::*
  19. }
  20. set lindex lindex
  21. set minus -
  22. # Tests of Tcl_LindexObjCmd, NOT COMPILED
  23. test lindex-1.1 {wrong # args} {
  24.     list [catch {eval $lindex} result] $result
  25. } "1 {wrong # args: should be "lindex list ?index...?"}"
  26. # Indices that are lists or convertible to lists
  27. test lindex-2.1 {empty index list} {
  28.     set x {}
  29.     list [eval [list $lindex {a b c} $x]] [eval [list $lindex {a b c} $x]]
  30. } {{a b c} {a b c}}
  31. test lindex-2.2 {singleton index list} {
  32.     set x { 1 }
  33.     list [eval [list $lindex {a b c} $x]] [eval [list $lindex {a b c} $x]]
  34. } {b b}
  35. test lindex-2.3 {multiple indices in list} {
  36.     set x {1 2}
  37.     list [eval [list $lindex {{a b c} {d e f}} $x]] 
  38. [eval [list $lindex {{a b c} {d e f}} $x]]
  39. } {f f}
  40. test lindex-2.4 {malformed index list} {
  41.     set x {
  42.     list [catch { eval [list $lindex {a b c} $x] } result] $result
  43. } {1 bad index "{": must be integer or end?-integer?}
  44. # Indices that are integers or convertible to integers
  45. test lindex-3.1 {integer -1} {
  46.     set x ${minus}1
  47.     list [eval [list $lindex {a b c} $x]] [eval [list $lindex {a b c} $x]]
  48. } {{} {}}
  49. test lindex-3.2 {integer 0} {
  50.     set x [string range 00 0 0]
  51.     list [eval [list $lindex {a b c} $x]] [eval [list $lindex {a b c} $x]]
  52. } {a a}
  53. test lindex-3.3 {integer 2} {
  54.     set x [string range 22 0 0]
  55.     list [eval [list $lindex {a b c} $x]] [eval [list $lindex {a b c} $x]]
  56. } {c c}
  57. test lindex-3.4 {integer 3} {
  58.     set x [string range 33 0 0]
  59.     list [eval [list $lindex {a b c} $x]] [eval [list $lindex {a b c} $x]]
  60. } {{} {}}
  61. test lindex-3.5 {bad octal} {
  62.     set x 08
  63.     list [catch { eval [list $lindex {a b c} $x] } result] $result
  64. } "1 {bad index "08": must be integer or end?-integer? (looks like invalid octal number)}"
  65. test lindex-3.6 {bad octal} {
  66.     set x -09
  67.     list [catch { eval [list $lindex {a b c} $x] } result] $result
  68. } "1 {bad index "-09": must be integer or end?-integer? (looks like invalid octal number)}"
  69. test lindex-3.7 {indexes don't shimmer wide ints} {
  70.     set x [expr {(wide(1)<<31) - 2}]
  71.     list $x [lindex {1 2 3} $x] [incr x] [incr x]
  72. } {2147483646 {} 2147483647 2147483648}
  73. # Indices relative to end
  74. test lindex-4.1 {index = end} {
  75.     set x end
  76.     list [eval [list $lindex {a b c} $x]] [eval [list $lindex {a b c} $x]]
  77. } {c c}
  78. test lindex-4.2 {index = end--1} {
  79.     set x end--1
  80.     list [eval [list $lindex {a b c} $x]] [eval [list $lindex {a b c} $x]]
  81. } {{} {}}
  82. test lindex-4.3 {index = end-0} {
  83.     set x end-0
  84.     list [eval [list $lindex {a b c} $x]] [eval [list $lindex {a b c} $x]]
  85. } {c c}
  86. test lindex-4.4 {index = end-2} {
  87.     set x end-2
  88.     list [eval [list $lindex {a b c} $x]] [eval [list $lindex {a b c} $x]]
  89. } {a a}
  90. test lindex-4.5 {index = end-3} {
  91.     set x end-3
  92.     list [eval [list $lindex {a b c} $x]] [eval [list $lindex {a b c} $x]]
  93. } {{} {}}
  94. test lindex-4.6 {bad octal} {
  95.     set x end-08
  96.     list [catch { eval [list $lindex {a b c} $x] } result] $result
  97. } "1 {bad index "end-08": must be integer or end?-integer? (looks like invalid octal number)}"
  98. test lindex-4.7 {bad octal} {
  99.     set x end--09
  100.     list [catch { eval [list $lindex {a b c} $x] } result] $result
  101. } "1 {bad index "end--09": must be integer or end?-integer?}"
  102. test lindex-4.8 {bad integer, not octal} {
  103.     set x end-0a2
  104.     list [catch { eval [list $lindex {a b c} $x] } result] $result
  105. } "1 {bad index "end-0a2": must be integer or end?-integer?}"
  106. test lindex-4.9 {incomplete end} {
  107.     set x en
  108.     list [eval [list $lindex {a b c} $x]] [eval [list $lindex {a b c} $x]]
  109. } {c c}
  110. test lindex-4.10 {incomplete end-} {
  111.     set x end-
  112.     list [catch { eval [list $lindex {a b c} $x] } result] $result
  113. } "1 {bad index "end-": must be integer or end?-integer?}"
  114. test lindex-5.1 {bad second index} {
  115.     list [catch { eval [list $lindex {a b c} 0 0a2] } result] $result
  116. } "1 {bad index "0a2": must be integer or end?-integer?}"
  117. test lindex-5.2 {good second index} {
  118.     eval [list $lindex {{a b c} {d e f} {g h i}} 1 2]
  119. } f
  120. test lindex-5.3 {three indices} {
  121.     eval [list $lindex {{{a b} {c d}} {{e f} {g h}}} 1 0 1]
  122. } f
  123. test lindex-6.1 {error conditions in parsing list} {
  124.     list [catch {eval [list $lindex "a {" 2]} msg] $msg
  125. } {1 {unmatched open brace in list}}
  126. test lindex-6.2 {error conditions in parsing list} {
  127.     list [catch {eval [list $lindex {a {b c}d e} 2]} msg] $msg
  128. } {1 {list element in braces followed by "d" instead of space}}
  129. test lindex-6.3 {error conditions in parsing list} {
  130.     list [catch {eval [list $lindex {a "b c"def ghi} 2]} msg] $msg
  131. } {1 {list element in quotes followed by "def" instead of space}}
  132. test lindex-7.1 {quoted elements} {
  133.     eval [list $lindex {a "b c" d} 1]
  134. } {b c}
  135. test lindex-7.2 {quoted elements} {
  136.     eval [list $lindex {"{}" b c} 0]
  137. } {{}}
  138. test lindex-7.3 {quoted elements} {
  139.     eval [list $lindex {ab "c d " x" y} 1]
  140. } {c d " x}
  141. test lindex-7.4 {quoted elements} {
  142.     lindex {a b {c d "e} {f g"}} 2
  143. } {c d "e}
  144. test lindex-8.1 {data reuse} {
  145.     set x 0
  146.     eval [list $lindex $x $x]
  147. } {0}
  148. test lindex-8.2 {data reuse} {
  149.     set a 0
  150.     eval [list $lindex $a $a $a]
  151. } 0
  152. test lindex-8.3 {data reuse} {
  153.     set a 1
  154.     eval [list $lindex $a $a $a]
  155. } {}
  156. test lindex-8.4 {data reuse} {
  157.     set x [list 0 0]
  158.     eval [list $lindex $x $x]
  159. } {0}
  160. test lindex-8.5 {data reuse} {
  161.     set x 0
  162.     eval [list $lindex $x [list $x $x]]
  163. } {0}
  164. test lindex-8.6 {data reuse} {
  165.     set x [list 1 1]
  166.     eval [list $lindex $x $x]
  167. } {}
  168. test lindex-8.7 {data reuse} {
  169.     set x 1
  170.     eval [list lindex $x [list $x $x]]
  171. } {}
  172. #----------------------------------------------------------------------
  173. # Compilation tests for lindex
  174. test lindex-9.1 {wrong # args} {
  175.     list [catch {lindex} result] $result
  176. } "1 {wrong # args: should be "lindex list ?index...?"}"
  177. # Indices that are lists or convertible to lists
  178. test lindex-10.1 {empty index list} {
  179.     set x {}
  180.     catch {
  181. list [lindex {a b c} $x] [lindex {a b c} $x]
  182.     } result
  183.     set result
  184. } {{a b c} {a b c}}
  185. test lindex-10.2 {singleton index list} {
  186.     set x { 1 }
  187.     catch {
  188. list [lindex {a b c} $x] [lindex {a b c} $x]
  189.     } result
  190.     set result
  191. } {b b}
  192. test lindex-10.3 {multiple indices in list} {
  193.     set x {1 2}
  194.     catch {
  195. list [lindex {{a b c} {d e f}} $x] [lindex {{a b c} {d e f}} $x]
  196.     } result
  197.     set result
  198. } {f f}
  199. test lindex-10.4 {malformed index list} {
  200.     set x {
  201.     list [catch { lindex {a b c} $x } result] $result
  202. } {1 bad index "{": must be integer or end?-integer?}
  203. # Indices that are integers or convertible to integers
  204. test lindex-11.1 {integer -1} {
  205.     set x ${minus}1
  206.     catch {
  207. list [lindex {a b c} $x] [lindex {a b c} $x]
  208.     } result
  209.     set result
  210. } {{} {}}
  211. test lindex-11.2 {integer 0} {
  212.     set x [string range 00 0 0]
  213.     catch {
  214. list [lindex {a b c} $x] [lindex {a b c} $x]
  215.     } result
  216.     set result
  217. } {a a}
  218. test lindex-11.3 {integer 2} {
  219.     set x [string range 22 0 0]
  220.     catch {
  221. list [lindex {a b c} $x] [lindex {a b c} $x]
  222.     } result
  223.     set result
  224. } {c c}
  225. test lindex-11.4 {integer 3} {
  226.     set x [string range 33 0 0]
  227.     catch {
  228. list [lindex {a b c} $x] [lindex {a b c} $x]
  229.     } result
  230.     set result
  231. } {{} {}}
  232. test lindex-11.5 {bad octal} {
  233.     set x 08
  234.     list [catch { lindex {a b c} $x } result] $result
  235. } "1 {bad index "08": must be integer or end?-integer? (looks like invalid octal number)}"
  236. test lindex-11.6 {bad octal} {
  237.     set x -09
  238.     list [catch { lindex {a b c} $x } result] $result
  239. } "1 {bad index "-09": must be integer or end?-integer? (looks like invalid octal number)}"
  240. # Indices relative to end
  241. test lindex-12.1 {index = end} {
  242.     set x end
  243.     catch {
  244. list [lindex {a b c} $x] [lindex {a b c} $x]
  245.     } result
  246.     set result
  247. } {c c}
  248. test lindex-12.2 {index = end--1} {
  249.     set x end--1
  250.     catch {
  251. list [lindex {a b c} $x] [lindex {a b c} $x]
  252.     } result
  253.     set result
  254. } {{} {}}
  255. test lindex-12.3 {index = end-0} {
  256.     set x end-0
  257.     catch {
  258. list [lindex {a b c} $x] [lindex {a b c} $x]
  259.     } result
  260.     set result
  261. } {c c}
  262. test lindex-12.4 {index = end-2} {
  263.     set x end-2
  264.     catch {
  265. list [lindex {a b c} $x] [lindex {a b c} $x]
  266.     } result
  267.     set result
  268. } {a a}
  269. test lindex-12.5 {index = end-3} {
  270.     set x end-3
  271.     catch {
  272. list [lindex {a b c} $x] [lindex {a b c} $x]
  273.     } result
  274.     set result
  275. } {{} {}}
  276. test lindex-12.6 {bad octal} {
  277.     set x end-08
  278.     list [catch { lindex {a b c} $x } result] $result
  279. } "1 {bad index "end-08": must be integer or end?-integer? (looks like invalid octal number)}"
  280. test lindex-12.7 {bad octal} {
  281.     set x end--09
  282.     list [catch { lindex {a b c} $x } result] $result
  283. } "1 {bad index "end--09": must be integer or end?-integer?}"
  284. test lindex-12.8 {bad integer, not octal} {
  285.     set x end-0a2
  286.     list [catch { lindex {a b c} $x } result] $result
  287. } "1 {bad index "end-0a2": must be integer or end?-integer?}"
  288. test lindex-12.9 {incomplete end} {
  289.     set x en
  290.     catch {
  291. list [lindex {a b c} $x] [lindex {a b c} $x]
  292.     } result
  293.     set result
  294. } {c c}
  295. test lindex-12.10 {incomplete end-} {
  296.     set x end-
  297.     list [catch { lindex {a b c} $x } result] $result
  298. } "1 {bad index "end-": must be integer or end?-integer?}"
  299. test lindex-13.1 {bad second index} {
  300.     list [catch { lindex {a b c} 0 0a2 } result] $result
  301. } "1 {bad index "0a2": must be integer or end?-integer?}"
  302. test lindex-13.2 {good second index} {
  303.     catch {
  304. lindex {{a b c} {d e f} {g h i}} 1 2
  305.     } result
  306.     set result
  307. } f
  308. test lindex-13.3 {three indices} {
  309.     catch {
  310. lindex {{{a b} {c d}} {{e f} {g h}}} 1 0 1
  311.     } result
  312.     set result
  313. } f
  314. test lindex-14.1 {error conditions in parsing list} {
  315.     list [catch { lindex "a {" 2 } msg] $msg
  316. } {1 {unmatched open brace in list}}
  317. test lindex-14.2 {error conditions in parsing list} {
  318.     list [catch { lindex {a {b c}d e} 2 } msg] $msg
  319. } {1 {list element in braces followed by "d" instead of space}}
  320. test lindex-14.3 {error conditions in parsing list} {
  321.     list [catch { lindex {a "b c"def ghi} 2 } msg] $msg
  322. } {1 {list element in quotes followed by "def" instead of space}}
  323. test lindex-15.1 {quoted elements} {
  324.     catch {
  325. lindex {a "b c" d} 1
  326.     } result
  327.     set result
  328. } {b c}
  329. test lindex-15.2 {quoted elements} {
  330.     catch {
  331. lindex {"{}" b c} 0
  332.     } result
  333.     set result
  334. } {{}}
  335. test lindex-15.3 {quoted elements} {
  336.     catch {
  337. lindex {ab "c d " x" y} 1
  338.     } result
  339.     set result
  340. } {c d " x}
  341. test lindex-15.4 {quoted elements} {
  342.     catch {
  343. lindex {a b {c d "e} {f g"}} 2
  344.     } result
  345.     set result
  346. } {c d "e}
  347. test lindex-16.1 {data reuse} {
  348.     set x 0
  349.     catch {
  350. lindex $x $x
  351.     } result
  352.     set result
  353. } {0}
  354. test lindex-16.2 {data reuse} {
  355.     set a 0
  356.     catch {
  357. lindex $a $a $a
  358.     } result
  359.     set result
  360. } 0
  361. test lindex-16.3 {data reuse} {
  362.     set a 1
  363.     catch {
  364. lindex $a $a $a
  365.     } result
  366.     set result
  367. } {}
  368. test lindex-16.4 {data reuse} {
  369.     set x [list 0 0]
  370.     catch {
  371. lindex $x $x
  372.     } result
  373.     set result
  374. } {0}
  375. test lindex-16.5 {data reuse} {
  376.     set x 0
  377.     catch {
  378. lindex $x [list $x $x]
  379.     } result
  380.     set result
  381. } {0}
  382. test lindex-16.6 {data reuse} {
  383.     set x [list 1 1]
  384.     catch {
  385. lindex $x $x
  386.     } result
  387.     set result
  388. } {}
  389. test lindex-16.7 {data reuse} {
  390.     set x 1
  391.     catch {
  392. lindex $x [list $x $x]
  393.     } result
  394.     set result
  395. } {}
  396. catch { unset lindex}
  397. catch { unset minus }
  398. # cleanup
  399. ::tcltest::cleanupTests
  400. return