From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Tue, 28 Sep 2021 20:19:02 +0000 (-0700) Subject: bpo-35606: Fix math.prod tests using 'start' as keyword parameter (GH-28595) (GH... X-Git-Tag: v3.9.8~123 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=cd00fee8dd63bc3a1360280f55640409cb579a05;p=thirdparty%2FPython%2Fcpython.git bpo-35606: Fix math.prod tests using 'start' as keyword parameter (GH-28595) (GH-28604) (cherry picked from commit 84975146a7ce64f1d50dcec8311b7f7188a5c962) Co-authored-by: Pablo Galindo Salgado --- diff --git a/Lib/test/test_math.py b/Lib/test/test_math.py index 4b848a5e7e5f..3fe0702bcaeb 100644 --- a/Lib/test/test_math.py +++ b/Lib/test/test_math.py @@ -1724,16 +1724,22 @@ class MathTests(unittest.TestCase): 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'') + self.assertRaises(TypeError, prod, ['a', 'b', 'c'], start='') + self.assertRaises(TypeError, prod, [b'a', b'c'], start=b'') values = [bytearray(b'a'), bytearray(b'b')] - self.assertRaises(TypeError, prod, values, bytearray(b'')) + self.assertRaises(TypeError, prod, values, start=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]], []) + self.assertRaises(TypeError, prod, [{2:3}]*2, start={2:3}) + self.assertRaises(TypeError, prod, [[1], [2], [3]], start=[]) + + # Some odd cases + self.assertEqual(prod([2, 3], start='ab'), 'abababababab') + self.assertEqual(prod([2, 3], start=[1, 2]), [1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2]) + self.assertEqual(prod([], start={2: 3}), {2:3}) + with self.assertRaises(TypeError): - prod([10, 20], [30, 40]) # start is a keyword-only argument + prod([10, 20], 1) # start is a keyword-only argument self.assertEqual(prod([0, 1, 2, 3]), 0) self.assertEqual(prod([1, 0, 2, 3]), 0) diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c index 4aa7e6559af5..c974601b95e3 100644 --- a/Modules/mathmodule.c +++ b/Modules/mathmodule.c @@ -2969,14 +2969,9 @@ math_prod_impl(PyObject *module, PyObject *iterable, PyObject *start) } if (result == NULL) { - result = PyLong_FromLong(1); - if (result == NULL) { - Py_DECREF(iter); - return NULL; - } - } else { - Py_INCREF(result); + result = _PyLong_One; } + Py_INCREF(result); #ifndef SLOW_PROD /* Fast paths for integers keeping temporary products in C. * Assumes all inputs are the same type. @@ -2992,7 +2987,7 @@ math_prod_impl(PyObject *module, PyObject *iterable, PyObject *start) } /* Loop over all the items in the iterable until we finish, we overflow * or we found a non integer element */ - while(result == NULL) { + while (result == NULL) { item = PyIter_Next(iter); if (item == NULL) { Py_DECREF(iter);