mirror of
https://github.com/python/cpython.git
synced 2025-08-31 05:58:33 +00:00
* Improve code for the empty frozenset singleton:
- Handle both frozenset() and frozenset([]). - Do not use singleton for frozenset subclasses. - Finalize the singleton. - Add test cases. * Factor-out set_update_internal() from set_update(). Simplifies the code for several internal callers. * Factor constant expressions out of loop in set_merge_internal(). * Minor comment touch-ups.
This commit is contained in:
parent
e295676c87
commit
d794666048
5 changed files with 89 additions and 65 deletions
|
@ -391,6 +391,15 @@ class TestFrozenSet(TestJointOps):
|
|||
s.__init__(self.otherword)
|
||||
self.assertEqual(s, set(self.word))
|
||||
|
||||
def test_singleton_empty_frozenset(self):
|
||||
f = frozenset()
|
||||
efs = [frozenset(), frozenset([]), frozenset(()), frozenset(''),
|
||||
frozenset(), frozenset([]), frozenset(()), frozenset(''),
|
||||
frozenset(xrange(0)), frozenset(frozenset()),
|
||||
frozenset(f), f]
|
||||
# All of the empty frozensets should have just one id()
|
||||
self.assertEqual(len(set(map(id, efs))), 1)
|
||||
|
||||
def test_constructor_identity(self):
|
||||
s = self.thetype(range(3))
|
||||
t = self.thetype(s)
|
||||
|
@ -456,6 +465,17 @@ class TestFrozenSetSubclass(TestFrozenSet):
|
|||
t = self.thetype(s)
|
||||
self.assertEqual(s, t)
|
||||
|
||||
def test_singleton_empty_frozenset(self):
|
||||
Frozenset = self.thetype
|
||||
f = frozenset()
|
||||
F = Frozenset()
|
||||
efs = [Frozenset(), Frozenset([]), Frozenset(()), Frozenset(''),
|
||||
Frozenset(), Frozenset([]), Frozenset(()), Frozenset(''),
|
||||
Frozenset(xrange(0)), Frozenset(Frozenset()),
|
||||
Frozenset(frozenset()), f, F, Frozenset(f), Frozenset(F)]
|
||||
# All empty frozenset subclass instances should have different ids
|
||||
self.assertEqual(len(set(map(id, efs))), len(efs))
|
||||
|
||||
# Tests taken from test_sets.py =============================================
|
||||
|
||||
empty_set = set()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue