MCPcopy Index your code
hub / github.com/python/cpython / test_prod

Method test_prod

Lib/test/test_math.py:2215–2315  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

2213 '\n '.join(failures))
2214
2215 def test_prod(self):
2216 from fractions import Fraction as F
2217
2218 prod = math.prod
2219 self.assertEqual(prod([]), 1)
2220 self.assertEqual(prod([], start=5), 5)
2221 self.assertEqual(prod(list(range(2,8))), 5040)
2222 self.assertEqual(prod(iter(list(range(2,8)))), 5040)
2223 self.assertEqual(prod(range(1, 10), start=10), 3628800)
2224
2225 self.assertEqual(prod([1, 2, 3, 4, 5]), 120)
2226 self.assertEqual(prod([1.0, 2.0, 3.0, 4.0, 5.0]), 120.0)
2227 self.assertEqual(prod([1, 2, 3, 4.0, 5.0]), 120.0)
2228 self.assertEqual(prod([1.0, 2.0, 3.0, 4, 5]), 120.0)
2229 self.assertEqual(prod([1., F(3, 2)]), 1.5)
2230
2231 # Error in multiplication
2232 class BadMultiply:
2233 def __rmul__(self, other):
2234 raise RuntimeError
2235 with self.assertRaises(RuntimeError):
2236 prod([10., BadMultiply()])
2237
2238 # Test overflow in fast-path for integers
2239 self.assertEqual(prod([1, 1, 2**32, 1, 1]), 2**32)
2240 # Test overflow in fast-path for floats
2241 self.assertEqual(prod([1.0, 1.0, 2**32, 1, 1]), float(2**32))
2242
2243 self.assertRaises(TypeError, prod)
2244 self.assertRaises(TypeError, prod, 42)
2245 self.assertRaises(TypeError, prod, ['a', 'b', 'c'])
2246 self.assertRaises(TypeError, prod, ['a', 'b', 'c'], start='')
2247 self.assertRaises(TypeError, prod, [b'a', b'c'], start=b'')
2248 values = [bytearray(b'a'), bytearray(b'b')]
2249 self.assertRaises(TypeError, prod, values, start=bytearray(b''))
2250 self.assertRaises(TypeError, prod, [[1], [2], [3]])
2251 self.assertRaises(TypeError, prod, [{2:3}])
2252 self.assertRaises(TypeError, prod, [{2:3}]*2, start={2:3})
2253 self.assertRaises(TypeError, prod, [[1], [2], [3]], start=[])
2254
2255 # Some odd cases
2256 self.assertEqual(prod([2, 3], start='ab'), 'abababababab')
2257 self.assertEqual(prod([2, 3], start=[1, 2]), [1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2])
2258 self.assertEqual(prod([], start={2: 3}), {2:3})
2259
2260 with self.assertRaises(TypeError):
2261 prod([10, 20], 1) # start is a keyword-only argument
2262
2263 self.assertEqual(prod([0, 1, 2, 3]), 0)
2264 self.assertEqual(prod([1, 0, 2, 3]), 0)
2265 self.assertEqual(prod([1, 2, 3, 0]), 0)
2266
2267 def _naive_prod(iterable, start=1):
2268 for elem in iterable:
2269 start *= elem
2270 return start
2271
2272 # Big integers

Callers

nothing calls this directly

Calls 7

assertIsNaNMethod · 0.95
listClass · 0.85
BadMultiplyClass · 0.85
prodFunction · 0.70
FClass · 0.70
assertEqualMethod · 0.45
assertRaisesMethod · 0.45

Tested by

no test coverage detected