Make test_augassign pass with -Qnew and convert to unittest.

This commit is contained in:
Georg Brandl 2006-03-28 10:26:45 +00:00
parent b921a84405
commit 019514e854
2 changed files with 290 additions and 275 deletions

View File

@ -1,51 +0,0 @@
test_augassign
6
[6]
6
[1, 2, 3, 4, 1, 2, 3, 4]
[1, 2, 1, 2, 3]
True
True
True
11
True
12
True
True
13
__add__ called
__radd__ called
__iadd__ called
__sub__ called
__rsub__ called
__isub__ called
__mul__ called
__rmul__ called
__imul__ called
__div__ called
__rdiv__ called
__idiv__ called
__floordiv__ called
__rfloordiv__ called
__ifloordiv__ called
__mod__ called
__rmod__ called
__imod__ called
__pow__ called
__rpow__ called
__ipow__ called
__or__ called
__ror__ called
__ior__ called
__and__ called
__rand__ called
__iand__ called
__xor__ called
__rxor__ called
__ixor__ called
__rshift__ called
__rrshift__ called
__irshift__ called
__lshift__ called
__rlshift__ called
__ilshift__ called

View File

@ -1,261 +1,327 @@
# Augmented assignment test.
x = 2
x += 1
x *= 2
x **= 2
x -= 8
x /= 2
x //= 1
x %= 12
x &= 2
x |= 5
x ^= 1
print x
x = [2]
x[0] += 1
x[0] *= 2
x[0] **= 2
x[0] -= 8
x[0] /= 2
x[0] //= 2
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
x[0] /= 2
x[0] //= 1
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:
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)
from test.test_support import run_unittest
import unittest
class aug_test2(aug_test):
def __iadd__(self, val):
self.val = self.val + val
return self
class AugAssignTest(unittest.TestCase):
def testBasic(self):
x = 2
x += 1
x *= 2
x **= 2
x -= 8
x //= 5
x %= 3
x &= 2
x |= 5
x ^= 1
x /= 2
if 1/2 == 0:
# classic division
self.assertEquals(x, 3)
else:
# new-style division (with -Qnew)
self.assertEquals(x, 3.0)
class aug_test3(aug_test):
def __iadd__(self, val):
return aug_test3(self.val + val)
def testInList(self):
x = [2]
x[0] += 1
x[0] *= 2
x[0] **= 2
x[0] -= 8
x[0] //= 5
x[0] %= 3
x[0] &= 2
x[0] |= 5
x[0] ^= 1
x[0] /= 2
if 1/2 == 0:
self.assertEquals(x[0], 3)
else:
self.assertEquals(x[0], 3.0)
x = aug_test(1)
y = x
x += 10
def testInDict(self):
x = {0: 2}
x[0] += 1
x[0] *= 2
x[0] **= 2
x[0] -= 8
x[0] //= 5
x[0] %= 3
x[0] &= 2
x[0] |= 5
x[0] ^= 1
x[0] /= 2
if 1/2 == 0:
self.assertEquals(x[0], 3)
else:
self.assertEquals(x[0], 3.0)
print isinstance(x, aug_test)
print y is not x
print x.val
def testSequences(self):
x = [1,2]
x += [3,4]
x *= 2
x = aug_test2(2)
y = x
x += 10
self.assertEquals(x, [1, 2, 3, 4, 1, 2, 3, 4])
x = [1, 2, 3]
y = x
x[1:2] *= 2
y[1:2] += [1]
print y is x
print x.val
self.assertEquals(x, [1, 2, 1, 2, 3])
self.assert_(x is y)
x = aug_test3(3)
y = x
x += 10
def testCustomMethods1(self):
print isinstance(x, aug_test3)
print y is not x
print x.val
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 __iadd__(self, val):
self.val = self.val + val
return self
class testall:
class aug_test3(aug_test):
def __iadd__(self, val):
return aug_test3(self.val + val)
x = aug_test(1)
y = x
x += 10
def __add__(self, val):
print "__add__ called"
def __radd__(self, val):
print "__radd__ called"
def __iadd__(self, val):
print "__iadd__ called"
return self
self.assert_(isinstance(x, aug_test))
self.assert_(y is not x)
self.assertEquals(x.val, 11)
def __sub__(self, val):
print "__sub__ called"
def __rsub__(self, val):
print "__rsub__ called"
def __isub__(self, val):
print "__isub__ called"
return self
x = aug_test2(2)
y = x
x += 10
self.assert_(y is x)
self.assertEquals(x.val, 12)
def __mul__(self, val):
print "__mul__ called"
def __rmul__(self, val):
print "__rmul__ called"
def __imul__(self, val):
print "__imul__ called"
return self
x = aug_test3(3)
y = x
x += 10
def __div__(self, val):
print "__div__ called"
def __rdiv__(self, val):
print "__rdiv__ called"
def __idiv__(self, val):
print "__idiv__ called"
return self
self.assert_(isinstance(x, aug_test3))
self.assert_(y is not x)
self.assertEquals(x.val, 13)
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
def testCustomMethods2(test_self):
output = []
def __mod__(self, val):
print "__mod__ called"
def __rmod__(self, val):
print "__rmod__ called"
def __imod__(self, val):
print "__imod__ called"
return self
class testall:
def __add__(self, val):
output.append("__add__ called")
def __radd__(self, val):
output.append("__radd__ called")
def __iadd__(self, val):
output.append("__iadd__ 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 __sub__(self, val):
output.append("__sub__ called")
def __rsub__(self, val):
output.append("__rsub__ called")
def __isub__(self, val):
output.append("__isub__ 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 __mul__(self, val):
output.append("__mul__ called")
def __rmul__(self, val):
output.append("__rmul__ called")
def __imul__(self, val):
output.append("__imul__ 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 __div__(self, val):
output.append("__div__ called")
def __rdiv__(self, val):
output.append("__rdiv__ called")
def __idiv__(self, val):
output.append("__idiv__ 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 __floordiv__(self, val):
output.append("__floordiv__ called")
return self
def __ifloordiv__(self, val):
output.append("__ifloordiv__ called")
return self
def __rfloordiv__(self, val):
output.append("__rfloordiv__ 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 __truediv__(self, val):
output.append("__truediv__ called")
return self
def __itruediv__(self, val):
output.append("__itruediv__ 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
def __mod__(self, val):
output.append("__mod__ called")
def __rmod__(self, val):
output.append("__rmod__ called")
def __imod__(self, val):
output.append("__imod__ called")
return self
x = testall()
x + 1
1 + x
x += 1
def __pow__(self, val):
output.append("__pow__ called")
def __rpow__(self, val):
output.append("__rpow__ called")
def __ipow__(self, val):
output.append("__ipow__ called")
return self
x - 1
1 - x
x -= 1
def __or__(self, val):
output.append("__or__ called")
def __ror__(self, val):
output.append("__ror__ called")
def __ior__(self, val):
output.append("__ior__ called")
return self
x * 1
1 * x
x *= 1
def __and__(self, val):
output.append("__and__ called")
def __rand__(self, val):
output.append("__rand__ called")
def __iand__(self, val):
output.append("__iand__ called")
return self
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)
def __xor__(self, val):
output.append("__xor__ called")
def __rxor__(self, val):
output.append("__rxor__ called")
def __ixor__(self, val):
output.append("__ixor__ called")
return self
x // 1
1 // x
x //= 1
def __rshift__(self, val):
output.append("__rshift__ called")
def __rrshift__(self, val):
output.append("__rrshift__ called")
def __irshift__(self, val):
output.append("__irshift__ called")
return self
x % 1
1 % x
x %= 1
def __lshift__(self, val):
output.append("__lshift__ called")
def __rlshift__(self, val):
output.append("__rlshift__ called")
def __ilshift__(self, val):
output.append("__ilshift__ called")
return self
x ** 1
1 ** x
x **= 1
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
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)
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
test_self.assertEquals(output, '''\
__add__ called
__radd__ called
__iadd__ called
__sub__ called
__rsub__ called
__isub__ called
__mul__ called
__rmul__ called
__imul__ called
__div__ called
__rdiv__ called
__idiv__ called
__floordiv__ called
__rfloordiv__ called
__ifloordiv__ called
__mod__ called
__rmod__ called
__imod__ called
__pow__ called
__rpow__ called
__ipow__ called
__or__ called
__ror__ called
__ior__ called
__and__ called
__rand__ called
__iand__ called
__xor__ called
__rxor__ called
__ixor__ called
__rshift__ called
__rrshift__ called
__irshift__ called
__lshift__ called
__rlshift__ called
__ilshift__ called
'''.splitlines())
def test_main():
run_unittest(AugAssignTest)
if __name__ == '__main__':
test_main()