26754: tweak zgetdir() and test for realpath()
[zsh.git] / Test / A07control.ztst
blobb9b89b58805c7c0fc3405759f1b61921ff22eab9
1 # Test control commands for loops and functions.
3 %test
5   fn3() { return $1; print Error }
6   fn2() { fn3 $1 }
7   fn() {
8     print start $1
9     fn2 $1
10     return
11     print Error
12   }
13   for val in -1 0 1 255; do
14     fn $val; print $?
15   done
16 0:Passing of return values back through functions
17 >start -1
18 >-1
19 >start 0
21 >start 1
23 >start 255
24 >255
26   fn() {
27     continue
28   }
29   fn
30 1:continue outside loop
31 ?fn:continue:1 not in while, until, select, or repeat loop
33   for outer in 0 1 2 3; do
34     print outer $outer
35     for inner in 0 1 2 3; do
36       print inner $inner
37       continue $(( (outer & 1) ? 2 : 1 ))
38       print error
39     done
40     print outer end
41   done
42 0:continue with valid argument
43 >outer 0
44 >inner 0
45 >inner 1
46 >inner 2
47 >inner 3
48 >outer end
49 >outer 1
50 >inner 0
51 >outer 2
52 >inner 0
53 >inner 1
54 >inner 2
55 >inner 3
56 >outer end
57 >outer 3
58 >inner 0
60   for outer in 0 1; do
61     continue 0
62     print -- $outer got here, status $?
63   done
64 1:continue error case 0
65 ?(eval):continue:2: argument is not positive: 0
67   for outer in 0 1; do
68     continue -1
69     print -- $outer got here, status $?
70   done
71 1:continue error case -1
72 ?(eval):continue:2: argument is not positive: -1
74   fn() {
75     break
76   }
77   for outer in 0 1; do
78     print $outer
79     fn
80   done
81 0:break from within function (this is a feature, I disovered)
84   for outer in 0 1 2 3; do
85     print outer $outer
86     for inner in 0 1 2 3; do
87       print inner $inner
88       break $(( (outer & 1) ? 2 : 1 ))
89       print error
90     done
91     print outer end
92   done
93 0:break with valid argument
94 >outer 0
95 >inner 0
96 >outer end
97 >outer 1
98 >inner 0
100   for outer in 0 1; do
101     break 0
102     print -- $outer got here, status $?
103   done
104 1:break error case 0
105 ?(eval):break:2: argument is not positive: 0
107   for outer in 0 1; do
108     break -1
109     print -- $outer got here, status $?
110   done
111 1:break error case -1
112 ?(eval):break:2: argument is not positive: -1