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

Method testSumProd

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

Source from the content-addressed store, hash-verified

1292 self.assertAlmostEqual(math.log10(v), size * 0.3010299956639812)
1293
1294 def testSumProd(self):
1295 sumprod = math.sumprod
1296 Decimal = decimal.Decimal
1297 Fraction = fractions.Fraction
1298
1299 # Core functionality
1300 self.assertEqual(sumprod(iter([10, 20, 30]), (1, 2, 3)), 140)
1301 self.assertEqual(sumprod([1.5, 2.5], [3.5, 4.5]), 16.5)
1302 self.assertEqual(sumprod([], []), 0)
1303 self.assertEqual(sumprod([-1], [1.]), -1)
1304 self.assertEqual(sumprod([1.], [-1]), -1)
1305
1306 # Type preservation and coercion
1307 for v in [
1308 (10, 20, 30),
1309 (1.5, -2.5),
1310 (Fraction(3, 5), Fraction(4, 5)),
1311 (Decimal(3.5), Decimal(4.5)),
1312 (2.5, 10), # float/int
1313 (2.5, Fraction(3, 5)), # float/fraction
1314 (25, Fraction(3, 5)), # int/fraction
1315 (25, Decimal(4.5)), # int/decimal
1316 ]:
1317 for p, q in [(v, v), (v, v[::-1])]:
1318 with self.subTest(p=p, q=q):
1319 expected = sum(p_i * q_i for p_i, q_i in zip(p, q, strict=True))
1320 actual = sumprod(p, q)
1321 self.assertEqual(expected, actual)
1322 self.assertEqual(type(expected), type(actual))
1323
1324 # Bad arguments
1325 self.assertRaises(TypeError, sumprod) # No args
1326 self.assertRaises(TypeError, sumprod, []) # One arg
1327 self.assertRaises(TypeError, sumprod, [], [], []) # Three args
1328 self.assertRaises(TypeError, sumprod, None, [10]) # Non-iterable
1329 self.assertRaises(TypeError, sumprod, [10], None) # Non-iterable
1330 self.assertRaises(TypeError, sumprod, ['x'], [1.0])
1331
1332 # Uneven lengths
1333 self.assertRaises(ValueError, sumprod, [10, 20], [30])
1334 self.assertRaises(ValueError, sumprod, [10], [20, 30])
1335
1336 # Overflows
1337 self.assertEqual(sumprod([10**20], [1]), 10**20)
1338 self.assertEqual(sumprod([1], [10**20]), 10**20)
1339 self.assertEqual(sumprod([10**10], [10**10]), 10**20)
1340 self.assertEqual(sumprod([10**7]*10**5, [10**7]*10**5), 10**19)
1341 self.assertRaises(OverflowError, sumprod, [10**1000], [1.0])
1342 self.assertRaises(OverflowError, sumprod, [1.0], [10**1000])
1343
1344 # Error in iterator
1345 def raise_after(n):
1346 for i in range(n):
1347 yield i
1348 raise RuntimeError
1349 with self.assertRaises(RuntimeError):
1350 sumprod(range(10), raise_after(5))
1351 with self.assertRaises(RuntimeError):

Callers

nothing calls this directly

Calls 11

FractionClass · 0.90
DecimalClass · 0.90
BasicIterClassClass · 0.90
sumprodFunction · 0.85
iterFunction · 0.85
BadMultiplyClass · 0.85
subTestMethod · 0.80
assertTrueMethod · 0.80
sumFunction · 0.50
assertEqualMethod · 0.45
assertRaisesMethod · 0.45

Tested by

no test coverage detected