summaryrefslogtreecommitdiff
path: root/Lib/test/test_set.py
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2017-01-25 13:25:52 +0200
committerSerhiy Storchaka <storchaka@gmail.com>2017-01-25 13:25:52 +0200
commit3f19a274c28567afb39ba46ea8a2ebdeab816b0b (patch)
treeb455925dd27f3d6e421d9fca9f3295b988a24254 /Lib/test/test_set.py
parentb0cbde5d42f12b3aca11b87c017b3c60a26be4fd (diff)
parentc8486579312320fd09c56ce9fce3da7ea0ffd132 (diff)
downloadcpython-3f19a274c28567afb39ba46ea8a2ebdeab816b0b.tar.gz
Issue #27867: Function PySlice_GetIndicesEx() is replaced with a macro if
Py_LIMITED_API is not set or set to the value between 0x03050400 and 0x03060000 (not including) or 0x03060100 or higher.
Diffstat (limited to 'Lib/test/test_set.py')
-rw-r--r--Lib/test/test_set.py22
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