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

Method test_float_pow

Lib/test/test_float.py:437–635  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

435 @unittest.expectedFailure # TODO: RUSTPYTHON; TypeError: must be real number, not complex
436 @support.requires_IEEE_754
437 def test_float_pow(self):
438 # test builtin pow and ** operator for IEEE 754 special cases.
439 # Special cases taken from section F.9.4.4 of the C99 specification
440
441 for pow_op in pow, operator.pow:
442 # x**NAN is NAN for any x except 1
443 self.assertTrue(isnan(pow_op(-INF, NAN)))
444 self.assertTrue(isnan(pow_op(-2.0, NAN)))
445 self.assertTrue(isnan(pow_op(-1.0, NAN)))
446 self.assertTrue(isnan(pow_op(-0.5, NAN)))
447 self.assertTrue(isnan(pow_op(-0.0, NAN)))
448 self.assertTrue(isnan(pow_op(0.0, NAN)))
449 self.assertTrue(isnan(pow_op(0.5, NAN)))
450 self.assertTrue(isnan(pow_op(2.0, NAN)))
451 self.assertTrue(isnan(pow_op(INF, NAN)))
452 self.assertTrue(isnan(pow_op(NAN, NAN)))
453
454 # NAN**y is NAN for any y except +-0
455 self.assertTrue(isnan(pow_op(NAN, -INF)))
456 self.assertTrue(isnan(pow_op(NAN, -2.0)))
457 self.assertTrue(isnan(pow_op(NAN, -1.0)))
458 self.assertTrue(isnan(pow_op(NAN, -0.5)))
459 self.assertTrue(isnan(pow_op(NAN, 0.5)))
460 self.assertTrue(isnan(pow_op(NAN, 1.0)))
461 self.assertTrue(isnan(pow_op(NAN, 2.0)))
462 self.assertTrue(isnan(pow_op(NAN, INF)))
463
464 # (+-0)**y raises ZeroDivisionError for y a negative odd integer
465 self.assertRaises(ZeroDivisionError, pow_op, -0.0, -1.0)
466 self.assertRaises(ZeroDivisionError, pow_op, 0.0, -1.0)
467
468 # (+-0)**y raises ZeroDivisionError for y finite and negative
469 # but not an odd integer
470 self.assertRaises(ZeroDivisionError, pow_op, -0.0, -2.0)
471 self.assertRaises(ZeroDivisionError, pow_op, -0.0, -0.5)
472 self.assertRaises(ZeroDivisionError, pow_op, 0.0, -2.0)
473 self.assertRaises(ZeroDivisionError, pow_op, 0.0, -0.5)
474
475 # (+-0)**y is +-0 for y a positive odd integer
476 self.assertEqualAndEqualSign(pow_op(-0.0, 1.0), -0.0)
477 self.assertEqualAndEqualSign(pow_op(0.0, 1.0), 0.0)
478
479 # (+-0)**y is 0 for y finite and positive but not an odd integer
480 self.assertEqualAndEqualSign(pow_op(-0.0, 0.5), 0.0)
481 self.assertEqualAndEqualSign(pow_op(-0.0, 2.0), 0.0)
482 self.assertEqualAndEqualSign(pow_op(0.0, 0.5), 0.0)
483 self.assertEqualAndEqualSign(pow_op(0.0, 2.0), 0.0)
484
485 # (-1)**+-inf is 1
486 self.assertEqualAndEqualSign(pow_op(-1.0, -INF), 1.0)
487 self.assertEqualAndEqualSign(pow_op(-1.0, INF), 1.0)
488
489 # 1**y is 1 for any y, even if y is an infinity or nan
490 self.assertEqualAndEqualSign(pow_op(1.0, -INF), 1.0)
491 self.assertEqualAndEqualSign(pow_op(1.0, -2.0), 1.0)
492 self.assertEqualAndEqualSign(pow_op(1.0, -1.0), 1.0)
493 self.assertEqualAndEqualSign(pow_op(1.0, -0.5), 1.0)
494 self.assertEqualAndEqualSign(pow_op(1.0, -0.0), 1.0)

Callers

nothing calls this directly

Calls 5

isnanFunction · 0.90
assertTrueMethod · 0.80
assertRaisesMethod · 0.45
assertEqualMethod · 0.45

Tested by

no test coverage detected