diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2009-04-02 20:17:49 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2009-04-02 20:17:49 +0000 |
commit | b7aaae9052025426b669a0edeec1da5997fea8be (patch) | |
tree | 062eff7de09b9307a57260c47571888ed3f598b7 /shell/hush_test/hush-arith | |
parent | 7a79afa3cab4d35f6c042a1038554948ebe9b2e1 (diff) | |
download | busybox-w32-b7aaae9052025426b669a0edeec1da5997fea8be.tar.gz busybox-w32-b7aaae9052025426b669a0edeec1da5997fea8be.tar.bz2 busybox-w32-b7aaae9052025426b669a0edeec1da5997fea8be.zip |
hush: rename ->o_quote to ->o_escape
hush_test/hush-arith/*: new tests for arithmetic evaluation
Diffstat (limited to 'shell/hush_test/hush-arith')
-rw-r--r-- | shell/hush_test/hush-arith/arith.right | 138 | ||||
-rwxr-xr-x | shell/hush_test/hush-arith/arith.tests | 302 | ||||
-rwxr-xr-x | shell/hush_test/hush-arith/arith1.sub | 40 | ||||
-rwxr-xr-x | shell/hush_test/hush-arith/arith2.sub | 57 |
4 files changed, 537 insertions, 0 deletions
diff --git a/shell/hush_test/hush-arith/arith.right b/shell/hush_test/hush-arith/arith.right new file mode 100644 index 000000000..a35fe893f --- /dev/null +++ b/shell/hush_test/hush-arith/arith.right | |||
@@ -0,0 +1,138 @@ | |||
1 | Format: 'expected actual' | ||
2 | 163 163 | ||
3 | 4 4 | ||
4 | 16 16 | ||
5 | 8 8 | ||
6 | 2 2 | ||
7 | 4 4 | ||
8 | 2 2 | ||
9 | 2 2 | ||
10 | 1 1 | ||
11 | 0 0 | ||
12 | 0 0 | ||
13 | 0 0 | ||
14 | 1 1 | ||
15 | 1 1 | ||
16 | 2 2 | ||
17 | -3 -3 | ||
18 | -2 -2 | ||
19 | 1 1 | ||
20 | 0 0 | ||
21 | 2 2 | ||
22 | 131072 131072 | ||
23 | 29 29 | ||
24 | 33 33 | ||
25 | 49 49 | ||
26 | 1 1 | ||
27 | 1 1 | ||
28 | 0 0 | ||
29 | 0 0 | ||
30 | 1 1 | ||
31 | 1 1 | ||
32 | 1 1 | ||
33 | 2 2 | ||
34 | 3 3 | ||
35 | 1 1 | ||
36 | 58 58 | ||
37 | 2 2 | ||
38 | 60 60 | ||
39 | 1 1 | ||
40 | 256 256 | ||
41 | 16 16 | ||
42 | 62 62 | ||
43 | 4 4 | ||
44 | 29 29 | ||
45 | 5 5 | ||
46 | -4 -4 | ||
47 | 4 4 | ||
48 | 1 1 | ||
49 | 32 32 | ||
50 | 32 32 | ||
51 | 1 1 | ||
52 | 1 1 | ||
53 | 32 32 | ||
54 | 20 20 | ||
55 | 30 30 | ||
56 | 20 20 | ||
57 | 30 30 | ||
58 | hush: arith: syntax error | ||
59 | 6 6 | ||
60 | 6,5,3 6,5,3 | ||
61 | 263 263 | ||
62 | 255 255 | ||
63 | 40 40 | ||
64 | hush: arith: syntax error | ||
65 | hush: arith: divide by zero | ||
66 | hush: can't exec 'let': No such file or directory | ||
67 | hush: arith: syntax error | ||
68 | hush: can't exec 'let': No such file or directory | ||
69 | abc | ||
70 | def | ||
71 | ghi | ||
72 | hush: arith: syntax error | ||
73 | 16 16 | ||
74 | hush: arith: syntax error | ||
75 | hush: arith: syntax error | ||
76 | hush: arith: syntax error | ||
77 | 9 9 | ||
78 | hush: arith: syntax error | ||
79 | hush: arith: syntax error | ||
80 | 9 9 | ||
81 | 9 9 | ||
82 | 9 9 | ||
83 | 7 7 | ||
84 | 7 | ||
85 | 4 4 | ||
86 | 32767 32767 | ||
87 | 32768 32768 | ||
88 | 131072 131072 | ||
89 | 2147483647 2147483647 | ||
90 | 1 1 | ||
91 | 4 4 | ||
92 | 4 4 | ||
93 | 5 5 | ||
94 | 5 5 | ||
95 | 4 4 | ||
96 | 3 3 | ||
97 | 3 3 | ||
98 | 4 4 | ||
99 | 4 4 | ||
100 | hush: arith: syntax error | ||
101 | hush: arith: syntax error | ||
102 | hush: arith: syntax error | ||
103 | hush: arith: syntax error | ||
104 | hush: arith: syntax error | ||
105 | 4 4 | ||
106 | 7 7 | ||
107 | -7 -7 | ||
108 | hush: arith: syntax error | ||
109 | hush: arith: syntax error | ||
110 | hush: arith: syntax error | ||
111 | hush: arith: syntax error | ||
112 | 6 6 | ||
113 | 3 3 | ||
114 | 7 7 | ||
115 | 4 4 | ||
116 | 0 0 | ||
117 | 3 3 | ||
118 | 7 7 | ||
119 | 2 2 | ||
120 | -2 -2 | ||
121 | 1 1 | ||
122 | hush: arith: syntax error | ||
123 | hush: arith: syntax error | ||
124 | hush: arith: syntax error | ||
125 | hush: arith: syntax error | ||
126 | hush: arith: syntax error | ||
127 | 5 5 | ||
128 | 1 1 | ||
129 | 4 4 | ||
130 | 0 0 | ||
131 | hush: arith: syntax error | ||
132 | hush: arith: syntax error | ||
133 | 8 12 | ||
134 | hush: arith: syntax error | ||
135 | 42 | ||
136 | 42 | ||
137 | 42 | ||
138 | hush: can't exec 'a[b[c]d]=e': No such file or directory | ||
diff --git a/shell/hush_test/hush-arith/arith.tests b/shell/hush_test/hush-arith/arith.tests new file mode 100755 index 000000000..57e66e888 --- /dev/null +++ b/shell/hush_test/hush-arith/arith.tests | |||
@@ -0,0 +1,302 @@ | |||
1 | #ash# set +o posix | ||
2 | #ash# declare -i iv jv | ||
3 | |||
4 | echo "Format: 'expected actual'" | ||
5 | |||
6 | iv=$(( 3 + 5 * 32 )) | ||
7 | echo 163 $iv | ||
8 | #ash# iv=iv+3 | ||
9 | #ash# echo 166 $iv | ||
10 | iv=2 | ||
11 | jv=iv | ||
12 | |||
13 | : $((jv *= 2)) ##hush## let "jv *= 2" | ||
14 | echo 4 $jv | ||
15 | jv=$(( $jv << 2 )) | ||
16 | echo 16 $jv | ||
17 | |||
18 | : $((jv=$jv / 2)) ##hush## let jv="$jv / 2" | ||
19 | echo 8 $jv | ||
20 | #ash# jv="jv >> 2" | ||
21 | : $((jv=jv >> 2)) ##hush## let jv="jv >> 2" | ||
22 | echo 2 $jv | ||
23 | |||
24 | iv=$((iv+ $jv)) | ||
25 | echo 4 $iv | ||
26 | echo 2 $((iv -= jv)) | ||
27 | echo 2 $iv | ||
28 | echo 1 $(( iv == jv )) | ||
29 | echo 0 $(( iv != $jv )) | ||
30 | echo 0 $(( iv < jv )) | ||
31 | echo 0 $(( $iv > $jv )) | ||
32 | echo 1 $(( iv <= $jv )) | ||
33 | echo 1 $(( $iv >= jv )) | ||
34 | |||
35 | echo 2 $jv | ||
36 | echo -3 $(( ~$jv )) | ||
37 | echo -2 $(( ~1 )) | ||
38 | echo 1 $(( ! 0 )) | ||
39 | |||
40 | echo 0 $(( jv % 2 )) | ||
41 | echo 2 $(( $iv % 4 )) | ||
42 | |||
43 | echo 131072 $(( iv <<= 16 )) | ||
44 | echo 29 $(( iv %= 33 )) | ||
45 | |||
46 | echo 33 $(( 33 & 55 )) | ||
47 | echo 49 $(( 33 | 17 )) | ||
48 | |||
49 | echo 1 $(( iv && $jv )) | ||
50 | echo 1 $(( $iv || jv )) | ||
51 | |||
52 | echo 0 $(( iv && 0 )) | ||
53 | echo 0 $(( iv & 0 )) | ||
54 | echo 1 $(( iv && 1 )) | ||
55 | echo 1 $(( iv & 1 )) | ||
56 | |||
57 | echo 1 $(( $jv || 0 )) | ||
58 | echo 2 $(( jv | 0 )) | ||
59 | echo 3 $(( jv | 1 )) | ||
60 | echo 1 $(( $jv || 1 )) | ||
61 | |||
62 | : $((iv *= jv)) ##hush## let 'iv *= jv' | ||
63 | echo 58 $iv | ||
64 | echo 2 $jv | ||
65 | : $((jv += $iv)) ##hush## let "jv += $iv" | ||
66 | echo 60 $jv | ||
67 | |||
68 | echo 1 $(( jv /= iv )) | ||
69 | echo 256 $(( jv <<= 8 )) | ||
70 | echo 16 $(( jv >>= 4 )) | ||
71 | |||
72 | echo 62 $(( iv |= 4 )) | ||
73 | echo 4 $(( iv &= 4 )) | ||
74 | |||
75 | echo 29 $(( iv += (jv + 9))) | ||
76 | echo 5 $(( (iv + 4) % 7 )) | ||
77 | |||
78 | # unary plus, minus | ||
79 | echo -4 $(( +4 - 8 )) | ||
80 | echo 4 $(( -4 + 8 )) | ||
81 | |||
82 | # conditional expressions | ||
83 | echo 1 $(( 4<5 ? 1 : 32)) | ||
84 | echo 32 $(( 4>5 ? 1 : 32)) | ||
85 | echo 32 $(( 4>(2+3) ? 1 : 32)) | ||
86 | echo 1 $(( 4<(2+3) ? 1 : 32)) | ||
87 | echo 1 $(( (2+2)<(2+3) ? 1 : 32)) | ||
88 | echo 32 $(( (2+2)>(2+3) ? 1 : 32)) | ||
89 | |||
90 | # check that the unevaluated part of the ternary operator does not do | ||
91 | # evaluation or assignment | ||
92 | x=i+=2 | ||
93 | y=j+=2 | ||
94 | #ash# declare -i i=1 j=1 | ||
95 | i=1 | ||
96 | j=1 | ||
97 | echo 20 $((1 ? 20 : (x+=2))) | ||
98 | #ash# echo $i,$x # ash mishandles this | ||
99 | echo 30 $((0 ? (y+=2) : 30)) | ||
100 | #ash# echo $j,$y # ash mishandles this | ||
101 | |||
102 | x=i+=2 | ||
103 | y=j+=2 | ||
104 | #ash# declare -i i=1 j=1 | ||
105 | i=1 | ||
106 | j=1 | ||
107 | echo 20 $((1 ? 20 : (x+=2))) | ||
108 | #ash# echo $i,$x # ash mishandles this | ||
109 | echo 30 $((0 ? (y+=2) : 30)) | ||
110 | #ash# echo $i,$y # ash mishandles this | ||
111 | |||
112 | # check precedence of assignment vs. conditional operator | ||
113 | # should be an error | ||
114 | #ash# declare -i x=2 | ||
115 | x=2 | ||
116 | #ashnote# bash reports error but continues, ash aborts - using subshell to 'emulate' bash: | ||
117 | ( y=$((1 ? 20 : x+=2)) ) | ||
118 | |||
119 | # check precedence of assignment vs. conditional operator | ||
120 | #ash# declare -i x=2 | ||
121 | x=2 | ||
122 | # ash says "line NNN: syntax error: 0 ? x+=2 : 20" | ||
123 | #ash# echo 20 $((0 ? x+=2 : 20)) | ||
124 | |||
125 | # associativity of assignment-operator operator | ||
126 | #ash# declare -i i=1 j=2 k=3 | ||
127 | i=1 | ||
128 | j=2 | ||
129 | k=3 | ||
130 | echo 6 $((i += j += k)) | ||
131 | echo 6,5,3 $i,$j,$k | ||
132 | |||
133 | # octal, hex | ||
134 | echo 263 $(( 0x100 | 007 )) | ||
135 | echo 255 $(( 0xff )) | ||
136 | #ash# echo 255 $(( 16#ff )) | ||
137 | #ash# echo 127 $(( 16#FF/2 )) | ||
138 | #ash# echo 36 $(( 8#44 )) | ||
139 | |||
140 | echo 40 $(( 8 ^ 32 )) | ||
141 | |||
142 | #ash# # other bases | ||
143 | #ash# echo 10 $(( 16#a )) | ||
144 | #ash# echo 10 $(( 32#a )) | ||
145 | #ash# echo 10 $(( 56#a )) | ||
146 | #ash# echo 10 $(( 64#a )) | ||
147 | #ash# | ||
148 | #ash# echo 10 $(( 16#A )) | ||
149 | #ash# echo 10 $(( 32#A )) | ||
150 | #ash# echo 36 $(( 56#A )) | ||
151 | #ash# echo 36 $(( 64#A )) | ||
152 | #ash# | ||
153 | #ash# echo 62 $(( 64#@ )) | ||
154 | #ash# echo 63 $(( 64#_ )) | ||
155 | |||
156 | #ash# # weird bases (error) | ||
157 | #ash# echo $(( 3425#56 )) | ||
158 | |||
159 | #ash# # missing number after base | ||
160 | #ash# echo 0 $(( 2# )) | ||
161 | |||
162 | # these should generate errors | ||
163 | ( echo $(( 7 = 43 )) ) | ||
164 | #ash# echo $(( 2#44 )) | ||
165 | ( echo $(( 44 / 0 )) ) | ||
166 | ( let 'jv += $iv' ) | ||
167 | ( echo $(( jv += \$iv )) ) | ||
168 | ( let 'rv = 7 + (43 * 6' ) | ||
169 | |||
170 | #ash# # more errors | ||
171 | #ash# declare -i i | ||
172 | #ash# i=0#4 | ||
173 | #ash# i=2#110#11 | ||
174 | |||
175 | ((echo abc; echo def;); echo ghi) | ||
176 | |||
177 | #ash# if (((4+4) + (4 + 7))); then | ||
178 | #ash# echo ok | ||
179 | #ash# fi | ||
180 | |||
181 | #ash# (()) # make sure the null expression works OK | ||
182 | |||
183 | #ash# a=(0 2 4 6) | ||
184 | #ash# echo 6 $(( a[1] + a[2] )) | ||
185 | #ash# echo 1 $(( (a[1] + a[2]) == a[3] )) | ||
186 | #ash# (( (a[1] + a[2]) == a[3] )) ; echo 0 $? | ||
187 | |||
188 | # test pushing and popping the expression stack | ||
189 | unset A | ||
190 | A="4 + " | ||
191 | ( echo A $(( ( 4 + A ) + 4 )) ) | ||
192 | A="3 + 5" | ||
193 | echo 16 $(( ( 4 + A ) + 4 )) | ||
194 | |||
195 | # badly-formed conditional expressions | ||
196 | ( echo $(( 4 ? : $A )) ) | ||
197 | ( echo $(( 1 ? 20 )) ) | ||
198 | ( echo $(( 4 ? 20 : )) ) | ||
199 | |||
200 | # precedence and short-circuit evaluation | ||
201 | B=9 | ||
202 | echo 9 $B | ||
203 | |||
204 | # error | ||
205 | ( echo $(( 0 && B=42 )); echo 9 $B ) | ||
206 | |||
207 | # error | ||
208 | ( echo $(( 1 || B=88 )); echo 9 $B ) | ||
209 | |||
210 | # ash mistakenly evaluates B=... below | ||
211 | #ash# echo 0 $(( 0 && (B=42) )) | ||
212 | echo 9 $B | ||
213 | #ash# echo 0 $(( (${$} - $$) && (B=42) )) | ||
214 | echo 9 $B | ||
215 | #ash# echo 1 $(( 1 || (B=88) )) | ||
216 | echo 9 $B | ||
217 | |||
218 | |||
219 | # until command with (( )) command | ||
220 | x=7 | ||
221 | |||
222 | echo 7 $x | ||
223 | #ash# until (( x == 4 )) | ||
224 | until test "$x" = 4 | ||
225 | do | ||
226 | echo $x | ||
227 | x=4 | ||
228 | done | ||
229 | |||
230 | echo 4 $x | ||
231 | |||
232 | # exponentiation | ||
233 | echo 32767 $(( 2**15 - 1)) | ||
234 | echo 32768 $(( 2**(16-1))) | ||
235 | echo 131072 $(( 2**16*2 )) | ||
236 | echo 2147483647 $(( 2**31-1)) | ||
237 | echo 1 $(( 2**0 )) | ||
238 | |||
239 | # {pre,post}-{inc,dec}rement and associated errors | ||
240 | |||
241 | x=4 | ||
242 | |||
243 | echo 4 $x | ||
244 | echo 4 $(( x++ )) | ||
245 | echo 5 $x | ||
246 | echo 5 $(( x-- )) | ||
247 | echo 4 $x | ||
248 | |||
249 | echo 3 $(( --x )) | ||
250 | echo 3 $x | ||
251 | |||
252 | echo 4 $(( ++x )) | ||
253 | echo 4 $x | ||
254 | |||
255 | # bash 3.2 apparently thinks that ++7 is 7 | ||
256 | #ash# echo 7 $(( ++7 )) | ||
257 | ( echo $(( 7-- )) ) | ||
258 | |||
259 | ( echo $(( --x=7 )) ) | ||
260 | ( echo $(( ++x=7 )) ) | ||
261 | |||
262 | ( echo $(( x++=7 )) ) | ||
263 | ( echo $(( x--=7 )) ) | ||
264 | |||
265 | echo 4 $x | ||
266 | |||
267 | echo 7 $(( +7 )) | ||
268 | echo -7 $(( -7 )) | ||
269 | |||
270 | # bash 3.2 apparently thinks that ++7 is 7 | ||
271 | #ash# echo $(( ++7 )) | ||
272 | #ash# echo $(( --7 )) | ||
273 | |||
274 | ${THIS_SH} ./arith1.sub | ||
275 | ${THIS_SH} ./arith2.sub | ||
276 | |||
277 | x=4 | ||
278 | y=7 | ||
279 | |||
280 | #ash# (( x=8 , y=12 )) | ||
281 | x=8 | ||
282 | y=12 | ||
283 | echo $x $y | ||
284 | |||
285 | #ash# # should be an error | ||
286 | #ash# (( x=9 y=41 )) | ||
287 | |||
288 | # These are errors | ||
289 | unset b | ||
290 | ( echo $((a b)) ) | ||
291 | #ash# ((a b)) | ||
292 | |||
293 | n=42 | ||
294 | printf "%d\n" $n | ||
295 | printf "%i\n" $n | ||
296 | #ash# echo $(( 8#$(printf "%o\n" $n) )) | ||
297 | printf "%u\n" $n | ||
298 | #ash# echo $(( 16#$(printf "%x\n" $n) )) | ||
299 | #ash# echo $(( 16#$(printf "%X\n" $n) )) | ||
300 | |||
301 | # causes longjmp botches through bash-2.05b | ||
302 | a[b[c]d]=e | ||
diff --git a/shell/hush_test/hush-arith/arith1.sub b/shell/hush_test/hush-arith/arith1.sub new file mode 100755 index 000000000..80aa99922 --- /dev/null +++ b/shell/hush_test/hush-arith/arith1.sub | |||
@@ -0,0 +1,40 @@ | |||
1 | # test of redone post-increment and post-decrement code | ||
2 | ( echo $(( 4-- )) ) | ||
3 | ( echo $(( 4++ )) ) | ||
4 | ( echo $(( 4 -- )) ) | ||
5 | ( echo $(( 4 ++ )) ) | ||
6 | |||
7 | #ash# (( array[0]++ )) | ||
8 | #ash# echo ${array} | ||
9 | |||
10 | #ash# (( array[0] ++ )) | ||
11 | #ash# echo ${array} | ||
12 | |||
13 | #ash# (( a++ )) | ||
14 | #ash# echo $a | ||
15 | #ash# (( a ++ )) | ||
16 | #ash# echo $a | ||
17 | a=2 | ||
18 | |||
19 | echo 6 $(( a ++ + 4 )) | ||
20 | echo 3 $a | ||
21 | |||
22 | echo 7 $(( a+++4 )) | ||
23 | echo 4 $a | ||
24 | |||
25 | echo 0 $(( a---4 )) | ||
26 | echo 3 $a | ||
27 | |||
28 | echo 7 $(( a -- + 4 )) | ||
29 | echo 2 $a | ||
30 | |||
31 | echo -2 $(( a -- - 4 )) | ||
32 | echo 1 $a | ||
33 | |||
34 | #ash# (( ++ + 7 )) | ||
35 | |||
36 | #ash# (( ++ )) | ||
37 | ( echo $(( +++7 )) ) | ||
38 | # bash 3.2 apparently thinks that ++ +7 is 7 | ||
39 | #ash# echo $(( ++ + 7 )) | ||
40 | #ash# (( -- )) | ||
diff --git a/shell/hush_test/hush-arith/arith2.sub b/shell/hush_test/hush-arith/arith2.sub new file mode 100755 index 000000000..f7e3c9235 --- /dev/null +++ b/shell/hush_test/hush-arith/arith2.sub | |||
@@ -0,0 +1,57 @@ | |||
1 | # bash 3.2 apparently thinks that ++7 is 7 etc | ||
2 | ( echo $(( --7 )) ) | ||
3 | ( echo $(( ++7 )) ) | ||
4 | ( echo $(( -- 7 )) ) | ||
5 | ( echo $(( ++ 7 )) ) | ||
6 | |||
7 | #ash# ((++array[0] )) | ||
8 | #ash# echo 1 $array | ||
9 | #ash# (( ++ array[0] )) | ||
10 | #ash# echo 2 $array | ||
11 | |||
12 | #ash# (( ++a )) | ||
13 | #ash# echo 1 $a | ||
14 | #ash# (( ++ a )) | ||
15 | #ash# echo 2 $a | ||
16 | |||
17 | #ash# (( --a )) | ||
18 | #ash# echo 1 $a | ||
19 | #ash# (( -- a )) | ||
20 | #ash# echo 0 $a | ||
21 | a=0 | ||
22 | |||
23 | echo 5 $(( 4 + ++a )) | ||
24 | echo 1 $a | ||
25 | |||
26 | # ash doesn't handle it right... | ||
27 | #ash# echo 6 $(( 4+++a )) | ||
28 | #ash# echo 2 $a | ||
29 | a=2 | ||
30 | |||
31 | # ash doesn't handle it right... | ||
32 | #ash# echo 3 $(( 4---a )) | ||
33 | #ash# echo 1 $a | ||
34 | a=1 | ||
35 | |||
36 | echo 4 $(( 4 - -- a )) | ||
37 | echo 0 $a | ||
38 | |||
39 | #ash# (( -- )) | ||
40 | # bash 3.2 apparently thinks that ---7 is -7 | ||
41 | #ash# echo $(( ---7 )) | ||
42 | ( echo $(( -- - 7 )) ) | ||
43 | |||
44 | #ash# (( ++ )) | ||
45 | # bash 3.2: 7 | ||
46 | #ash# echo 7 $(( ++7 )) | ||
47 | ( echo $(( ++ + 7 )) ) | ||
48 | |||
49 | # bash 3.2: -7 | ||
50 | #ash# echo -7 $(( ++-7 )) | ||
51 | # bash 3.2: -7 | ||
52 | #ash# echo -7 $(( ++ - 7 )) | ||
53 | |||
54 | # bash 3.2: 7 | ||
55 | #ash# echo 7 $(( +--7 )) | ||
56 | # bash 3.2: 7 | ||
57 | #ash# echo 7 $(( -- + 7 )) | ||