diff options
author | Martin Panter <vadmium+py@gmail.com> | 2017-01-29 10:09:43 +0000 |
---|---|---|
committer | Martin Panter <vadmium+py@gmail.com> | 2017-01-29 10:09:43 +0000 |
commit | 6d1d733828b49eb03d45da81c6b8c6b849fbc5df (patch) | |
tree | b0b120d6c527fb8cf6e4a0f175556611673ad780 /Lib/test/test_set.py | |
parent | 357e8cdc9b1c5a99be9ade2b1070c38d50ddadc6 (diff) | |
parent | 23282e54fdd766945930006ab606641a2db37a4c (diff) | |
download | cpython-6d1d733828b49eb03d45da81c6b8c6b849fbc5df.tar.gz |
Issues #29349: Merge Py 2 fix 3.5
Diffstat (limited to 'Lib/test/test_set.py')
-rw-r--r-- | Lib/test/test_set.py | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/Lib/test/test_set.py b/Lib/test/test_set.py index 7594303132..0202981d67 100644 --- a/Lib/test/test_set.py +++ b/Lib/test/test_set.py @@ -6,10 +6,11 @@ import operator import copy import pickle from random import randrange, shuffle -import sys import warnings import collections import collections.abc +import itertools +import string class PassThru(Exception): pass @@ -729,6 +730,25 @@ class TestFrozenSet(TestJointOps, unittest.TestCase): addhashvalue(hash(frozenset([e for e, m in elemmasks if m&i]))) self.assertEqual(len(hashvalues), 2**n) + def zf_range(n): + # https://en.wikipedia.org/wiki/Set-theoretic_definition_of_natural_numbers + nums = [frozenset()] + for i in range(n-1): + num = frozenset(nums) + nums.append(num) + return nums[:n] + + def powerset(s): + for i in range(len(s)+1): + yield from map(frozenset, itertools.combinations(s, i)) + + for n in range(18): + t = 2 ** n + mask = t - 1 + for nums in (range, zf_range): + u = len({h & mask for h in map(hash, powerset(nums(n)))}) + self.assertGreater(4*u, t) + class FrozenSetSubclass(frozenset): pass |