1 #### Augmented assignment doesn't work on List
2
3 # I suppose the logic is that string and array concat is ++
4 #
5 # I wonder if a ++= operator makes sense?
6
7 shopt -s parse_at simple_word_eval
8 var x = :| a 'b c' |
9 argv.py @x
10
11 setvar x += :| d e | # fatal error
12 argv.py @x
13 ## status: 3
14 ## STDOUT:
15 ['a', 'b c']
16 ## END
17
18 #### Augmented assignment respects command_sub_errexit
19
20
21 var x = '42'
22 setvar x += $(echo 3)
23 echo x=$x
24
25 setvar x += $(echo 3; false)
26 echo x=$x
27
28 ## status: 1
29 ## STDOUT:
30 x=45
31 ## END
32
33
34 #### Augmented assignment with integers
35 var x = 1 + 2 * 3
36 echo x=$x
37
38 setvar x += 4 * 1
39 echo x=$x
40 ## STDOUT:
41 x=7
42 x=11
43 ## END
44
45 #### Augmented assignment on string changes to Int Float
46
47 var x = '42'
48 pp test_ (x)
49
50 setvar x += 4 * 1
51 pp test_ (x)
52
53 setvar x += '9'
54 pp test_ (x)
55
56 setvar x = '42'
57 setvar x /= 4
58 pp test_ (x)
59
60 ## STDOUT:
61 (Str) "42"
62 (Int) 46
63 (Int) 55
64 (Float) 10.5
65 ## END
66
67 #### Augmented assignment with floats
68
69 var x = 42
70
71 setvar x += 1.5
72 echo $x
73
74 setvar x += '1.5'
75 echo $x
76
77 setvar x += '3'
78 echo $x
79 ## STDOUT:
80 43.5
81 45.0
82 48.0
83 ## END
84
85 #### Int/Float augmented += -= *= /=
86
87 var x = 0
88
89 setvar x = 10
90 setvar x -= 3
91 echo x=$x
92
93 setvar x = 10
94 setvar x *= 3
95 echo x=$x
96
97 var x = 0
98 setvar x = 10
99 setvar x /= 2
100 echo x=$x
101
102 ## STDOUT:
103 x=7
104 x=30
105 x=5.0
106 ## END
107
108 #### Int Augmented //= %= **= and bitwise ops
109
110 var x = 0
111
112 setvar x = 10
113 setvar x //= 3
114 echo x=$x
115
116 setvar x = 10
117 setvar x %= 3
118 echo x=$x
119
120 setvar x = 10
121 setvar x **= 3
122 echo x=$x
123
124 echo
125 echo bitwise
126
127 setvar x = 0b1111
128 setvar x &= 0b0101
129 echo x=$x
130
131 setvar x = 0b1000
132 setvar x |= 0b0111
133 echo x=$x
134
135 setvar x = 0b1010
136 setvar x ^= 0b1001
137 echo x=$x
138
139 echo
140 echo shift
141
142 setvar x = 0b1000
143 setvar x <<= 1
144 echo x=$x
145
146 setvar x = 0b1000
147 setvar x >>= 1
148 echo x=$x
149
150 ## STDOUT:
151 x=3
152 x=1
153 x=1000
154
155 bitwise
156 x=5
157 x=15
158 x=3
159
160 shift
161 x=16
162 x=4
163 ## END
164
165 #### Augmented assignment of Dict
166
167 var d = {x: 42}
168
169 setvar d['x'] += 1.5
170 echo $[d.x]
171
172 setvar d.x += '1.5'
173 echo $[d.x]
174
175 setvar d.x += '3'
176 echo $[d.x]
177
178 ## STDOUT:
179 43.5
180 45.0
181 48.0
182 ## END
183
184 #### Augmented assignment of List
185
186 shopt -s parse_at
187
188 var mylist = :| 32 42 |
189
190 setvar mylist[0] -= 1
191 echo @mylist
192
193 setvar mylist[1] //= 2
194 echo @mylist
195
196 setvar mylist[1] /= 2
197 echo @mylist
198
199
200 ## STDOUT:
201 31 42
202 31 21
203 31 10.5
204 ## END
205
206 #### Dict with nonexistent key (bug fix)
207
208 var d = {x: 42}
209
210 setvar d.x += 1
211 setglobal d.x += 1
212 echo $[d.x]
213
214 setvar d.missing -= 1
215 setglobal d.missing -= 1
216
217
218 ## status: 3
219 ## STDOUT:
220 44
221 ## END
222
223
224 #### List with nonexistent elemnt
225 var L = [42]
226 setvar L[99] += 1
227
228 ## status: 3
229 ## STDOUT:
230 ## END
231
232
233 #### Augmented assignment doesn't work with multiple LHS
234
235 var x = 3
236 var y = 4
237 setvar x, y += 2
238 echo $x $y
239
240 ## status: 2
241 ## STDOUT:
242 ## END
243
244
245