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

Method test_comb

Lib/test/test_math_integer.py:317–384  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

315 self.assertIs(type(perm(MyIndexable(5), MyIndexable(k))), int)
316
317 def test_comb(self):
318 comb = self.module.comb
319 factorial = self.module.factorial
320 # Test if factorial definition is satisfied
321 for n in range(500):
322 for k in (range(n + 1) if n < 100 else range(30) if n < 200 else range(10)):
323 self.assertEqual(comb(n, k), factorial(n)
324 // (factorial(k) * factorial(n - k)))
325
326 # Test for Pascal's identity
327 for n in range(1, 100):
328 for k in range(1, n):
329 self.assertEqual(comb(n, k), comb(n - 1, k - 1) + comb(n - 1, k))
330
331 # Test corner cases
332 for n in range(100):
333 self.assertEqual(comb(n, 0), 1)
334 self.assertEqual(comb(n, n), 1)
335
336 for n in range(1, 100):
337 self.assertEqual(comb(n, 1), n)
338 self.assertEqual(comb(n, n - 1), n)
339
340 # Test Symmetry
341 for n in range(100):
342 for k in range(n // 2):
343 self.assertEqual(comb(n, k), comb(n, n - k))
344
345 # Raises TypeError if any argument is non-integer or argument count is
346 # not 2
347 self.assertRaises(TypeError, comb, 10, 1.0)
348 self.assertRaises(TypeError, comb, 10, Decimal(1.0))
349 self.assertRaises(TypeError, comb, 10, "1")
350 self.assertRaises(TypeError, comb, 10.0, 1)
351 self.assertRaises(TypeError, comb, Decimal(10.0), 1)
352 self.assertRaises(TypeError, comb, "10", 1)
353
354 self.assertRaises(TypeError, comb, 10)
355 self.assertRaises(TypeError, comb, 10, 1, 3)
356 self.assertRaises(TypeError, comb)
357
358 # Raises Value error if not k or n are negative numbers
359 self.assertRaises(ValueError, comb, -1, 1)
360 self.assertRaises(ValueError, comb, -2**1000, 1)
361 self.assertRaises(ValueError, comb, 1, -1)
362 self.assertRaises(ValueError, comb, 1, -2**1000)
363
364 # Returns zero if k is greater than n
365 self.assertEqual(comb(1, 2), 0)
366 self.assertEqual(comb(1, 2**1000), 0)
367
368 n = 2**1000
369 self.assertEqual(comb(n, 0), 1)
370 self.assertEqual(comb(n, 1), n)
371 self.assertEqual(comb(n, 2), n * (n-1) // 2)
372 self.assertEqual(comb(n, n), 1)
373 self.assertEqual(comb(n, n-1), n)
374 self.assertEqual(comb(n, n-2), n * (n-1) // 2)

Callers

nothing calls this directly

Calls 8

assertIntEqualMethod · 0.95
DecimalClass · 0.90
factorialFunction · 0.70
IntSubclassClass · 0.70
MyIndexableClass · 0.70
assertEqualMethod · 0.45
assertRaisesMethod · 0.45
assertIsMethod · 0.45

Tested by

no test coverage detected