(self)
| 346 | self.assertRaises(TypeError, divmod, a, b) |
| 347 | |
| 348 | def test_pow(self): |
| 349 | self.assertAlmostEqual(pow(1+1j, 0+0j), 1.0) |
| 350 | self.assertAlmostEqual(pow(0+0j, 2+0j), 0.0) |
| 351 | self.assertEqual(pow(0+0j, 2000+0j), 0.0) |
| 352 | self.assertEqual(pow(0, 0+0j), 1.0) |
| 353 | self.assertEqual(pow(-1, 0+0j), 1.0) |
| 354 | self.assertRaises(ZeroDivisionError, pow, 0+0j, 1j) |
| 355 | self.assertRaises(ZeroDivisionError, pow, 0+0j, -1000) |
| 356 | self.assertAlmostEqual(pow(1j, -1), 1/1j) |
| 357 | self.assertAlmostEqual(pow(1j, 200), 1) |
| 358 | self.assertRaises(ValueError, pow, 1+1j, 1+1j, 1+1j) |
| 359 | self.assertRaises(OverflowError, pow, 1e200+1j, 1e200+1j) |
| 360 | self.assertRaises(OverflowError, pow, 1e200+1j, 5) |
| 361 | self.assertRaises(TypeError, pow, 1j, None) |
| 362 | self.assertRaises(TypeError, pow, None, 1j) |
| 363 | self.assertAlmostEqual(pow(1j, 0.5), 0.7071067811865476+0.7071067811865475j) |
| 364 | |
| 365 | a = 3.33+4.43j |
| 366 | self.assertEqual(a ** 0j, 1) |
| 367 | self.assertEqual(a ** 0.+0.j, 1) |
| 368 | |
| 369 | self.assertEqual(3j ** 0j, 1) |
| 370 | self.assertEqual(3j ** 0, 1) |
| 371 | |
| 372 | try: |
| 373 | 0j ** a |
| 374 | except ZeroDivisionError: |
| 375 | pass |
| 376 | else: |
| 377 | self.fail("should fail 0.0 to negative or complex power") |
| 378 | |
| 379 | try: |
| 380 | 0j ** (3-2j) |
| 381 | except ZeroDivisionError: |
| 382 | pass |
| 383 | else: |
| 384 | self.fail("should fail 0.0 to negative or complex power") |
| 385 | |
| 386 | # The following is used to exercise certain code paths |
| 387 | self.assertEqual(a ** 105, a ** 105) |
| 388 | self.assertEqual(a ** -105, a ** -105) |
| 389 | self.assertEqual(a ** -30, a ** -30) |
| 390 | |
| 391 | self.assertEqual(0.0j ** 0, 1) |
| 392 | |
| 393 | b = 5.1+2.3j |
| 394 | self.assertRaises(ValueError, pow, a, b, 0) |
| 395 | |
| 396 | # Check some boundary conditions; some of these used to invoke |
| 397 | # undefined behaviour (https://bugs.python.org/issue44698). We're |
| 398 | # not actually checking the results of these operations, just making |
| 399 | # sure they don't crash (for example when using clang's |
| 400 | # UndefinedBehaviourSanitizer). |
| 401 | values = (sys.maxsize, sys.maxsize+1, sys.maxsize-1, |
| 402 | -sys.maxsize, -sys.maxsize+1, -sys.maxsize+1) |
| 403 | for real in values: |
| 404 | for imag in values: |
| 405 | with self.subTest(real=real, imag=imag): |
nothing calls this directly
no test coverage detected