MCPcopy Index your code
hub / github.com/RustPython/RustPython / test_prod

Method test_prod

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

Source from the content-addressed store, hash-verified

2171 '\n '.join(failures))
2172
2173 def test_prod(self):
2174 from fractions import Fraction as F
2175
2176 prod = math.prod
2177 self.assertEqual(prod([]), 1)
2178 self.assertEqual(prod([], start=5), 5)
2179 self.assertEqual(prod(list(range(2,8))), 5040)
2180 self.assertEqual(prod(iter(list(range(2,8)))), 5040)
2181 self.assertEqual(prod(range(1, 10), start=10), 3628800)
2182
2183 self.assertEqual(prod([1, 2, 3, 4, 5]), 120)
2184 self.assertEqual(prod([1.0, 2.0, 3.0, 4.0, 5.0]), 120.0)
2185 self.assertEqual(prod([1, 2, 3, 4.0, 5.0]), 120.0)
2186 self.assertEqual(prod([1.0, 2.0, 3.0, 4, 5]), 120.0)
2187 self.assertEqual(prod([1., F(3, 2)]), 1.5)
2188
2189 # Error in multiplication
2190 class BadMultiply:
2191 def __rmul__(self, other):
2192 raise RuntimeError
2193 with self.assertRaises(RuntimeError):
2194 prod([10., BadMultiply()])
2195
2196 # Test overflow in fast-path for integers
2197 self.assertEqual(prod([1, 1, 2**32, 1, 1]), 2**32)
2198 # Test overflow in fast-path for floats
2199 self.assertEqual(prod([1.0, 1.0, 2**32, 1, 1]), float(2**32))
2200
2201 self.assertRaises(TypeError, prod)
2202 self.assertRaises(TypeError, prod, 42)
2203 self.assertRaises(TypeError, prod, ['a', 'b', 'c'])
2204 self.assertRaises(TypeError, prod, ['a', 'b', 'c'], start='')
2205 self.assertRaises(TypeError, prod, [b'a', b'c'], start=b'')
2206 values = [bytearray(b'a'), bytearray(b'b')]
2207 self.assertRaises(TypeError, prod, values, start=bytearray(b''))
2208 self.assertRaises(TypeError, prod, [[1], [2], [3]])
2209 self.assertRaises(TypeError, prod, [{2:3}])
2210 self.assertRaises(TypeError, prod, [{2:3}]*2, start={2:3})
2211 self.assertRaises(TypeError, prod, [[1], [2], [3]], start=[])
2212
2213 # Some odd cases
2214 self.assertEqual(prod([2, 3], start='ab'), 'abababababab')
2215 self.assertEqual(prod([2, 3], start=[1, 2]), [1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2])
2216 self.assertEqual(prod([], start={2: 3}), {2:3})
2217
2218 with self.assertRaises(TypeError):
2219 prod([10, 20], 1) # start is a keyword-only argument
2220
2221 self.assertEqual(prod([0, 1, 2, 3]), 0)
2222 self.assertEqual(prod([1, 0, 2, 3]), 0)
2223 self.assertEqual(prod([1, 2, 3, 0]), 0)
2224
2225 def _naive_prod(iterable, start=1):
2226 for elem in iterable:
2227 start *= elem
2228 return start
2229
2230 # Big integers

Callers

nothing calls this directly

Calls 8

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

Tested by

no test coverage detected