Skip to content

Commit

Permalink
gh-117797: Improve test_descr.test_not_implemented (#117798)
Browse files Browse the repository at this point in the history
  • Loading branch information
sobolevn authored Apr 16, 2024
1 parent 2cc916e commit 1a1e013
Showing 1 changed file with 17 additions and 8 deletions.
25 changes: 17 additions & 8 deletions Lib/test/test_descr.py
Original file line number Diff line number Diff line change
Expand Up @@ -4594,18 +4594,16 @@ def test_special_unbound_method_types(self):
def test_not_implemented(self):
# Testing NotImplemented...
# all binary methods should be able to return a NotImplemented
import operator

def specialmethod(self, other):
return NotImplemented

def check(expr, x, y):
try:
exec(expr, {'x': x, 'y': y, 'operator': operator})
except TypeError:
pass
else:
self.fail("no TypeError from %r" % (expr,))
with (
self.subTest(expr=expr, x=x, y=y),
self.assertRaises(TypeError),
):
exec(expr, {'x': x, 'y': y})

N1 = sys.maxsize + 1 # might trigger OverflowErrors instead of
# TypeErrors
Expand All @@ -4626,12 +4624,23 @@ def check(expr, x, y):
('__and__', 'x & y', 'x &= y'),
('__or__', 'x | y', 'x |= y'),
('__xor__', 'x ^ y', 'x ^= y')]:
rname = '__r' + name[2:]
# Defines 'left' magic method:
A = type('A', (), {name: specialmethod})
a = A()
check(expr, a, a)
check(expr, a, N1)
check(expr, a, N2)
# Defines 'right' magic method:
rname = '__r' + name[2:]
B = type('B', (), {rname: specialmethod})
b = B()
check(expr, b, b)
check(expr, a, b)
check(expr, b, a)
check(expr, b, N1)
check(expr, b, N2)
check(expr, N1, b)
check(expr, N2, b)
if iexpr:
check(iexpr, a, a)
check(iexpr, a, N1)
Expand Down

0 comments on commit 1a1e013

Please sign in to comment.