Issue #16373: Prevent infinite recursion for ABC Set class comparisons.
This commit is contained in:
parent
d919da9942
commit
7c573857c7
|
@ -165,12 +165,12 @@ class Set(Sized, Iterable, Container):
|
||||||
def __gt__(self, other):
|
def __gt__(self, other):
|
||||||
if not isinstance(other, Set):
|
if not isinstance(other, Set):
|
||||||
return NotImplemented
|
return NotImplemented
|
||||||
return other < self
|
return other.__lt__(self)
|
||||||
|
|
||||||
def __ge__(self, other):
|
def __ge__(self, other):
|
||||||
if not isinstance(other, Set):
|
if not isinstance(other, Set):
|
||||||
return NotImplemented
|
return NotImplemented
|
||||||
return other <= self
|
return other.__le__(self)
|
||||||
|
|
||||||
def __eq__(self, other):
|
def __eq__(self, other):
|
||||||
if not isinstance(other, Set):
|
if not isinstance(other, Set):
|
||||||
|
|
|
@ -594,6 +594,35 @@ class TestCollectionABCs(ABCTestCase):
|
||||||
s |= s
|
s |= s
|
||||||
self.assertEqual(s, full)
|
self.assertEqual(s, full)
|
||||||
|
|
||||||
|
def test_issue16373(self):
|
||||||
|
# Recursion error comparing comparable and noncomparable
|
||||||
|
# Set instances
|
||||||
|
class MyComparableSet(Set):
|
||||||
|
def __contains__(self, x):
|
||||||
|
return False
|
||||||
|
def __len__(self):
|
||||||
|
return 0
|
||||||
|
def __iter__(self):
|
||||||
|
return iter([])
|
||||||
|
class MyNonComparableSet(Set):
|
||||||
|
def __contains__(self, x):
|
||||||
|
return False
|
||||||
|
def __len__(self):
|
||||||
|
return 0
|
||||||
|
def __iter__(self):
|
||||||
|
return iter([])
|
||||||
|
def __le__(self, x):
|
||||||
|
return NotImplemented
|
||||||
|
def __lt__(self, x):
|
||||||
|
return NotImplemented
|
||||||
|
|
||||||
|
cs = MyComparableSet()
|
||||||
|
ncs = MyNonComparableSet()
|
||||||
|
self.assertFalse(ncs < cs)
|
||||||
|
self.assertFalse(ncs <= cs)
|
||||||
|
self.assertFalse(cs > ncs)
|
||||||
|
self.assertFalse(cs >= ncs)
|
||||||
|
|
||||||
def test_Mapping(self):
|
def test_Mapping(self):
|
||||||
for sample in [dict]:
|
for sample in [dict]:
|
||||||
self.assertIsInstance(sample(), Mapping)
|
self.assertIsInstance(sample(), Mapping)
|
||||||
|
|
|
@ -15,6 +15,8 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #16373: Prevent infinite recursion for ABC Set class comparisons.
|
||||||
|
|
||||||
- Issue #19138: doctest's IGNORE_EXCEPTION_DETAIL now allows a match when
|
- Issue #19138: doctest's IGNORE_EXCEPTION_DETAIL now allows a match when
|
||||||
no exception detail exists (no colon following the exception's name, or
|
no exception detail exists (no colon following the exception's name, or
|
||||||
a colon does follow but no text follows the colon).
|
a colon does follow but no text follows the colon).
|
||||||
|
|
Loading…
Reference in New Issue