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

通讯编程

开发平台:

Visual C++

  1. # Commands covered:  while
  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: while.test,v 1.8 2001/12/04 15:36:29 dkf Exp $
  14. if {[lsearch [namespace children] ::tcltest] == -1} {
  15.     package require tcltest
  16.     namespace import -force ::tcltest::*
  17. }
  18. # Basic "while" operation.
  19. catch {unset i}
  20. catch {unset a}
  21. test while-1.1 {TclCompileWhileCmd: missing test expression} {
  22.     catch {while } msg
  23.     set msg
  24. } {wrong # args: should be "while test command"}
  25. test while-1.2 {TclCompileWhileCmd: error in test expression} {
  26.     set i 0
  27.     catch {while {$i<} break} msg
  28.     set errorInfo
  29. } {syntax error in expression "$i<": premature end of expression
  30.     ("while" test expression)
  31.     while compiling
  32. "while {$i<} break"}
  33. test while-1.3 {TclCompileWhileCmd: error in test expression} {
  34.     set err [catch {while {"a"+"b"} {error "loop aborted"}} msg]
  35.     list $err $msg
  36. } {1 {can't use non-numeric string as operand of "+"}}
  37. test while-1.4 {TclCompileWhileCmd: multiline test expr} {
  38.     set value 1
  39.     while {($tcl_platform(platform) != "foobar1") && 
  40.     ($tcl_platform(platform) != "foobar2")} {
  41.         incr value
  42.         break
  43.     }
  44.     set value
  45. } {2}
  46. test while-1.5 {TclCompileWhileCmd: non-numeric boolean test expr} {
  47.     set value 1
  48.     while {"true"} {
  49. incr value;
  50. if {$value > 5} {
  51.     break;
  52. }
  53.     }
  54.     set value
  55. } 6
  56. test while-1.6 {TclCompileWhileCmd: test expr is enclosed in quotes} {
  57.     set i 0
  58.     while "$i > 5" {}
  59. } {}
  60. test while-1.7 {TclCompileWhileCmd: missing command body} {
  61.     set i 0
  62.     catch {while {$i < 5} } msg
  63.     set msg
  64. } {wrong # args: should be "while test command"}
  65. test while-1.8 {TclCompileWhileCmd: error compiling command body} {
  66.     set i 0
  67.     catch {while {$i < 5} {set}} msg
  68.     set errorInfo
  69. } {wrong # args: should be "set varName ?newValue?"
  70.     while compiling
  71. "set"
  72.     ("while" body line 1)
  73.     while compiling
  74. "while {$i < 5} {set}"}
  75. test while-1.9 {TclCompileWhileCmd: simple command body} {
  76.     set a {}
  77.     set i 1
  78.     while {$i<6} {
  79. if $i==4 break
  80. set a [concat $a $i]
  81.         incr i
  82.     }
  83.     set a
  84. } {1 2 3}
  85. test while-1.10 {TclCompileWhileCmd: command body in quotes} {
  86.     set a {}
  87.     set i 1
  88.     while {$i<6} "append a x; incr i"
  89.     set a
  90. } {xxxxx}
  91. test while-1.11 {TclCompileWhileCmd: computed command body} {
  92.     catch {unset x1}
  93.     catch {unset bb}
  94.     catch {unset x2}
  95.     set x1 {append a x1; }
  96.     set bb {break}
  97.     set x2 {; append a x2; incr i}
  98.     set a {}
  99.     set i 1
  100.     while {$i<6} $x1$bb$x2
  101.     set a
  102. } {x1}
  103. test while-1.12 {TclCompileWhileCmd: long command body} {
  104.     set a {}
  105.     set i 1
  106.     while {$i<6} {
  107. if $i==4 break
  108. if $i>5 continue
  109. if {$i>6 && $tcl_platform(machine)=="xxx"} {
  110.     catch {set a $a} msg
  111.     catch {incr i 5} msg
  112.     catch {incr i -5} msg
  113. }
  114. if {$i>6 && $tcl_platform(machine)=="xxx"} {
  115.     catch {set a $a} msg
  116.     catch {incr i 5} msg
  117.     catch {incr i -5} msg
  118. }
  119. if {$i>6 && $tcl_platform(machine)=="xxx"} {
  120.     catch {set a $a} msg
  121.     catch {incr i 5} msg
  122.     catch {incr i -5} msg
  123. }
  124. if {$i>6 && $tcl_platform(machine)=="xxx"} {
  125.     catch {set a $a} msg
  126.     catch {incr i 5} msg
  127.     catch {incr i -5} msg
  128. }
  129. if {$i>6 && $tcl_platform(machine)=="xxx"} {
  130.     catch {set a $a} msg
  131.     catch {incr i 5} msg
  132.     catch {incr i -5} msg
  133. }
  134. set a [concat $a $i]
  135.         incr i
  136.     }
  137.     set a
  138. } {1 2 3}
  139. test while-1.13 {TclCompileWhileCmd: while command result} {
  140.     set i 0
  141.     set a [while {$i < 5} {incr i}]
  142.     set a
  143. } {}
  144. test while-1.14 {TclCompileWhileCmd: while command result} {
  145.     set i 0
  146.     set a [while {$i < 5} {if $i==3 break; incr i}]
  147.     set a
  148. } {}
  149. # Check "while" and "continue".
  150. test while-2.1 {continue tests} {
  151.     set a {}
  152.     set i 1
  153.     while {$i <= 4} {
  154.         incr i
  155. if {$i == 3} continue
  156. set a [concat $a $i]
  157.     }
  158.     set a
  159. } {2 4 5}
  160. test while-2.2 {continue tests} {
  161.     set a {}
  162.     set i 1
  163.     while {$i <= 4} {
  164.         incr i
  165. if {$i != 2} continue
  166. set a [concat $a $i]
  167.     }
  168.     set a
  169. } {2}
  170. test while-2.3 {continue tests, nested loops} {
  171.     set msg {}
  172.     set i 1
  173.     while {$i <= 4} {
  174.         incr i
  175.         set a 1
  176. while {$a <= 2} {
  177.             incr a
  178.             if {$i>=3 && $a>=3} continue
  179.             set msg [concat $msg "$i.$a"]
  180.         }
  181.     }
  182.     set msg
  183. } {2.2 2.3 3.2 4.2 5.2}
  184. test while-2.4 {continue tests, long command body} {
  185.     set a {}
  186.     set i 1
  187.     while {$i<6} {
  188. if $i==2 {incr i; continue}
  189. if $i==4 break
  190. if $i>5 continue
  191. if {$i>6 && $tcl_platform(machine)=="xxx"} {
  192.     catch {set a $a} msg
  193.     catch {incr i 5} msg
  194.     catch {incr i -5} msg
  195. }
  196. if {$i>6 && $tcl_platform(machine)=="xxx"} {
  197.     catch {set a $a} msg
  198.     catch {incr i 5} msg
  199.     catch {incr i -5} msg
  200. }
  201. if {$i>6 && $tcl_platform(machine)=="xxx"} {
  202.     catch {set a $a} msg
  203.     catch {incr i 5} msg
  204.     catch {incr i -5} msg
  205. }
  206. if {$i>6 && $tcl_platform(machine)=="xxx"} {
  207.     catch {set a $a} msg
  208.     catch {incr i 5} msg
  209.     catch {incr i -5} msg
  210. }
  211. if {$i>6 && $tcl_platform(machine)=="xxx"} {
  212.     catch {set a $a} msg
  213.     catch {incr i 5} msg
  214.     catch {incr i -5} msg
  215. }
  216. set a [concat $a $i]
  217.         incr i
  218.     }
  219.     set a
  220. } {1 3}
  221. # Check "while" and "break".
  222. test while-3.1 {break tests} {
  223.     set a {}
  224.     set i 1
  225.     while {$i <= 4} {
  226. if {$i == 3} break
  227. set a [concat $a $i]
  228.         incr i
  229.     }
  230.     set a
  231. } {1 2}
  232. test while-3.2 {break tests, nested loops} {
  233.     set msg {}
  234.     set i 1
  235.     while {$i <= 4} {
  236.         set a 1
  237. while {$a <= 2} {
  238.             if {$i>=2 && $a>=2} break
  239.             set msg [concat $msg "$i.$a"]
  240.             incr a
  241.         }
  242.         incr i
  243.     }
  244.     set msg
  245. } {1.1 1.2 2.1 3.1 4.1}
  246. test while-3.3 {break tests, long command body} {
  247.     set a {}
  248.     set i 1
  249.     while {$i<6} {
  250. if $i==2 {incr i; continue}
  251. if $i==5 break
  252. if $i>5 continue
  253. if {$i>6 && $tcl_platform(machine)=="xxx"} {
  254.     catch {set a $a} msg
  255.     catch {incr i 5} msg
  256.     catch {incr i -5} msg
  257. }
  258. if {$i>6 && $tcl_platform(machine)=="xxx"} {
  259.     catch {set a $a} msg
  260.     catch {incr i 5} msg
  261.     catch {incr i -5} msg
  262. }
  263. if {$i>6 && $tcl_platform(machine)=="xxx"} {
  264.     catch {set a $a} msg
  265.     catch {incr i 5} msg
  266.     catch {incr i -5} msg
  267. }
  268. if $i==4 break
  269. if {$i>6 && $tcl_platform(machine)=="xxx"} {
  270.     catch {set a $a} msg
  271.     catch {incr i 5} msg
  272.     catch {incr i -5} msg
  273. }
  274. if {$i>6 && $tcl_platform(machine)=="xxx"} {
  275.     catch {set a $a} msg
  276.     catch {incr i 5} msg
  277.     catch {incr i -5} msg
  278. }
  279. set a [concat $a $i]
  280.         incr i
  281.     }
  282.     set a
  283. } {1 3}
  284. # Check "while" with computed command names.
  285. test while-4.1 {while and computed command names} {
  286.     set i 0
  287.     set z while
  288.     $z {$i < 10} {
  289.         incr i
  290.     }
  291.     set i
  292. } 10
  293. test while-4.2 {while (not compiled): missing test expression} {
  294.     set z while
  295.     catch {$z } msg
  296.     set msg
  297. } {wrong # args: should be "while test command"}
  298. test while-4.3 {while (not compiled): error in test expression} {
  299.     set i 0
  300.     set z while
  301.     catch {$z {$i<} {set x 1}} msg
  302.     set errorInfo
  303. } {syntax error in expression "$i<": premature end of expression
  304.     while executing
  305. "$z {$i<} {set x 1}"}
  306. test while-4.4 {while (not compiled): error in test expression} {
  307.     set z while
  308.     set err [catch {$z {"a"+"b"} {error "loop aborted"}} msg]
  309.     list $err $msg
  310. } {1 {can't use non-numeric string as operand of "+"}}
  311. test while-4.5 {while (not compiled): multiline test expr} {
  312.     set value 1
  313.     set z while
  314.     $z {($tcl_platform(platform) != "foobar1") && 
  315.     ($tcl_platform(platform) != "foobar2")} {
  316.         incr value
  317.         break
  318.     }
  319.     set value
  320. } {2}
  321. test while-4.6 {while (not compiled): non-numeric boolean test expr} {
  322.     set value 1
  323.     set z while
  324.     $z {"true"} {
  325. incr value;
  326. if {$value > 5} {
  327.     break;
  328. }
  329.     }
  330.     set value
  331. } 6
  332. test while-4.7 {while (not compiled): test expr is enclosed in quotes} {
  333.     set i 0
  334.     set z while
  335.     $z "$i > 5" {}
  336. } {}
  337. test while-4.8 {while (not compiled): missing command body} {
  338.     set i 0
  339.     set z while
  340.     catch {$z {$i < 5} } msg
  341.     set msg
  342. } {wrong # args: should be "while test command"}
  343. test while-4.9 {while (not compiled): error compiling command body} {
  344.     set i 0
  345.     set z while
  346.     catch {$z {$i < 5} {set}} msg
  347.     set errorInfo
  348. } {wrong # args: should be "set varName ?newValue?"
  349.     while compiling
  350. "set"
  351.     ("while" body line 1)
  352.     invoked from within
  353. "$z {$i < 5} {set}"}
  354. test while-4.10 {while (not compiled): simple command body} {
  355.     set a {}
  356.     set i 1
  357.     set z while
  358.     $z {$i<6} {
  359. if $i==4 break
  360. set a [concat $a $i]
  361.         incr i
  362.     }
  363.     set a
  364. } {1 2 3}
  365. test while-4.11 {while (not compiled): command body in quotes} {
  366.     set a {}
  367.     set i 1
  368.     set z while
  369.     $z {$i<6} "append a x; incr i"
  370.     set a
  371. } {xxxxx}
  372. test while-4.12 {while (not compiled): computed command body} {
  373.     set z while
  374.     catch {unset x1}
  375.     catch {unset bb}
  376.     catch {unset x2}
  377.     set x1 {append a x1; }
  378.     set bb {break}
  379.     set x2 {; append a x2; incr i}
  380.     set a {}
  381.     set i 1
  382.     $z {$i<6} $x1$bb$x2
  383.     set a
  384. } {x1}
  385. test while-4.13 {while (not compiled): long command body} {
  386.     set a {}
  387.     set z while
  388.     set i 1
  389.     $z {$i<6} {
  390. if $i==4 break
  391. if $i>5 continue
  392. if {$i>6 && $tcl_platform(machine)=="xxx"} {
  393.     catch {set a $a} msg
  394.     catch {incr i 5} msg
  395.     catch {incr i -5} msg
  396. }
  397. if {$i>6 && $tcl_platform(machine)=="xxx"} {
  398.     catch {set a $a} msg
  399.     catch {incr i 5} msg
  400.     catch {incr i -5} msg
  401. }
  402. if {$i>6 && $tcl_platform(machine)=="xxx"} {
  403.     catch {set a $a} msg
  404.     catch {incr i 5} msg
  405.     catch {incr i -5} msg
  406. }
  407. if {$i>6 && $tcl_platform(machine)=="xxx"} {
  408.     catch {set a $a} msg
  409.     catch {incr i 5} msg
  410.     catch {incr i -5} msg
  411. }
  412. if {$i>6 && $tcl_platform(machine)=="xxx"} {
  413.     catch {set a $a} msg
  414.     catch {incr i 5} msg
  415.     catch {incr i -5} msg
  416. }
  417. set a [concat $a $i]
  418.         incr i
  419.     }
  420.     set a
  421. } {1 2 3}
  422. test while-4.14 {while (not compiled): while command result} {
  423.     set i 0
  424.     set z while
  425.     set a [$z {$i < 5} {incr i}]
  426.     set a
  427. } {}
  428. test while-4.15 {while (not compiled): while command result} {
  429.     set i 0
  430.     set z while
  431.     set a [$z {$i < 5} {if $i==3 break; incr i}]
  432.     set a
  433. } {}
  434. # Check "break" with computed command names.
  435. test while-5.1 {break and computed command names} {
  436.     set i 0
  437.     set z break
  438.     while 1 {
  439.         if {$i > 10} $z
  440.         incr i
  441.     }
  442.     set i
  443. } 11
  444. test while-5.2 {break tests with computed command names} {
  445.     set a {}
  446.     set i 1
  447.     set z break
  448.     while {$i <= 4} {
  449. if {$i == 3} $z
  450. set a [concat $a $i]
  451.         incr i
  452.     }
  453.     set a
  454. } {1 2}
  455. test while-5.3 {break tests, nested loops with computed command names} {
  456.     set msg {}
  457.     set i 1
  458.     set z break
  459.     while {$i <= 4} {
  460.         set a 1
  461. while {$a <= 2} {
  462.             if {$i>=2 && $a>=2} $z
  463.             set msg [concat $msg "$i.$a"]
  464.             incr a
  465.         }
  466.         incr i
  467.     }
  468.     set msg
  469. } {1.1 1.2 2.1 3.1 4.1}
  470. test while-5.4 {break tests, long command body with computed command names} {
  471.     set a {}
  472.     set i 1
  473.     set z break
  474.     while {$i<6} {
  475. if $i==2 {incr i; continue}
  476. if $i==5 $z
  477. if $i>5 continue
  478. if {$i>6 && $tcl_platform(machine)=="xxx"} {
  479.     catch {set a $a} msg
  480.     catch {incr i 5} msg
  481.     catch {incr i -5} msg
  482. }
  483. if {$i>6 && $tcl_platform(machine)=="xxx"} {
  484.     catch {set a $a} msg
  485.     catch {incr i 5} msg
  486.     catch {incr i -5} msg
  487. }
  488. if {$i>6 && $tcl_platform(machine)=="xxx"} {
  489.     catch {set a $a} msg
  490.     catch {incr i 5} msg
  491.     catch {incr i -5} msg
  492. }
  493. if $i==4 $z
  494. if {$i>6 && $tcl_platform(machine)=="xxx"} {
  495.     catch {set a $a} msg
  496.     catch {incr i 5} msg
  497.     catch {incr i -5} msg
  498. }
  499. if {$i>6 && $tcl_platform(machine)=="xxx"} {
  500.     catch {set a $a} msg
  501.     catch {incr i 5} msg
  502.     catch {incr i -5} msg
  503. }
  504. set a [concat $a $i]
  505.         incr i
  506.     }
  507.     set a
  508. } {1 3}
  509. # Check "continue" with computed command names.
  510. test while-6.1 {continue and computed command names} {
  511.     set i 0
  512.     set z continue
  513.     while 1 {
  514.         incr i
  515.         if {$i < 10} $z
  516.         break
  517.     }
  518.     set i
  519. } 10
  520. test while-6.2 {continue tests} {
  521.     set a {}
  522.     set i 1
  523.     set z continue
  524.     while {$i <= 4} {
  525.         incr i
  526. if {$i == 3} $z
  527. set a [concat $a $i]
  528.     }
  529.     set a
  530. } {2 4 5}
  531. test while-6.3 {continue tests with computed command names} {
  532.     set a {}
  533.     set i 1
  534.     set z continue
  535.     while {$i <= 4} {
  536.         incr i
  537. if {$i != 2} $z
  538. set a [concat $a $i]
  539.     }
  540.     set a
  541. } {2}
  542. test while-6.4 {continue tests, nested loops with computed command names} {
  543.     set msg {}
  544.     set i 1
  545.     set z continue
  546.     while {$i <= 4} {
  547.         incr i
  548.         set a 1
  549. while {$a <= 2} {
  550.             incr a
  551.             if {$i>=3 && $a>=3} $z
  552.             set msg [concat $msg "$i.$a"]
  553.         }
  554.     }
  555.     set msg
  556. } {2.2 2.3 3.2 4.2 5.2}
  557. test while-6.5 {continue tests, long command body with computed command names} {
  558.     set a {}
  559.     set i 1
  560.     set z continue
  561.     while {$i<6} {
  562. if $i==2 {incr i; continue}
  563. if $i==4 break
  564. if $i>5 $z
  565. if {$i>6 && $tcl_platform(machine)=="xxx"} {
  566.     catch {set a $a} msg
  567.     catch {incr i 5} msg
  568.     catch {incr i -5} msg
  569. }
  570. if {$i>6 && $tcl_platform(machine)=="xxx"} {
  571.     catch {set a $a} msg
  572.     catch {incr i 5} msg
  573.     catch {incr i -5} msg
  574. }
  575. if {$i>6 && $tcl_platform(machine)=="xxx"} {
  576.     catch {set a $a} msg
  577.     catch {incr i 5} msg
  578.     catch {incr i -5} msg
  579. }
  580. if {$i>6 && $tcl_platform(machine)=="xxx"} {
  581.     catch {set a $a} msg
  582.     catch {incr i 5} msg
  583.     catch {incr i -5} msg
  584. }
  585. if {$i>6 && $tcl_platform(machine)=="xxx"} {
  586.     catch {set a $a} msg
  587.     catch {incr i 5} msg
  588.     catch {incr i -5} msg
  589. }
  590. set a [concat $a $i]
  591.         incr i
  592.     }
  593.     set a
  594. } {1 3}
  595. # Test for incorrect "double evaluation" semantics
  596. test while-7.1 {delayed substitution of body} {
  597.     set i 0
  598.     while {[incr i] < 10} "
  599.        set result $i
  600.     "
  601.     proc p {} {
  602. set i 0
  603. while {[incr i] < 10} "
  604.     set result $i
  605. "
  606. set result
  607.     }
  608.     append result [p]
  609. } {00}
  610. # cleanup
  611. ::tcltest::cleanupTests
  612. return