(self)
| 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) |
nothing calls this directly
no test coverage detected