Skip to content

Commit 4ad1d6f

Browse files
author
Robert Schuppenies
committed
Issue 5964: Fixed WeakSet __eq__ comparison to handle non-WeakSet objects.
1 parent 441efa8 commit 4ad1d6f

File tree

2 files changed

+15
-10
lines changed

2 files changed

+15
-10
lines changed

Lib/_weakrefset.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ def __ge__(self, other):
118118
return self.data >= set(ref(item) for item in other)
119119

120120
def __eq__(self, other):
121+
if not isinstance(other, self.__class__):
122+
return NotImplemented
121123
return self.data == set(ref(item) for item in other)
122124

123125
def symmetric_difference(self, other):

Lib/test/test_weakset.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -134,13 +134,11 @@ def test_sub_and_super(self):
134134

135135
def test_gc(self):
136136
# Create a nest of cycles to exercise overall ref count check
137-
class A:
138-
pass
139-
s = set(A() for i in range(1000))
137+
s = WeakSet(Foo() for i in range(1000))
140138
for elem in s:
141139
elem.cycle = s
142140
elem.sub = elem
143-
elem.set = set([elem])
141+
elem.set = WeakSet([elem])
144142

145143
def test_subclass_with_custom_hash(self):
146144
# Bug #1257731
@@ -169,17 +167,12 @@ def test_constructor_identity(self):
169167
t = WeakSet(s)
170168
self.assertNotEqual(id(s), id(t))
171169

172-
def test_set_literal(self):
173-
s = set([1,2,3])
174-
t = {1,2,3}
175-
self.assertEqual(s, t)
176-
177170
def test_hash(self):
178171
self.assertRaises(TypeError, hash, self.s)
179172

180173
def test_clear(self):
181174
self.s.clear()
182-
self.assertEqual(self.s, set())
175+
self.assertEqual(self.s, WeakSet([]))
183176
self.assertEqual(len(self.s), 0)
184177

185178
def test_copy(self):
@@ -304,6 +297,16 @@ def test_inplace_on_self(self):
304297
t ^= t
305298
self.assertEqual(t, WeakSet())
306299

300+
def test_eq(self):
301+
# issue 5964
302+
self.assertTrue(self.s == self.s)
303+
self.assertTrue(self.s == WeakSet(self.items))
304+
self.assertFalse(self.s == set(self.items))
305+
self.assertFalse(self.s == list(self.items))
306+
self.assertFalse(self.s == tuple(self.items))
307+
self.assertFalse(self.s == WeakSet([Foo]))
308+
self.assertFalse(self.s == 1)
309+
307310

308311
def test_main(verbose=None):
309312
support.run_unittest(TestWeakSet)

0 commit comments

Comments
 (0)