MCPcopy Create free account
hub / github.com/RustPython/RustPython / testComb

Method testComb

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

Source from the content-addressed store, hash-verified

2337 self.assertIs(type(perm(MyIndexable(5), MyIndexable(k))), int)
2338
2339 def testComb(self):
2340 comb = math.comb
2341 factorial = math.factorial
2342 # Test if factorial definition is satisfied
2343 for n in range(500):
2344 for k in (range(n + 1) if n < 100 else range(30) if n < 200 else range(10)):
2345 self.assertEqual(comb(n, k), factorial(n)
2346 // (factorial(k) * factorial(n - k)))
2347
2348 # Test for Pascal's identity
2349 for n in range(1, 100):
2350 for k in range(1, n):
2351 self.assertEqual(comb(n, k), comb(n - 1, k - 1) + comb(n - 1, k))
2352
2353 # Test corner cases
2354 for n in range(100):
2355 self.assertEqual(comb(n, 0), 1)
2356 self.assertEqual(comb(n, n), 1)
2357
2358 for n in range(1, 100):
2359 self.assertEqual(comb(n, 1), n)
2360 self.assertEqual(comb(n, n - 1), n)
2361
2362 # Test Symmetry
2363 for n in range(100):
2364 for k in range(n // 2):
2365 self.assertEqual(comb(n, k), comb(n, n - k))
2366
2367 # Raises TypeError if any argument is non-integer or argument count is
2368 # not 2
2369 self.assertRaises(TypeError, comb, 10, 1.0)
2370 self.assertRaises(TypeError, comb, 10, decimal.Decimal(1.0))
2371 self.assertRaises(TypeError, comb, 10, "1")
2372 self.assertRaises(TypeError, comb, 10.0, 1)
2373 self.assertRaises(TypeError, comb, decimal.Decimal(10.0), 1)
2374 self.assertRaises(TypeError, comb, "10", 1)
2375
2376 self.assertRaises(TypeError, comb, 10)
2377 self.assertRaises(TypeError, comb, 10, 1, 3)
2378 self.assertRaises(TypeError, comb)
2379
2380 # Raises Value error if not k or n are negative numbers
2381 self.assertRaises(ValueError, comb, -1, 1)
2382 self.assertRaises(ValueError, comb, -2**1000, 1)
2383 self.assertRaises(ValueError, comb, 1, -1)
2384 self.assertRaises(ValueError, comb, 1, -2**1000)
2385
2386 # Returns zero if k is greater than n
2387 self.assertEqual(comb(1, 2), 0)
2388 self.assertEqual(comb(1, 2**1000), 0)
2389
2390 n = 2**1000
2391 self.assertEqual(comb(n, 0), 1)
2392 self.assertEqual(comb(n, 1), n)
2393 self.assertEqual(comb(n, 2), n * (n-1) // 2)
2394 self.assertEqual(comb(n, n), 1)
2395 self.assertEqual(comb(n, n-1), n)
2396 self.assertEqual(comb(n, n-2), n * (n-1) // 2)

Callers

nothing calls this directly

Calls 7

combFunction · 0.85
factorialFunction · 0.70
IntSubclassClass · 0.70
MyIndexableClass · 0.70
assertEqualMethod · 0.45
assertRaisesMethod · 0.45
assertIsMethod · 0.45

Tested by

no test coverage detected