check for overflows in permutations() and product() (closes #23363, closes #23364)
diff --git a/Lib/test/test_itertools.py b/Lib/test/test_itertools.py
index 9cd3ad8..3c7dd49 100644
--- a/Lib/test/test_itertools.py
+++ b/Lib/test/test_itertools.py
@@ -284,6 +284,13 @@
self.assertEqual(result, list(permutations(values, None))) # test r as None
self.assertEqual(result, list(permutations(values))) # test default r
+ @test_support.bigaddrspacetest
+ def test_permutations_overflow(self):
+ with self.assertRaises(OverflowError):
+ permutations("A", 2**30)
+ with self.assertRaises(OverflowError):
+ permutations("A", 2, 2**30)
+
@test_support.impl_detail("tuple reuse is specific to CPython")
def test_permutations_tuple_reuse(self):
self.assertEqual(len(set(map(id, permutations('abcde', 3)))), 1)
@@ -702,6 +709,11 @@
args = map(iter, args)
self.assertEqual(len(list(product(*args))), expected_len)
+ @test_support.bigaddrspacetest
+ def test_product_overflow(self):
+ with self.assertRaises(OverflowError):
+ product(["a"]*(2**16), repeat=2**16)
+
@test_support.impl_detail("tuple reuse is specific to CPython")
def test_product_tuple_reuse(self):
self.assertEqual(len(set(map(id, product('abc', 'def')))), 1)