diff options
Diffstat (limited to 'Lib/test/test_weakset.py')
-rw-r--r-- | Lib/test/test_weakset.py | 52 |
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) |