Issue 5964: Fixed WeakSet __eq__ comparison to handle non-WeakSet objects.

This commit is contained in:
Robert Schuppenies 2009-05-17 17:32:20 +00:00
parent 441efa8955
commit 4ad1d6f81a
2 changed files with 15 additions and 10 deletions

View File

@ -118,6 +118,8 @@ class WeakSet:
return self.data >= set(ref(item) for item in other)
def __eq__(self, other):
if not isinstance(other, self.__class__):
return NotImplemented
return self.data == set(ref(item) for item in other)
def symmetric_difference(self, other):

View File

@ -134,13 +134,11 @@ class TestWeakSet(unittest.TestCase):
def test_gc(self):
# Create a nest of cycles to exercise overall ref count check
class A:
pass
s = set(A() for i in range(1000))
s = WeakSet(Foo() for i in range(1000))
for elem in s:
elem.cycle = s
elem.sub = elem
elem.set = set([elem])
elem.set = WeakSet([elem])
def test_subclass_with_custom_hash(self):
# Bug #1257731
@ -169,17 +167,12 @@ class TestWeakSet(unittest.TestCase):
t = WeakSet(s)
self.assertNotEqual(id(s), id(t))
def test_set_literal(self):
s = set([1,2,3])
t = {1,2,3}
self.assertEqual(s, t)
def test_hash(self):
self.assertRaises(TypeError, hash, self.s)
def test_clear(self):
self.s.clear()
self.assertEqual(self.s, set())
self.assertEqual(self.s, WeakSet([]))
self.assertEqual(len(self.s), 0)
def test_copy(self):
@ -304,6 +297,16 @@ class TestWeakSet(unittest.TestCase):
t ^= t
self.assertEqual(t, WeakSet())
def test_eq(self):
# issue 5964
self.assertTrue(self.s == self.s)
self.assertTrue(self.s == WeakSet(self.items))
self.assertFalse(self.s == set(self.items))
self.assertFalse(self.s == list(self.items))
self.assertFalse(self.s == tuple(self.items))
self.assertFalse(self.s == WeakSet([Foo]))
self.assertFalse(self.s == 1)
def test_main(verbose=None):
support.run_unittest(TestWeakSet)