diff options
author | Guido van Rossum <guido@python.org> | 2006-04-22 17:37:27 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2006-04-22 17:37:27 (GMT) |
commit | d603f645d99102627c7776ebeb2c3d52eb1d3b4a (patch) | |
tree | 99e78c1c229dab9c99843919016ba0680fd945d6 /Lib | |
parent | d4ec0c3e2cbf76fe59c2f2a172fdcac09b3018ff (diff) | |
download | cpython-d603f645d99102627c7776ebeb2c3d52eb1d3b4a.zip cpython-d603f645d99102627c7776ebeb2c3d52eb1d3b4a.tar.gz cpython-d603f645d99102627c7776ebeb2c3d52eb1d3b4a.tar.bz2 |
Delete test_coercion.py. Coercion is dead, so this test is useless.
(Plus, it fails. :-)
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/test/test_coercion.py | 329 |
1 files changed, 0 insertions, 329 deletions
diff --git a/Lib/test/test_coercion.py b/Lib/test/test_coercion.py deleted file mode 100644 index 964f161..0000000 --- a/Lib/test/test_coercion.py +++ /dev/null @@ -1,329 +0,0 @@ -import copy -import sys -import warnings -import unittest -from test.test_support import run_unittest - -# Fake a number that implements numeric methods through __coerce__ -class CoerceNumber: - def __init__(self, arg): - self.arg = arg - - def __repr__(self): - return '<CoerceNumber %s>' % repr(self.arg) - - def __coerce__(self, other): - if isinstance(other, CoerceNumber): - return self.arg, other.arg - else: - return (self.arg, other) - -# New-style class version of CoerceNumber -class CoerceTo(object): - def __init__(self, arg): - self.arg = arg - def __coerce__(self, other): - if isinstance(other, CoerceTo): - return self.arg, other.arg - else: - return self.arg, other - - -# Fake a number that implements numeric ops through methods. -class MethodNumber: - def __init__(self,arg): - self.arg = arg - - def __repr__(self): - return '<MethodNumber %s>' % repr(self.arg) - - def __add__(self,other): - return self.arg + other - - def __radd__(self,other): - return other + self.arg - - def __sub__(self,other): - return self.arg - other - - def __rsub__(self,other): - return other - self.arg - - def __mul__(self,other): - return self.arg * other - - def __rmul__(self,other): - return other * self.arg - - def __truediv__(self,other): - return self.arg / other - - def __rtruediv__(self,other): - return other / self.arg - - def __truediv__(self,other): - return self.arg / other - - def __rtruediv__(self,other): - return other / self.arg - - def __floordiv__(self,other): - return self.arg // other - - def __rfloordiv__(self,other): - return other // self.arg - - def __pow__(self,other): - return self.arg ** other - - def __rpow__(self,other): - return other ** self.arg - - def __mod__(self,other): - return self.arg % other - - def __rmod__(self,other): - return other % self.arg - - def __cmp__(self, other): - return cmp(self.arg, other) - - -candidates = [2, 2L, 4.0, 2+0j, [1], (2,), None, - MethodNumber(2), CoerceNumber(2)] - -infix_binops = [ '+', '-', '*', '**', '%', '//', '/' ] - -TE = TypeError -# b = both normal and augmented give same result list -# s = single result lists for normal and augmented -# e = equals other results -# result lists: ['+', '-', '*', '**', '%', '//', ('classic /', 'new /')] -# ^^^^^^^^^^^^^^^^^^^^^^ -# 2-tuple if results differ -# else only one value -infix_results = { - # 2 - (0,0): ('b', [4, 0, 4, 4, 0, 1, (1, 1.0)]), - (0,1): ('e', (0,0)), - (0,2): ('b', [6.0, -2.0, 8.0, 16.0, 2.0, 0.0, 0.5]), - (0,3): ('b', [4+0j, 0+0j, 4+0j, 4+0j, 0+0j, 1+0j, 1+0j]), - (0,4): ('b', [TE, TE, [1, 1], TE, TE, TE, TE]), - (0,5): ('b', [TE, TE, (2, 2), TE, TE, TE, TE]), - (0,6): ('b', [TE, TE, TE, TE, TE, TE, TE]), - (0,7): ('e', (0,0)), - (0,8): ('e', (0,0)), - - # 2L - (1,0): ('e', (0,0)), - (1,1): ('e', (0,1)), - (1,2): ('e', (0,2)), - (1,3): ('e', (0,3)), - (1,4): ('e', (0,4)), - (1,5): ('e', (0,5)), - (1,6): ('e', (0,6)), - (1,7): ('e', (0,7)), - (1,8): ('e', (0,8)), - - # 4.0 - (2,0): ('b', [6.0, 2.0, 8.0, 16.0, 0.0, 2.0, 2.0]), - (2,1): ('e', (2,0)), - (2,2): ('b', [8.0, 0.0, 16.0, 256.0, 0.0, 1.0, 1.0]), - (2,3): ('b', [6+0j, 2+0j, 8+0j, 16+0j, 0+0j, 2+0j, 2+0j]), - (2,4): ('b', [TE, TE, TE, TE, TE, TE, TE]), - (2,5): ('e', (2,4)), - (2,6): ('e', (2,4)), - (2,7): ('e', (2,0)), - (2,8): ('e', (2,0)), - - # (2+0j) - (3,0): ('b', [4+0j, 0+0j, 4+0j, 4+0j, 0+0j, 1+0j, 1+0j]), - (3,1): ('e', (3,0)), - (3,2): ('b', [6+0j, -2+0j, 8+0j, 16+0j, 2+0j, 0+0j, 0.5+0j]), - (3,3): ('b', [4+0j, 0+0j, 4+0j, 4+0j, 0+0j, 1+0j, 1+0j]), - (3,4): ('b', [TE, TE, TE, TE, TE, TE, TE]), - (3,5): ('e', (3,4)), - (3,6): ('e', (3,4)), - (3,7): ('e', (3,0)), - (3,8): ('e', (3,0)), - - # [1] - (4,0): ('b', [TE, TE, [1, 1], TE, TE, TE, TE]), - (4,1): ('e', (4,0)), - (4,2): ('b', [TE, TE, TE, TE, TE, TE, TE]), - (4,3): ('b', [TE, TE, TE, TE, TE, TE, TE]), - (4,4): ('b', [[1, 1], TE, TE, TE, TE, TE, TE]), - (4,5): ('s', [TE, TE, TE, TE, TE, TE, TE], [[1, 2], TE, TE, TE, TE, TE, TE]), - (4,6): ('b', [TE, TE, TE, TE, TE, TE, TE]), - (4,7): ('e', (4,0)), - (4,8): ('e', (4,0)), - - # (2,) - (5,0): ('b', [TE, TE, (2, 2), TE, TE, TE, TE]), - (5,1): ('e', (5,0)), - (5,2): ('b', [TE, TE, TE, TE, TE, TE, TE]), - (5,3): ('e', (5,2)), - (5,4): ('e', (5,2)), - (5,5): ('b', [(2, 2), TE, TE, TE, TE, TE, TE]), - (5,6): ('b', [TE, TE, TE, TE, TE, TE, TE]), - (5,7): ('e', (5,0)), - (5,8): ('e', (5,0)), - - # None - (6,0): ('b', [TE, TE, TE, TE, TE, TE, TE]), - (6,1): ('e', (6,0)), - (6,2): ('e', (6,0)), - (6,3): ('e', (6,0)), - (6,4): ('e', (6,0)), - (6,5): ('e', (6,0)), - (6,6): ('e', (6,0)), - (6,7): ('e', (6,0)), - (6,8): ('e', (6,0)), - - # MethodNumber(2) - (7,0): ('e', (0,0)), - (7,1): ('e', (0,1)), - (7,2): ('e', (0,2)), - (7,3): ('e', (0,3)), - (7,4): ('e', (0,4)), - (7,5): ('e', (0,5)), - (7,6): ('e', (0,6)), - (7,7): ('e', (0,7)), - (7,8): ('e', (0,8)), - - # CoerceNumber(2) - (8,0): ('e', (0,0)), - (8,1): ('e', (0,1)), - (8,2): ('e', (0,2)), - (8,3): ('e', (0,3)), - (8,4): ('e', (0,4)), - (8,5): ('e', (0,5)), - (8,6): ('e', (0,6)), - (8,7): ('e', (0,7)), - (8,8): ('e', (0,8)), -} - -def process_infix_results(): - for key in sorted(infix_results): - val = infix_results[key] - if val[0] == 'e': - infix_results[key] = infix_results[val[1]] - else: - if val[0] == 's': - res = (val[1], val[2]) - elif val[0] == 'b': - res = (val[1], val[1]) - for i in range(1): - if isinstance(res[i][6], tuple): - if 1/2 == 0: - # testing with classic (floor) division - res[i][6] = res[i][6][0] - else: - # testing with -Qnew - res[i][6] = res[i][6][1] - infix_results[key] = res - - - -process_infix_results() -# now infix_results has two lists of results for every pairing. - -prefix_binops = [ 'divmod' ] -prefix_results = [ - [(1,0), (1L,0L), (0.0,2.0), ((1+0j),0j), TE, TE, TE, TE, (1,0)], - [(1L,0L), (1L,0L), (0.0,2.0), ((1+0j),0j), TE, TE, TE, TE, (1L,0L)], - [(2.0,0.0), (2.0,0.0), (1.0,0.0), ((2+0j),0j), TE, TE, TE, TE, (2.0,0.0)], - [((1+0j),0j), ((1+0j),0j), (0j,(2+0j)), ((1+0j),0j), TE, TE, TE, TE, ((1+0j),0j)], - [TE, TE, TE, TE, TE, TE, TE, TE, TE], - [TE, TE, TE, TE, TE, TE, TE, TE, TE], - [TE, TE, TE, TE, TE, TE, TE, TE, TE], - [TE, TE, TE, TE, TE, TE, TE, TE, TE], - [(1,0), (1L,0L), (0.0,2.0), ((1+0j),0j), TE, TE, TE, TE, (1,0)] -] - -def format_float(value): - if abs(value) < 0.01: - return '0.0' - else: - return '%.1f' % value - -# avoid testing platform fp quirks -def format_result(value): - if isinstance(value, complex): - return '(%s + %sj)' % (format_float(value.real), - format_float(value.imag)) - elif isinstance(value, float): - return format_float(value) - return str(value) - -class CoercionTest(unittest.TestCase): - def test_infix_binops(self): - for ia, a in enumerate(candidates): - for ib, b in enumerate(candidates): - results = infix_results[(ia, ib)] - for op, res, ires in zip(infix_binops, results[0], results[1]): - if res is TE: - self.assertRaises(TypeError, eval, - 'a %s b' % op, {'a': a, 'b': b}) - else: - self.assertEquals(format_result(res), - format_result(eval('a %s b' % op)), - '%s %s %s == %s failed' % (a, op, b, res)) - try: - z = copy.copy(a) - except copy.Error: - z = a # assume it has no inplace ops - if ires is TE: - try: - exec 'z %s= b' % op - except TypeError: - pass - else: - self.fail("TypeError not raised") - else: - exec('z %s= b' % op) - self.assertEquals(ires, z) - - def test_prefix_binops(self): - for ia, a in enumerate(candidates): - for ib, b in enumerate(candidates): - for op in prefix_binops: - res = prefix_results[ia][ib] - if res is TE: - self.assertRaises(TypeError, eval, - '%s(a, b)' % op, {'a': a, 'b': b}) - else: - self.assertEquals(format_result(res), - format_result(eval('%s(a, b)' % op)), - '%s(%s, %s) == %s failed' % (op, a, b, res)) - - def test_cmptypes(self): - # Built-in tp_compare slots expect their arguments to have the - # same type, but a user-defined __coerce__ doesn't have to obey. - # SF #980352 - evil_coercer = CoerceTo(42) - # Make sure these don't crash any more - self.assertNotEquals(cmp(u'fish', evil_coercer), 0) - self.assertNotEquals(cmp(slice(1), evil_coercer), 0) - # ...but that this still works - class WackyComparer(object): - def __cmp__(slf, other): - self.assert_(other == 42, 'expected evil_coercer, got %r' % other) - return 0 - self.assertEquals(cmp(WackyComparer(), evil_coercer), 0) - # ...and classic classes too, since that code path is a little different - class ClassicWackyComparer: - def __cmp__(slf, other): - self.assert_(other == 42, 'expected evil_coercer, got %r' % other) - return 0 - self.assertEquals(cmp(ClassicWackyComparer(), evil_coercer), 0) - -def test_main(): - warnings.filterwarnings("ignore", - r'complex divmod\(\), // and % are deprecated', - DeprecationWarning, - r'test.test_coercion$') - run_unittest(CoercionTest) - -if __name__ == "__main__": - test_main() |