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):
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
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):
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)