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

Method testSumProd

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

Source from the content-addressed store, hash-verified

1314 self.assertAlmostEqual(math.log10(v), size * 0.3010299956639812)
1315
1316 def testSumProd(self):
1317 sumprod = math.sumprod
1318 Decimal = decimal.Decimal
1319 Fraction = fractions.Fraction
1320
1321 # Core functionality
1322 self.assertEqual(sumprod(iter([10, 20, 30]), (1, 2, 3)), 140)
1323 self.assertEqual(sumprod([1.5, 2.5], [3.5, 4.5]), 16.5)
1324 self.assertEqual(sumprod([], []), 0)
1325 self.assertEqual(sumprod([-1], [1.]), -1)
1326 self.assertEqual(sumprod([1.], [-1]), -1)
1327
1328 # Type preservation and coercion
1329 for v in [
1330 (10, 20, 30),
1331 (1.5, -2.5),
1332 (Fraction(3, 5), Fraction(4, 5)),
1333 (Decimal(3.5), Decimal(4.5)),
1334 (2.5, 10), # float/int
1335 (2.5, Fraction(3, 5)), # float/fraction
1336 (25, Fraction(3, 5)), # int/fraction
1337 (25, Decimal(4.5)), # int/decimal
1338 ]:
1339 for p, q in [(v, v), (v, v[::-1])]:
1340 with self.subTest(p=p, q=q):
1341 expected = sum(p_i * q_i for p_i, q_i in zip(p, q, strict=True))
1342 actual = sumprod(p, q)
1343 self.assertEqual(expected, actual)
1344 self.assertEqual(type(expected), type(actual))
1345
1346 # Bad arguments
1347 self.assertRaises(TypeError, sumprod) # No args
1348 self.assertRaises(TypeError, sumprod, []) # One arg
1349 self.assertRaises(TypeError, sumprod, [], [], []) # Three args
1350 self.assertRaises(TypeError, sumprod, None, [10]) # Non-iterable
1351 self.assertRaises(TypeError, sumprod, [10], None) # Non-iterable
1352 self.assertRaises(TypeError, sumprod, ['x'], [1.0])
1353
1354 # Uneven lengths
1355 self.assertRaises(ValueError, sumprod, [10, 20], [30])
1356 self.assertRaises(ValueError, sumprod, [10], [20, 30])
1357
1358 # Overflows
1359 self.assertEqual(sumprod([10**20], [1]), 10**20)
1360 self.assertEqual(sumprod([1], [10**20]), 10**20)
1361 self.assertEqual(sumprod([10**10], [10**10]), 10**20)
1362 self.assertEqual(sumprod([10**7]*10**5, [10**7]*10**5), 10**19)
1363 self.assertRaises(OverflowError, sumprod, [10**1000], [1.0])
1364 self.assertRaises(OverflowError, sumprod, [1.0], [10**1000])
1365
1366 # Error in iterator
1367 def raise_after(n):
1368 for i in range(n):
1369 yield i
1370 raise RuntimeError
1371 with self.assertRaises(RuntimeError):
1372 sumprod(range(10), raise_after(5))
1373 with self.assertRaises(RuntimeError):

Callers

nothing calls this directly

Calls 8

FractionClass · 0.90
DecimalClass · 0.90
BasicIterClassClass · 0.90
BadMultiplyClass · 0.85
assertTrueMethod · 0.80
assertEqualMethod · 0.45
subTestMethod · 0.45
assertRaisesMethod · 0.45

Tested by

no test coverage detected