# Augmented assignment test.
x = 2
x += 1
x *= 2
x **= 2
x -= 8
x /= 2
x %= 12
x &= 2
x |= 5
x ^= 1
assert x == 6
x = [2]
x[0] += 1
x[0] *= 2
x[0] **= 2
x[0] -= 8
x[0] /= 2
x[0] %= 12
x[0] &= 2
x[0] |= 5
x[0] ^= 1
assert x == [6]
x = {0: 2}
x[0] += 1
x[0] *= 2
x[0] **= 2
x[0] -= 8
x[0] /= 2
x[0] %= 12
x[0] &= 2
x[0] |= 5
x[0] ^= 1
assert x[0] == 6
x = [1,2]
x += [3,4]
x *= 2
assert x == [1,2,3,4,1,2,3,4]
x = [1, 2, 3]
y = x
x[1:2] *= 2
y[1:2] += [1]
assert x == [1, 2, 1, 2, 3] and x is y
class aug_test:
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)
class aug_test2(aug_test):
def __add_ab__(self, val):
self.val += val
return self
class aug_test3(aug_test):
def __add_ab__(self, val):
return aug_test3(self.val + val)
x = aug_test(1)
y = x
x += 10
assert isinstance(x, aug_test) and y is not x and x.val == 11
x = aug_test2(2)
y = x
x += 10
assert y is x and x.val == 12
x = aug_test3(3)
y = x
x += 10
assert isinstance(x, aug_test3) and y is not x and x.val == 13
# Matrix operators test
x = 2.0
y = x @ 2
assert y == 4
x = y @@ 2
assert x == 16
y = x @/ y
assert y == 4
x = x /@ y
assert x == 1/4.0
class testall:
def __add__(self, val):
print "__add__ called"
def __radd__(self, val):
print "__radd__ called"
def __add_ab__(self, val):
print "__add_ab__ called"
return self
def __sub__(self, val):
print "__sub__ called"
def __rsub__(self, val):
print "__rsub__ called"
def __sub_ab__(self, val):
print "__sub_ab__ called"
return self
def __mul__(self, val):
print "__mul__ called"
def __rmul__(self, val):
print "__rmul__ called"
def __mmul__(self, val):
print "__mmul__ called"
def __rmmul__(self, val):
print "__rmmul__ called"
def __mul_ab__(self, val):
print "__mul_ab__ called"
return self
def __div__(self, val):
print "__div__ called"
def __rdiv__(self, val):
print "__rdiv__ called"
def __mldiv__(self, val):
print "__mldiv__ called"
def __rmldiv__(self, val):
print "__rmldiv__ called"
def __mrdiv__(self, val):
print "__mrdiv__ called"
def __rmrdiv__(self, val):
print "__rmrdiv__ called"
def __div_ab__(self, val):
print "__div_ab__ called"
return self
def __mod__(self, val):
print "__mod__ called"
def __rmod__(self, val):
print "__rmod__ called"
def __mod_ab__(self, val):
print "__mod_ab__ called"
return self
def __pow__(self, val):
print "__pow__ called"
def __rpow__(self, val):
print "__rpow__ called"
def __mpow__(self, val):
print "__mpow__ called"
def __rmpow__(self, val):
print "__rmpow__ called"
def __pow_ab__(self, val):
print "__pow_ab__ called"
return self
def __or__(self, val):
print "__or__ called"
def __ror__(self, val):
print "__ror__ called"
def __or_ab__(self, val):
print "__or_ab__ called"
return self
def __and__(self, val):
print "__and__ called"
def __rand__(self, val):
print "__rand__ called"
def __and_ab__(self, val):
print "__and_ab__ called"
return self
def __xor__(self, val):
print "__xor__ called"
def __rxor__(self, val):
print "__rxor__ called"
def __xor_ab__(self, val):
print "__xor_ab__ called"
return self
def __rshift__(self, val):
print "__rshift__ called"
def __rrshift__(self, val):
print "__rrshift__ called"
def __rshift_ab__(self, val):
print "__rshift_ab__ called"
return self
def __lshift__(self, val):
print "__lshift__ called"
def __rlshift__(self, val):
print "__rlshift__ called"
def __lshift_ab__(self, val):
print "__lshift_ab__ called"
return self
x = testall()
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
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
1 @/ x
x /@ 1
1 /@ x
x @@ 1
1 @@ x
|