4 echo "Format: 'expected actual'"
28 echo 1 $(( iv == jv ))
29 echo 0 $(( iv != $jv ))
31 echo 0 $(( $iv > $jv ))
32 echo 1 $(( iv <= $jv ))
33 echo 1 $(( $iv >= jv ))
43 echo 131072 $(( iv <<= 16 ))
44 echo 29 $(( iv %= 33 ))
46 echo 33 $(( 33 & 55 ))
47 echo 49 $(( 33 | 17 ))
49 echo 1 $(( iv && $jv ))
50 echo 1 $(( $iv || jv ))
57 echo 1 $(( $jv || 0 ))
60 echo 1 $(( $jv || 1 ))
68 echo 1 $(( jv /= iv ))
69 echo 256 $(( jv <<= 8 ))
70 echo 16 $(( jv >>= 4 ))
72 echo 62 $(( iv |= 4 ))
75 echo 29 $(( iv += (jv + 9)))
76 echo 5 $(( (iv + 4) % 7 ))
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))
90 # check that the unevaluated part of the ternary operator does not do
91 # evaluation or assignment
94 #ash# declare -i i=1 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
104 #ash# declare -i i=1 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
112 # check precedence of assignment vs. conditional operator
116 #ashnote# bash reports error but continues, ash aborts - using subshell to 'emulate' bash:
117 ( y=$((1 ? 20 : x+=2)) )
119 # check precedence of assignment vs. conditional operator
122 # ash says "line NNN: syntax error: 0 ? x+=2 : 20"
123 #ash# echo 20 $((0 ? x+=2 : 20))
125 # associativity of assignment-operator operator
126 #ash# declare -i i=1 j=2 k=3
130 echo 6 $((i += j += k))
134 echo 263 $(( 0x100 | 007 ))
136 #ash# echo 255 $(( 16#ff ))
137 #ash# echo 127 $(( 16#FF/2 ))
138 #ash# echo 36 $(( 8#44 ))
140 echo 40 $(( 8 ^ 32 ))
143 #ash# echo 10 $(( 16#a ))
144 #ash# echo 10 $(( 32#a ))
145 #ash# echo 10 $(( 56#a ))
146 #ash# echo 10 $(( 64#a ))
148 #ash# echo 10 $(( 16#A ))
149 #ash# echo 10 $(( 32#A ))
150 #ash# echo 36 $(( 56#A ))
151 #ash# echo 36 $(( 64#A ))
153 #ash# echo 62 $(( 64#@ ))
154 #ash# echo 63 $(( 64#_ ))
156 #ash# # weird bases (error)
157 #ash# echo $(( 3425#56 ))
159 #ash# # missing number after base
160 #ash# echo 0 $(( 2# ))
162 # these should generate errors
163 ( echo $(( 7 = 43 )) )
164 #ash# echo $(( 2#44 ))
165 ( echo $(( 44 / 0 )) )
167 ( echo $(( jv += \$iv )) )
168 ( let 'rv = 7 + (43 * 6' )
175 ((echo abc; echo def;); echo ghi)
177 #ash# if (((4+4) + (4 + 7))); then
181 #ash# (()) # make sure the null expression works OK
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 $?
188 # test pushing and popping the expression stack
191 ( echo A $(( ( 4 + A ) + 4 )) )
193 echo 16 $(( ( 4 + A ) + 4 ))
195 # badly-formed conditional expressions
196 ( echo $(( 4 ? : $A )) )
197 ( echo $(( 1 ? 20 )) )
198 ( echo $(( 4 ? 20 : )) )
200 # precedence and short-circuit evaluation
205 ( echo $(( 0 && B=42 )); echo 9 $B )
208 ( echo $(( 1 || B=88 )); echo 9 $B )
210 # ash mistakenly evaluates B=... below
211 #ash# echo 0 $(( 0 && (B=42) ))
213 #ash# echo 0 $(( (${$} - $$) && (B=42) ))
215 #ash# echo 1 $(( 1 || (B=88) ))
219 # until command with (( )) command
223 #ash# until (( x == 4 ))
233 echo 32767 $(( 2**15 - 1))
234 echo 32768 $(( 2**(16-1)))
235 echo 131072 $(( 2**16*2 ))
236 echo 2147483647 $(( 2**31-1))
239 # {pre,post}-{inc,dec}rement and associated errors
255 # bash 3.2 apparently thinks that ++7 is 7
256 #ash# echo 7 $(( ++7 ))
259 ( echo $(( --x=7 )) )
260 ( echo $(( ++x=7 )) )
262 ( echo $(( x++=7 )) )
263 ( echo $(( x--=7 )) )
270 # bash 3.2 apparently thinks that ++7 is 7
271 #ash# echo $(( ++7 ))
272 #ash# echo $(( --7 ))
274 ${THIS_SH} ./arith1.sub
275 ${THIS_SH} ./arith2.sub
280 #ash# (( x=8 , y=12 ))
285 #ash# # should be an error
296 #ash# echo $(( 8#$(printf "%o\n" $n) ))
298 #ash# echo $(( 16#$(printf "%x\n" $n) ))
299 #ash# echo $(( 16#$(printf "%X\n" $n) ))
301 # causes longjmp botches through bash-2.05b