build: Add ./configure --coverage
[jimtcl.git] / tests / loop.test
blobdf9001b284b5e896661dd41bb0eb636b1dc8fb28
1 source [file dirname [info script]]/testing.tcl
3 # Check "loop" and its use of continue and break.
4 needs cmd loop
6 catch {unset a i}
7 test loop-1.1 {loop tests} {
8     set a {}
9     loop i 1 6 {
10         set a [concat $a $i]
11     }
12     set a
13 } {1 2 3 4 5}
15 test loop-1.2 {loop tests} {
16     set a {}
17     loop i 1 6 {
18         if $i==4 continue
19         set a [concat $a $i]
20     }
21     set a
22 } {1 2 3 5}
24 test loop-1.3 {loop tests} {
25     set a {}
26     loop i 1 6 {
27         if $i==4 break
28         set a [concat $a $i]
29     }
30     set a
31 } {1 2 3}
33 test loop-1.5 {loop errors} {
34     catch {loop 1 2 3} msg
35 } {1}
37 test loop-1.6 {loop errors} {
38     catch {loop 1 2 3 4 5} msg
39 } {1}
41 test loop-1.7 {loop tests} {
42     set a {xyz}
43     loop i 1 6 {
44     }
45     set a
46 } xyz
48 test loop-1.8 {error in loop} {
49     set rc [catch {
50         set a {}
51         loop i 1 6 {
52             lappend a $i
53             if {$i == 3} {
54                 error "stop"
55             }
56         }
57     }]
58     list $a $rc
59 } {{1 2 3} 1}
61 test loop-1.9 {loop incr} {
62     set a {}
63     loop i 0 6 2 {
64         lappend a $i
65     }
66     set a
67 } {0 2 4}
69 test loop-1.10 {no exec infinite loop} {
70     set a {}
71     loop i 0 6 -1 {
72         lappend a $i
73         break
74     }
75     set a
76 } {}
78 test loop-2.1 {loop shimmering tests} {
79     loop i 1 6 {
80     }
81     set i
82 } 6
84 test loop-2.2 {loop shimmering tests} {
85     # Setting the variable inside the loop doesn't
86     # affect the loop or the final variable value
87     loop i 1 6 {
88         set i blah
89     }
90     set i
91 } 6
93 test loop-2.3 {loop shimmering tests} {
94     set a {}
95     loop i 1 6 {
96         lappend a $i
97         set i blah
98         lappend a $i
99     }
100     set a
101 } {1 blah 2 blah 3 blah 4 blah 5 blah}
103 test loop-2.4 {loop shimmering tests} {
104     set i xyz
105     loop i 1 6 {
106     }
107     set i
108 } 6
110 test loop-2.5 {loop shimmering tests} {
111     # Ensure that the string rep of $i is updated
112     set i {1 3}
113     loop i(1) 1 6 {
114     }
115     set i
116 } {1 6}
118 test loop-2.6 {modify loop var} {
119     unset -nocomplain i
120     catch {
121         loop i(1) 1 6 {
122             # this makes it impossible to set the loop var
123             set i blah
124         }
125     }
126 } 1
128 test loop-2.7 {unset loop var} {
129     unset -nocomplain i
130     loop i 1 6 {
131         # var will simply get recreated on each loop
132         unset i
133     }
134     set i
135 } 6
137 test loop-2.8 {modify loop var} {
138     unset -nocomplain i
139     set a {}
140     loop i 1 6 {
141         lappend a $i
142         incr i
143     }
144     set a
145 } {1 2 3 4 5}
147 testreport
148 break
152 testreport