diff options
author | Pablo Galindo <Pablogsal@gmail.com> | 2019-02-07 07:04:02 (GMT) |
---|---|---|
committer | Raymond Hettinger <rhettinger@users.noreply.github.com> | 2019-02-07 07:04:02 (GMT) |
commit | bc098515864d0d1ffe8fb97ca1a0526c30fee45a (patch) | |
tree | 2a39dfe4d826700abc132c01db7a92f0de76a7b7 /Lib/test/test_math.py | |
parent | e9bc4172d18db9c182d8e04dd7b033097a994c06 (diff) | |
download | cpython-bc098515864d0d1ffe8fb97ca1a0526c30fee45a.zip cpython-bc098515864d0d1ffe8fb97ca1a0526c30fee45a.tar.gz cpython-bc098515864d0d1ffe8fb97ca1a0526c30fee45a.tar.bz2 |
bpo-35606: Implement math.prod (GH-11359)
Diffstat (limited to 'Lib/test/test_math.py')
-rw-r--r-- | Lib/test/test_math.py | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/Lib/test/test_math.py b/Lib/test/test_math.py index f9b11f3..083759ca 100644 --- a/Lib/test/test_math.py +++ b/Lib/test/test_math.py @@ -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 |