| 
									
										
										
										
											2000-08-24 20:14:10 +00:00
										 |  |  | # Augmented assignment test. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | x = 2 | 
					
						
							|  |  |  | x += 1 | 
					
						
							|  |  |  | x *= 2 | 
					
						
							|  |  |  | x **= 2 | 
					
						
							|  |  |  | x -= 8 | 
					
						
							| 
									
										
										
										
											2001-09-04 19:14:14 +00:00
										 |  |  | x //= 2 | 
					
						
							| 
									
										
										
										
											2001-08-29 17:50:27 +00:00
										 |  |  | x //= 1 | 
					
						
							| 
									
										
										
										
											2000-08-24 20:14:10 +00:00
										 |  |  | x %= 12 | 
					
						
							|  |  |  | x &= 2 | 
					
						
							|  |  |  | x |= 5 | 
					
						
							|  |  |  | x ^= 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | print x | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | x = [2] | 
					
						
							|  |  |  | x[0] += 1 | 
					
						
							|  |  |  | x[0] *= 2 | 
					
						
							|  |  |  | x[0] **= 2 | 
					
						
							|  |  |  | x[0] -= 8 | 
					
						
							| 
									
										
										
										
											2001-09-04 19:14:14 +00:00
										 |  |  | x[0] //= 2 | 
					
						
							| 
									
										
										
										
											2001-08-29 17:50:27 +00:00
										 |  |  | x[0] //= 2 | 
					
						
							| 
									
										
										
										
											2000-08-24 20:14:10 +00:00
										 |  |  | x[0] %= 12 | 
					
						
							|  |  |  | x[0] &= 2 | 
					
						
							|  |  |  | x[0] |= 5 | 
					
						
							|  |  |  | x[0] ^= 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | print x | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | x = {0: 2} | 
					
						
							|  |  |  | x[0] += 1 | 
					
						
							|  |  |  | x[0] *= 2 | 
					
						
							|  |  |  | x[0] **= 2 | 
					
						
							|  |  |  | x[0] -= 8 | 
					
						
							| 
									
										
										
										
											2001-09-04 19:14:14 +00:00
										 |  |  | x[0] //= 2 | 
					
						
							| 
									
										
										
										
											2001-08-29 17:50:27 +00:00
										 |  |  | x[0] //= 1 | 
					
						
							| 
									
										
										
										
											2000-08-24 20:14:10 +00:00
										 |  |  | x[0] %= 12 | 
					
						
							|  |  |  | x[0] &= 2 | 
					
						
							|  |  |  | x[0] |= 5 | 
					
						
							|  |  |  | x[0] ^= 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | print x[0] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | x = [1,2] | 
					
						
							|  |  |  | x += [3,4] | 
					
						
							|  |  |  | x *= 2 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | print x | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | x = [1, 2, 3] | 
					
						
							|  |  |  | y = x | 
					
						
							|  |  |  | x[1:2] *= 2 | 
					
						
							|  |  |  | y[1:2] += [1] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | print x | 
					
						
							|  |  |  | print x is y | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class aug_test: | 
					
						
							| 
									
										
										
										
											2000-10-23 17:22:08 +00:00
										 |  |  |     def __init__(self, value): | 
					
						
							|  |  |  |         self.val = value | 
					
						
							|  |  |  |     def __radd__(self, val): | 
					
						
							|  |  |  |         return self.val + val | 
					
						
							|  |  |  |     def __add__(self, val): | 
					
						
							|  |  |  |         return aug_test(self.val + val) | 
					
						
							| 
									
										
										
										
											2000-08-24 20:14:10 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class aug_test2(aug_test): | 
					
						
							| 
									
										
										
										
											2000-10-23 17:22:08 +00:00
										 |  |  |     def __iadd__(self, val): | 
					
						
							|  |  |  |         self.val = self.val + val | 
					
						
							|  |  |  |         return self | 
					
						
							| 
									
										
										
										
											2000-08-24 20:14:10 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class aug_test3(aug_test): | 
					
						
							| 
									
										
										
										
											2000-10-23 17:22:08 +00:00
										 |  |  |     def __iadd__(self, val): | 
					
						
							|  |  |  |         return aug_test3(self.val + val) | 
					
						
							| 
									
										
										
										
											2000-08-24 20:14:10 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | x = aug_test(1) | 
					
						
							|  |  |  | y = x | 
					
						
							|  |  |  | x += 10 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | print isinstance(x, aug_test) | 
					
						
							| 
									
										
										
										
											2000-10-23 17:22:08 +00:00
										 |  |  | print y is not x | 
					
						
							| 
									
										
										
										
											2000-08-24 20:14:10 +00:00
										 |  |  | print x.val | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | x = aug_test2(2) | 
					
						
							|  |  |  | y = x | 
					
						
							|  |  |  | x += 10 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | print y is x | 
					
						
							|  |  |  | print x.val | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | x = aug_test3(3) | 
					
						
							|  |  |  | y = x | 
					
						
							|  |  |  | x += 10 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | print isinstance(x, aug_test3) | 
					
						
							|  |  |  | print y is not x | 
					
						
							|  |  |  | print x.val | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class testall: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-10-23 17:22:08 +00:00
										 |  |  |     def __add__(self, val): | 
					
						
							|  |  |  |         print "__add__ called" | 
					
						
							|  |  |  |     def __radd__(self, val): | 
					
						
							|  |  |  |         print "__radd__ called" | 
					
						
							|  |  |  |     def __iadd__(self, val): | 
					
						
							|  |  |  |         print "__iadd__ called" | 
					
						
							|  |  |  |         return self | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def __sub__(self, val): | 
					
						
							|  |  |  |         print "__sub__ called" | 
					
						
							|  |  |  |     def __rsub__(self, val): | 
					
						
							|  |  |  |         print "__rsub__ called" | 
					
						
							|  |  |  |     def __isub__(self, val): | 
					
						
							|  |  |  |         print "__isub__ called" | 
					
						
							|  |  |  |         return self | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def __mul__(self, val): | 
					
						
							|  |  |  |         print "__mul__ called" | 
					
						
							|  |  |  |     def __rmul__(self, val): | 
					
						
							|  |  |  |         print "__rmul__ called" | 
					
						
							|  |  |  |     def __imul__(self, val): | 
					
						
							|  |  |  |         print "__imul__ called" | 
					
						
							|  |  |  |         return self | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def __div__(self, val): | 
					
						
							|  |  |  |         print "__div__ called" | 
					
						
							|  |  |  |     def __rdiv__(self, val): | 
					
						
							|  |  |  |         print "__rdiv__ called" | 
					
						
							|  |  |  |     def __idiv__(self, val): | 
					
						
							|  |  |  |         print "__idiv__ called" | 
					
						
							|  |  |  |         return self | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-08-29 17:50:27 +00:00
										 |  |  |     def __floordiv__(self, val): | 
					
						
							|  |  |  |         print "__floordiv__ called" | 
					
						
							|  |  |  |         return self | 
					
						
							|  |  |  |     def __ifloordiv__(self, val): | 
					
						
							|  |  |  |         print "__ifloordiv__ called" | 
					
						
							|  |  |  |         return self | 
					
						
							|  |  |  |     def __rfloordiv__(self, val): | 
					
						
							|  |  |  |         print "__rfloordiv__ called" | 
					
						
							|  |  |  |         return self | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def __truediv__(self, val): | 
					
						
							|  |  |  |         print "__truediv__ called" | 
					
						
							|  |  |  |         return self | 
					
						
							|  |  |  |     def __itruediv__(self, val): | 
					
						
							|  |  |  |         print "__itruediv__ called" | 
					
						
							|  |  |  |         return self | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-10-23 17:22:08 +00:00
										 |  |  |     def __mod__(self, val): | 
					
						
							|  |  |  |         print "__mod__ called" | 
					
						
							|  |  |  |     def __rmod__(self, val): | 
					
						
							|  |  |  |         print "__rmod__ called" | 
					
						
							|  |  |  |     def __imod__(self, val): | 
					
						
							|  |  |  |         print "__imod__ called" | 
					
						
							|  |  |  |         return self | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def __pow__(self, val): | 
					
						
							|  |  |  |         print "__pow__ called" | 
					
						
							|  |  |  |     def __rpow__(self, val): | 
					
						
							|  |  |  |         print "__rpow__ called" | 
					
						
							|  |  |  |     def __ipow__(self, val): | 
					
						
							|  |  |  |         print "__ipow__ called" | 
					
						
							|  |  |  |         return self | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def __or__(self, val): | 
					
						
							|  |  |  |         print "__or__ called" | 
					
						
							|  |  |  |     def __ror__(self, val): | 
					
						
							|  |  |  |         print "__ror__ called" | 
					
						
							|  |  |  |     def __ior__(self, val): | 
					
						
							|  |  |  |         print "__ior__ called" | 
					
						
							|  |  |  |         return self | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def __and__(self, val): | 
					
						
							|  |  |  |         print "__and__ called" | 
					
						
							|  |  |  |     def __rand__(self, val): | 
					
						
							|  |  |  |         print "__rand__ called" | 
					
						
							|  |  |  |     def __iand__(self, val): | 
					
						
							|  |  |  |         print "__iand__ called" | 
					
						
							|  |  |  |         return self | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def __xor__(self, val): | 
					
						
							|  |  |  |         print "__xor__ called" | 
					
						
							|  |  |  |     def __rxor__(self, val): | 
					
						
							|  |  |  |         print "__rxor__ called" | 
					
						
							|  |  |  |     def __ixor__(self, val): | 
					
						
							|  |  |  |         print "__ixor__ called" | 
					
						
							|  |  |  |         return self | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def __rshift__(self, val): | 
					
						
							|  |  |  |         print "__rshift__ called" | 
					
						
							|  |  |  |     def __rrshift__(self, val): | 
					
						
							|  |  |  |         print "__rrshift__ called" | 
					
						
							|  |  |  |     def __irshift__(self, val): | 
					
						
							|  |  |  |         print "__irshift__ called" | 
					
						
							|  |  |  |         return self | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def __lshift__(self, val): | 
					
						
							|  |  |  |         print "__lshift__ called" | 
					
						
							|  |  |  |     def __rlshift__(self, val): | 
					
						
							|  |  |  |         print "__rlshift__ called" | 
					
						
							|  |  |  |     def __ilshift__(self, val): | 
					
						
							|  |  |  |         print "__ilshift__ called" | 
					
						
							|  |  |  |         return self | 
					
						
							| 
									
										
										
										
											2000-08-24 20:14:10 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | x = testall() | 
					
						
							|  |  |  | x + 1 | 
					
						
							|  |  |  | 1 + x | 
					
						
							|  |  |  | x += 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | x - 1 | 
					
						
							|  |  |  | 1 - x | 
					
						
							|  |  |  | x -= 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | x * 1 | 
					
						
							|  |  |  | 1 * x | 
					
						
							|  |  |  | x *= 1 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-12-11 19:20:15 +00:00
										 |  |  | if 1/2 == 0: | 
					
						
							|  |  |  |     x / 1 | 
					
						
							|  |  |  |     1 / x | 
					
						
							|  |  |  |     x /= 1 | 
					
						
							|  |  |  | else: | 
					
						
							|  |  |  |     # True division is in effect, so "/" doesn't map to __div__ etc; | 
					
						
							|  |  |  |     # but the canned expected-output file requires that those get called. | 
					
						
							|  |  |  |     x.__div__(1) | 
					
						
							|  |  |  |     x.__rdiv__(1) | 
					
						
							|  |  |  |     x.__idiv__(1) | 
					
						
							| 
									
										
										
										
											2000-08-24 20:14:10 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-08-29 17:50:27 +00:00
										 |  |  | x // 1 | 
					
						
							|  |  |  | 1 // x | 
					
						
							|  |  |  | x //= 1 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-08-24 20:14:10 +00:00
										 |  |  | x % 1 | 
					
						
							|  |  |  | 1 % x | 
					
						
							|  |  |  | x %= 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | x ** 1 | 
					
						
							|  |  |  | 1 ** x | 
					
						
							|  |  |  | x **= 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | x | 1 | 
					
						
							|  |  |  | 1 | x | 
					
						
							|  |  |  | x |= 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | x & 1 | 
					
						
							|  |  |  | 1 & x | 
					
						
							|  |  |  | x &= 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | x ^ 1 | 
					
						
							|  |  |  | 1 ^ x | 
					
						
							|  |  |  | x ^= 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | x >> 1 | 
					
						
							|  |  |  | 1 >> x | 
					
						
							|  |  |  | x >>= 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | x << 1 | 
					
						
							|  |  |  | 1 << x | 
					
						
							|  |  |  | x <<= 1 |