Commit | Line | Data |
---|---|---|
920dae64 AT |
1 | # Augmented assignment test. |
2 | ||
3 | x = 2 | |
4 | x += 1 | |
5 | x *= 2 | |
6 | x **= 2 | |
7 | x -= 8 | |
8 | x //= 2 | |
9 | x //= 1 | |
10 | x %= 12 | |
11 | x &= 2 | |
12 | x |= 5 | |
13 | x ^= 1 | |
14 | ||
15 | print x | |
16 | ||
17 | x = [2] | |
18 | x[0] += 1 | |
19 | x[0] *= 2 | |
20 | x[0] **= 2 | |
21 | x[0] -= 8 | |
22 | x[0] //= 2 | |
23 | x[0] //= 2 | |
24 | x[0] %= 12 | |
25 | x[0] &= 2 | |
26 | x[0] |= 5 | |
27 | x[0] ^= 1 | |
28 | ||
29 | print x | |
30 | ||
31 | x = {0: 2} | |
32 | x[0] += 1 | |
33 | x[0] *= 2 | |
34 | x[0] **= 2 | |
35 | x[0] -= 8 | |
36 | x[0] //= 2 | |
37 | x[0] //= 1 | |
38 | x[0] %= 12 | |
39 | x[0] &= 2 | |
40 | x[0] |= 5 | |
41 | x[0] ^= 1 | |
42 | ||
43 | print x[0] | |
44 | ||
45 | x = [1,2] | |
46 | x += [3,4] | |
47 | x *= 2 | |
48 | ||
49 | print x | |
50 | ||
51 | x = [1, 2, 3] | |
52 | y = x | |
53 | x[1:2] *= 2 | |
54 | y[1:2] += [1] | |
55 | ||
56 | print x | |
57 | print x is y | |
58 | ||
59 | class aug_test: | |
60 | def __init__(self, value): | |
61 | self.val = value | |
62 | def __radd__(self, val): | |
63 | return self.val + val | |
64 | def __add__(self, val): | |
65 | return aug_test(self.val + val) | |
66 | ||
67 | ||
68 | class aug_test2(aug_test): | |
69 | def __iadd__(self, val): | |
70 | self.val = self.val + val | |
71 | return self | |
72 | ||
73 | class aug_test3(aug_test): | |
74 | def __iadd__(self, val): | |
75 | return aug_test3(self.val + val) | |
76 | ||
77 | x = aug_test(1) | |
78 | y = x | |
79 | x += 10 | |
80 | ||
81 | print isinstance(x, aug_test) | |
82 | print y is not x | |
83 | print x.val | |
84 | ||
85 | x = aug_test2(2) | |
86 | y = x | |
87 | x += 10 | |
88 | ||
89 | print y is x | |
90 | print x.val | |
91 | ||
92 | x = aug_test3(3) | |
93 | y = x | |
94 | x += 10 | |
95 | ||
96 | print isinstance(x, aug_test3) | |
97 | print y is not x | |
98 | print x.val | |
99 | ||
100 | class testall: | |
101 | ||
102 | def __add__(self, val): | |
103 | print "__add__ called" | |
104 | def __radd__(self, val): | |
105 | print "__radd__ called" | |
106 | def __iadd__(self, val): | |
107 | print "__iadd__ called" | |
108 | return self | |
109 | ||
110 | def __sub__(self, val): | |
111 | print "__sub__ called" | |
112 | def __rsub__(self, val): | |
113 | print "__rsub__ called" | |
114 | def __isub__(self, val): | |
115 | print "__isub__ called" | |
116 | return self | |
117 | ||
118 | def __mul__(self, val): | |
119 | print "__mul__ called" | |
120 | def __rmul__(self, val): | |
121 | print "__rmul__ called" | |
122 | def __imul__(self, val): | |
123 | print "__imul__ called" | |
124 | return self | |
125 | ||
126 | def __div__(self, val): | |
127 | print "__div__ called" | |
128 | def __rdiv__(self, val): | |
129 | print "__rdiv__ called" | |
130 | def __idiv__(self, val): | |
131 | print "__idiv__ called" | |
132 | return self | |
133 | ||
134 | def __floordiv__(self, val): | |
135 | print "__floordiv__ called" | |
136 | return self | |
137 | def __ifloordiv__(self, val): | |
138 | print "__ifloordiv__ called" | |
139 | return self | |
140 | def __rfloordiv__(self, val): | |
141 | print "__rfloordiv__ called" | |
142 | return self | |
143 | ||
144 | def __truediv__(self, val): | |
145 | print "__truediv__ called" | |
146 | return self | |
147 | def __itruediv__(self, val): | |
148 | print "__itruediv__ called" | |
149 | return self | |
150 | ||
151 | def __mod__(self, val): | |
152 | print "__mod__ called" | |
153 | def __rmod__(self, val): | |
154 | print "__rmod__ called" | |
155 | def __imod__(self, val): | |
156 | print "__imod__ called" | |
157 | return self | |
158 | ||
159 | def __pow__(self, val): | |
160 | print "__pow__ called" | |
161 | def __rpow__(self, val): | |
162 | print "__rpow__ called" | |
163 | def __ipow__(self, val): | |
164 | print "__ipow__ called" | |
165 | return self | |
166 | ||
167 | def __or__(self, val): | |
168 | print "__or__ called" | |
169 | def __ror__(self, val): | |
170 | print "__ror__ called" | |
171 | def __ior__(self, val): | |
172 | print "__ior__ called" | |
173 | return self | |
174 | ||
175 | def __and__(self, val): | |
176 | print "__and__ called" | |
177 | def __rand__(self, val): | |
178 | print "__rand__ called" | |
179 | def __iand__(self, val): | |
180 | print "__iand__ called" | |
181 | return self | |
182 | ||
183 | def __xor__(self, val): | |
184 | print "__xor__ called" | |
185 | def __rxor__(self, val): | |
186 | print "__rxor__ called" | |
187 | def __ixor__(self, val): | |
188 | print "__ixor__ called" | |
189 | return self | |
190 | ||
191 | def __rshift__(self, val): | |
192 | print "__rshift__ called" | |
193 | def __rrshift__(self, val): | |
194 | print "__rrshift__ called" | |
195 | def __irshift__(self, val): | |
196 | print "__irshift__ called" | |
197 | return self | |
198 | ||
199 | def __lshift__(self, val): | |
200 | print "__lshift__ called" | |
201 | def __rlshift__(self, val): | |
202 | print "__rlshift__ called" | |
203 | def __ilshift__(self, val): | |
204 | print "__ilshift__ called" | |
205 | return self | |
206 | ||
207 | x = testall() | |
208 | x + 1 | |
209 | 1 + x | |
210 | x += 1 | |
211 | ||
212 | x - 1 | |
213 | 1 - x | |
214 | x -= 1 | |
215 | ||
216 | x * 1 | |
217 | 1 * x | |
218 | x *= 1 | |
219 | ||
220 | if 1/2 == 0: | |
221 | x / 1 | |
222 | 1 / x | |
223 | x /= 1 | |
224 | else: | |
225 | # True division is in effect, so "/" doesn't map to __div__ etc; | |
226 | # but the canned expected-output file requires that those get called. | |
227 | x.__div__(1) | |
228 | x.__rdiv__(1) | |
229 | x.__idiv__(1) | |
230 | ||
231 | x // 1 | |
232 | 1 // x | |
233 | x //= 1 | |
234 | ||
235 | x % 1 | |
236 | 1 % x | |
237 | x %= 1 | |
238 | ||
239 | x ** 1 | |
240 | 1 ** x | |
241 | x **= 1 | |
242 | ||
243 | x | 1 | |
244 | 1 | x | |
245 | x |= 1 | |
246 | ||
247 | x & 1 | |
248 | 1 & x | |
249 | x &= 1 | |
250 | ||
251 | x ^ 1 | |
252 | 1 ^ x | |
253 | x ^= 1 | |
254 | ||
255 | x >> 1 | |
256 | 1 >> x | |
257 | x >>= 1 | |
258 | ||
259 | x << 1 | |
260 | 1 << x | |
261 | x <<= 1 |