mirror of
https://github.com/python/cpython.git
synced 2025-08-31 14:07:50 +00:00
bpo-35606: Implement math.prod (GH-11359)
This commit is contained in:
parent
e9bc4172d1
commit
bc09851586
6 changed files with 260 additions and 1 deletions
|
@ -1724,6 +1724,37 @@ class IsCloseTests(unittest.TestCase):
|
|||
self.assertAllClose(fraction_examples, rel_tol=1e-8)
|
||||
self.assertAllNotClose(fraction_examples, rel_tol=1e-9)
|
||||
|
||||
def test_prod(self):
|
||||
prod = math.prod
|
||||
self.assertEqual(prod([]), 1)
|
||||
self.assertEqual(prod([], start=5), 5)
|
||||
self.assertEqual(prod(list(range(2,8))), 5040)
|
||||
self.assertEqual(prod(iter(list(range(2,8)))), 5040)
|
||||
self.assertEqual(prod(range(1, 10), start=10), 3628800)
|
||||
|
||||
self.assertEqual(prod([1, 2, 3, 4, 5]), 120)
|
||||
self.assertEqual(prod([1.0, 2.0, 3.0, 4.0, 5.0]), 120.0)
|
||||
self.assertEqual(prod([1, 2, 3, 4.0, 5.0]), 120.0)
|
||||
self.assertEqual(prod([1.0, 2.0, 3.0, 4, 5]), 120.0)
|
||||
|
||||
# Test overflow in fast-path for integers
|
||||
self.assertEqual(prod([1, 1, 2**32, 1, 1]), 2**32)
|
||||
# Test overflow in fast-path for floats
|
||||
self.assertEqual(prod([1.0, 1.0, 2**32, 1, 1]), float(2**32))
|
||||
|
||||
self.assertRaises(TypeError, prod)
|
||||
self.assertRaises(TypeError, prod, 42)
|
||||
self.assertRaises(TypeError, prod, ['a', 'b', 'c'])
|
||||
self.assertRaises(TypeError, prod, ['a', 'b', 'c'], '')
|
||||
self.assertRaises(TypeError, prod, [b'a', b'c'], b'')
|
||||
values = [bytearray(b'a'), bytearray(b'b')]
|
||||
self.assertRaises(TypeError, prod, values, bytearray(b''))
|
||||
self.assertRaises(TypeError, prod, [[1], [2], [3]])
|
||||
self.assertRaises(TypeError, prod, [{2:3}])
|
||||
self.assertRaises(TypeError, prod, [{2:3}]*2, {2:3})
|
||||
self.assertRaises(TypeError, prod, [[1], [2], [3]], [])
|
||||
with self.assertRaises(TypeError):
|
||||
prod([10, 20], [30, 40]) # start is a keyword-only argument
|
||||
|
||||
def test_main():
|
||||
from doctest import DocFileSuite
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue