Skip to content

Commit 93f0c96

Browse files
committed
Add test_augassign from CPython 3.8.7
1 parent 820337e commit 93f0c96

File tree

1 file changed

+326
-0
lines changed

1 file changed

+326
-0
lines changed

Lib/test/test_augassign.py

Lines changed: 326 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,326 @@
1+
# Augmented assignment test.
2+
3+
import unittest
4+
5+
6+
class AugAssignTest(unittest.TestCase):
7+
def testBasic(self):
8+
x = 2
9+
x += 1
10+
x *= 2
11+
x **= 2
12+
x -= 8
13+
x //= 5
14+
x %= 3
15+
x &= 2
16+
x |= 5
17+
x ^= 1
18+
x /= 2
19+
self.assertEqual(x, 3.0)
20+
21+
def test_with_unpacking(self):
22+
self.assertRaises(SyntaxError, compile, "x, b += 3", "<test>", "exec")
23+
24+
def testInList(self):
25+
x = [2]
26+
x[0] += 1
27+
x[0] *= 2
28+
x[0] **= 2
29+
x[0] -= 8
30+
x[0] //= 5
31+
x[0] %= 3
32+
x[0] &= 2
33+
x[0] |= 5
34+
x[0] ^= 1
35+
x[0] /= 2
36+
self.assertEqual(x[0], 3.0)
37+
38+
def testInDict(self):
39+
x = {0: 2}
40+
x[0] += 1
41+
x[0] *= 2
42+
x[0] **= 2
43+
x[0] -= 8
44+
x[0] //= 5
45+
x[0] %= 3
46+
x[0] &= 2
47+
x[0] |= 5
48+
x[0] ^= 1
49+
x[0] /= 2
50+
self.assertEqual(x[0], 3.0)
51+
52+
def testSequences(self):
53+
x = [1,2]
54+
x += [3,4]
55+
x *= 2
56+
57+
self.assertEqual(x, [1, 2, 3, 4, 1, 2, 3, 4])
58+
59+
x = [1, 2, 3]
60+
y = x
61+
x[1:2] *= 2
62+
y[1:2] += [1]
63+
64+
self.assertEqual(x, [1, 2, 1, 2, 3])
65+
self.assertTrue(x is y)
66+
67+
def testCustomMethods1(self):
68+
69+
class aug_test:
70+
def __init__(self, value):
71+
self.val = value
72+
def __radd__(self, val):
73+
return self.val + val
74+
def __add__(self, val):
75+
return aug_test(self.val + val)
76+
77+
class aug_test2(aug_test):
78+
def __iadd__(self, val):
79+
self.val = self.val + val
80+
return self
81+
82+
class aug_test3(aug_test):
83+
def __iadd__(self, val):
84+
return aug_test3(self.val + val)
85+
86+
class aug_test4(aug_test3):
87+
"""Blocks inheritance, and fallback to __add__"""
88+
__iadd__ = None
89+
90+
x = aug_test(1)
91+
y = x
92+
x += 10
93+
94+
self.assertIsInstance(x, aug_test)
95+
self.assertTrue(y is not x)
96+
self.assertEqual(x.val, 11)
97+
98+
x = aug_test2(2)
99+
y = x
100+
x += 10
101+
102+
self.assertTrue(y is x)
103+
self.assertEqual(x.val, 12)
104+
105+
x = aug_test3(3)
106+
y = x
107+
x += 10
108+
109+
self.assertIsInstance(x, aug_test3)
110+
self.assertTrue(y is not x)
111+
self.assertEqual(x.val, 13)
112+
113+
x = aug_test4(4)
114+
with self.assertRaises(TypeError):
115+
x += 10
116+
117+
118+
def testCustomMethods2(test_self):
119+
output = []
120+
121+
class testall:
122+
def __add__(self, val):
123+
output.append("__add__ called")
124+
def __radd__(self, val):
125+
output.append("__radd__ called")
126+
def __iadd__(self, val):
127+
output.append("__iadd__ called")
128+
return self
129+
130+
def __sub__(self, val):
131+
output.append("__sub__ called")
132+
def __rsub__(self, val):
133+
output.append("__rsub__ called")
134+
def __isub__(self, val):
135+
output.append("__isub__ called")
136+
return self
137+
138+
def __mul__(self, val):
139+
output.append("__mul__ called")
140+
def __rmul__(self, val):
141+
output.append("__rmul__ called")
142+
def __imul__(self, val):
143+
output.append("__imul__ called")
144+
return self
145+
146+
def __matmul__(self, val):
147+
output.append("__matmul__ called")
148+
def __rmatmul__(self, val):
149+
output.append("__rmatmul__ called")
150+
def __imatmul__(self, val):
151+
output.append("__imatmul__ called")
152+
return self
153+
154+
def __floordiv__(self, val):
155+
output.append("__floordiv__ called")
156+
return self
157+
def __ifloordiv__(self, val):
158+
output.append("__ifloordiv__ called")
159+
return self
160+
def __rfloordiv__(self, val):
161+
output.append("__rfloordiv__ called")
162+
return self
163+
164+
def __truediv__(self, val):
165+
output.append("__truediv__ called")
166+
return self
167+
def __rtruediv__(self, val):
168+
output.append("__rtruediv__ called")
169+
return self
170+
def __itruediv__(self, val):
171+
output.append("__itruediv__ called")
172+
return self
173+
174+
def __mod__(self, val):
175+
output.append("__mod__ called")
176+
def __rmod__(self, val):
177+
output.append("__rmod__ called")
178+
def __imod__(self, val):
179+
output.append("__imod__ called")
180+
return self
181+
182+
def __pow__(self, val):
183+
output.append("__pow__ called")
184+
def __rpow__(self, val):
185+
output.append("__rpow__ called")
186+
def __ipow__(self, val):
187+
output.append("__ipow__ called")
188+
return self
189+
190+
def __or__(self, val):
191+
output.append("__or__ called")
192+
def __ror__(self, val):
193+
output.append("__ror__ called")
194+
def __ior__(self, val):
195+
output.append("__ior__ called")
196+
return self
197+
198+
def __and__(self, val):
199+
output.append("__and__ called")
200+
def __rand__(self, val):
201+
output.append("__rand__ called")
202+
def __iand__(self, val):
203+
output.append("__iand__ called")
204+
return self
205+
206+
def __xor__(self, val):
207+
output.append("__xor__ called")
208+
def __rxor__(self, val):
209+
output.append("__rxor__ called")
210+
def __ixor__(self, val):
211+
output.append("__ixor__ called")
212+
return self
213+
214+
def __rshift__(self, val):
215+
output.append("__rshift__ called")
216+
def __rrshift__(self, val):
217+
output.append("__rrshift__ called")
218+
def __irshift__(self, val):
219+
output.append("__irshift__ called")
220+
return self
221+
222+
def __lshift__(self, val):
223+
output.append("__lshift__ called")
224+
def __rlshift__(self, val):
225+
output.append("__rlshift__ called")
226+
def __ilshift__(self, val):
227+
output.append("__ilshift__ called")
228+
return self
229+
230+
x = testall()
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
262+
263+
x | 1
264+
1 | x
265+
x |= 1
266+
267+
x & 1
268+
1 & x
269+
x &= 1
270+
271+
x ^ 1
272+
1 ^ x
273+
x ^= 1
274+
275+
x >> 1
276+
1 >> x
277+
x >>= 1
278+
279+
x << 1
280+
1 << x
281+
x <<= 1
282+
283+
test_self.assertEqual(output, '''\
284+
__add__ called
285+
__radd__ called
286+
__iadd__ called
287+
__sub__ called
288+
__rsub__ called
289+
__isub__ called
290+
__mul__ called
291+
__rmul__ called
292+
__imul__ called
293+
__matmul__ called
294+
__rmatmul__ called
295+
__imatmul__ called
296+
__truediv__ called
297+
__rtruediv__ called
298+
__itruediv__ called
299+
__floordiv__ called
300+
__rfloordiv__ called
301+
__ifloordiv__ called
302+
__mod__ called
303+
__rmod__ called
304+
__imod__ called
305+
__pow__ called
306+
__rpow__ called
307+
__ipow__ called
308+
__or__ called
309+
__ror__ called
310+
__ior__ called
311+
__and__ called
312+
__rand__ called
313+
__iand__ called
314+
__xor__ called
315+
__rxor__ called
316+
__ixor__ called
317+
__rshift__ called
318+
__rrshift__ called
319+
__irshift__ called
320+
__lshift__ called
321+
__rlshift__ called
322+
__ilshift__ called
323+
'''.splitlines())
324+
325+
if __name__ == '__main__':
326+
unittest.main()

0 commit comments

Comments
 (0)