aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Lib/test/test_weakset.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test_weakset.py')
-rw-r--r--Lib/test/test_weakset.py52
1 files changed, 21 insertions, 31 deletions
diff --git a/Lib/test/test_weakset.py b/Lib/test/test_weakset.py
index d9e091ed02f..4d3878f8a65 100644
--- a/Lib/test/test_weakset.py
+++ b/Lib/test/test_weakset.py
@@ -1,5 +1,5 @@
import unittest
-from test import test_support
+from test import support
from weakref import proxy, ref, WeakSet
import operator
import copy
@@ -9,6 +9,7 @@ from random import randrange, shuffle
import sys
import warnings
import collections
+from collections import UserString as ustr
import gc
import contextlib
@@ -16,40 +17,27 @@ import contextlib
class Foo:
pass
-class SomeClass(object):
- def __init__(self, value):
- self.value = value
- def __eq__(self, other):
- if type(other) != type(self):
- return False
- return other.value == self.value
-
- def __ne__(self, other):
- return not self.__eq__(other)
-
- def __hash__(self):
- return hash((SomeClass, self.value))
-
-class RefCycle(object):
+class RefCycle:
def __init__(self):
self.cycle = self
+
class TestWeakSet(unittest.TestCase):
def setUp(self):
# need to keep references to them
- self.items = [SomeClass(c) for c in ('a', 'b', 'c')]
- self.items2 = [SomeClass(c) for c in ('x', 'y', 'z')]
- self.letters = [SomeClass(c) for c in string.ascii_letters]
- self.ab_items = [SomeClass(c) for c in 'ab']
- self.abcde_items = [SomeClass(c) for c in 'abcde']
- self.def_items = [SomeClass(c) for c in 'def']
+ self.items = [ustr(c) for c in ('a', 'b', 'c')]
+ self.items2 = [ustr(c) for c in ('x', 'y', 'z')]
+ self.ab_items = [ustr(c) for c in 'ab']
+ self.abcde_items = [ustr(c) for c in 'abcde']
+ self.def_items = [ustr(c) for c in 'def']
self.ab_weakset = WeakSet(self.ab_items)
self.abcde_weakset = WeakSet(self.abcde_items)
self.def_weakset = WeakSet(self.def_items)
+ self.letters = [ustr(c) for c in string.ascii_letters]
self.s = WeakSet(self.items)
self.d = dict.fromkeys(self.items)
- self.obj = SomeClass('F')
+ self.obj = ustr('F')
self.fs = WeakSet([self.obj])
def test_methods(self):
@@ -76,7 +64,7 @@ class TestWeakSet(unittest.TestCase):
self.assertNotIn(1, self.s)
self.assertIn(self.obj, self.fs)
del self.obj
- self.assertNotIn(SomeClass('F'), self.fs)
+ self.assertNotIn(ustr('F'), self.fs)
def test_union(self):
u = self.s.union(self.items2)
@@ -226,7 +214,7 @@ class TestWeakSet(unittest.TestCase):
self.assertNotEqual(id(self.s), id(dup))
def test_add(self):
- x = SomeClass('Q')
+ x = ustr('Q')
self.s.add(x)
self.assertIn(x, self.s)
dup = self.s.copy()
@@ -239,14 +227,14 @@ class TestWeakSet(unittest.TestCase):
self.assertTrue(len(self.fs) == 1)
def test_remove(self):
- x = SomeClass('a')
+ x = ustr('a')
self.s.remove(x)
self.assertNotIn(x, self.s)
self.assertRaises(KeyError, self.s.remove, x)
self.assertRaises(TypeError, self.s.remove, [])
def test_discard(self):
- a, q = SomeClass('a'), SomeClass('Q')
+ a, q = ustr('a'), ustr('Q')
self.s.discard(a)
self.assertNotIn(a, self.s)
self.s.discard(q)
@@ -349,12 +337,13 @@ class TestWeakSet(unittest.TestCase):
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_weak_destroy_while_iterating(self):
# Issue #7105: iterators shouldn't crash when a key is implicitly removed
# Create new items to be sure no-one else holds a reference
- items = [SomeClass(c) for c in ('a', 'b', 'c')]
+ items = [ustr(c) for c in ('a', 'b', 'c')]
s = WeakSet(items)
it = iter(s)
next(it) # Trigger internal iteration
@@ -369,15 +358,16 @@ class TestWeakSet(unittest.TestCase):
def test_weak_destroy_and_mutate_while_iterating(self):
# Issue #7105: iterators shouldn't crash when a key is implicitly removed
- items = [SomeClass(c) for c in string.ascii_letters]
+ items = [ustr(c) for c in string.ascii_letters]
s = WeakSet(items)
@contextlib.contextmanager
def testcontext():
try:
it = iter(s)
next(it)
+ del it
# Schedule an item for removal and recreate it
- u = SomeClass(str(items.pop()))
+ u = ustr(str(items.pop()))
gc.collect() # just in case
yield u
finally:
@@ -444,7 +434,7 @@ class TestWeakSet(unittest.TestCase):
def test_main(verbose=None):
- test_support.run_unittest(TestWeakSet)
+ support.run_unittest(TestWeakSet)
if __name__ == "__main__":
test_main(verbose=True)