Imported from ../bash-2.0.tar.gz.
[platform/upstream/bash.git] / tests / arith.tests
1 declare -i iv jv
2
3 iv=$(( 3 + 5 * 32 ))
4 echo $iv
5 iv=iv+3
6 echo $iv
7 iv=2
8 jv=iv
9
10 let "jv *= 2"
11 echo $jv
12 jv=$(( $jv << 2 ))
13 echo $jv
14
15 let jv="$jv / 2"
16 echo $jv
17 jv="jv >> 2"
18 echo $jv
19
20 iv=$((iv+ $jv))
21 echo $iv
22 echo $((iv -= jv))
23 echo $iv
24 echo $(( iv == jv ))
25 echo $(( iv != $jv ))
26 echo $(( iv < jv ))
27 echo $(( $iv > $jv ))
28 echo $(( iv <= $jv ))
29 echo $(( $iv >= jv ))
30
31 echo $jv
32 echo $(( ~$jv ))
33 echo $(( ~1 ))
34 echo $(( ! 0 ))
35
36 echo $(( jv % 2 ))
37 echo $(( $iv % 4 ))
38
39 echo $(( iv <<= 16 ))
40 echo $(( iv %= 33 ))
41
42 echo $(( 33 & 55 ))
43 echo $(( 33 | 17 ))
44
45 echo $(( iv && $jv ))
46 echo $(( $iv || jv ))
47
48 echo $(( iv && 0 ))
49 echo $(( iv & 0 ))
50 echo $(( iv && 1 ))
51 echo $(( iv & 1 ))
52
53 echo $(( $jv || 0 ))
54 echo $(( jv | 0 ))
55 echo $(( jv | 1 ))
56 echo $(( $jv || 1 ))
57
58 let 'iv *= jv'
59 echo $iv
60 echo $jv
61 let "jv += $iv"
62 echo $jv
63
64 echo $(( jv /= iv ))
65 echo $(( jv <<= 8 ))
66 echo $(( jv >>= 4 ))
67
68 echo $(( iv |= 4 ))
69 echo $(( iv &= 4 ))
70
71 echo $(( iv += (jv + 9)))
72 echo $(( (iv + 4) % 7 ))
73
74 # unary plus, minus
75 echo $(( +4 - 8 ))
76 echo $(( -4 + 8 ))
77
78 # conditional expressions
79 echo $(( 4<5 ? 1 : 32))
80 echo $(( 4>5 ? 1 : 32))
81 echo $(( 4>(2+3) ? 1 : 32))
82 echo $(( 4<(2+3) ? 1 : 32))
83 echo $(( (2+2)<(2+3) ? 1 : 32))
84 echo $(( (2+2)>(2+3) ? 1 : 32))
85
86 # check that the unevaluated part of the ternary operator does not do
87 # evaluation or assignment
88 x=i+=2
89 y=j+=2
90 declare -i i=1 j=1
91 echo $((1 ? 20 : (x+=2)))
92 echo $i,$x
93 echo $((0 ? (y+=2) : 30))
94 echo $j,$y
95
96 x=i+=2
97 y=j+=2
98 declare -i i=1 j=1
99 echo $((1 ? 20 : (x+=2)))
100 echo $i,$x
101 echo $((0 ? (y+=2) : 30))
102 echo $i,$y
103
104 # check precedence of assignment vs. conditional operator
105 # should be an error
106 declare -i x=2
107 y=$((1 ? 20 : x+=2))
108
109 # check precedence of assignment vs. conditional operator
110 declare -i x=2
111 echo $((0 ? x+=2 : 20))
112
113 # associativity of assignment-operator operator
114 declare -i i=1 j=2 k=3
115 echo $((i += j += k))
116 echo $i,$j,$k
117
118 # octal, hex
119 echo $(( 0x100 | 007 ))
120 echo $(( 0xff ))
121 echo $(( 16#ff ))
122 echo $(( 16#FF/2 ))
123 echo $(( 8#44 ))
124
125 echo $(( 8 ^ 32 ))
126
127 # other bases
128 echo $(( 16#a ))
129 echo $(( 32#a ))
130 echo $(( 56#a ))
131 echo $(( 64#a ))
132
133 echo $(( 16#A ))
134 echo $(( 32#A ))
135 echo $(( 56#A ))
136 echo $(( 64#A ))
137
138 echo $(( 64#_ ))
139 echo $(( 64#@ ))
140
141 # weird bases
142 echo $(( 3425#56 ))
143
144 # missing number after base
145 echo $(( 2# ))
146
147 # these should generate errors
148 echo $(( 7 = 43 ))
149 echo $(( 2#44 ))
150 echo $(( 44 / 0 ))
151 let 'jv += $iv'
152 echo $(( jv += \$iv ))
153 let 'rv = 7 + (43 * 6'
154
155 # more errors
156 declare -i i
157 i=0#4
158 i=2#110#11