@@ -423,6 +423,157 @@ def test_isnan(self):
423
423
self .assertFalse (math .isnan (False ))
424
424
self .assertFalse (math .isnan (MyFloat ()))
425
425
426
+ def testPow (self ):
427
+ self .assertRaises (TypeError , math .pow )
428
+ self .ftest ('pow(0,1)' , math .pow (0 ,1 ), 0 )
429
+ self .ftest ('pow(1,0)' , math .pow (1 ,0 ), 1 )
430
+ self .ftest ('pow(2,1)' , math .pow (2 ,1 ), 2 )
431
+ self .ftest ('pow(2,-1)' , math .pow (2 ,- 1 ), 0.5 )
432
+ self .assertEqual (math .pow (INF , 1 ), INF )
433
+ self .assertEqual (math .pow (NINF , 1 ), NINF )
434
+ self .assertEqual ((math .pow (1 , INF )), 1. )
435
+ self .assertEqual ((math .pow (1 , NINF )), 1. )
436
+ self .assertTrue (math .isnan (math .pow (NAN , 1 )))
437
+ self .assertTrue (math .isnan (math .pow (2 , NAN )))
438
+ self .assertTrue (math .isnan (math .pow (0 , NAN )))
439
+ self .assertEqual (math .pow (1 , NAN ), 1 )
440
+
441
+ # pow(0., x)
442
+ self .assertEqual (math .pow (0. , INF ), 0. )
443
+ self .assertEqual (math .pow (0. , 3. ), 0. )
444
+ self .assertEqual (math .pow (0. , 2.3 ), 0. )
445
+ self .assertEqual (math .pow (0. , 2. ), 0. )
446
+ self .assertEqual (math .pow (0. , 0. ), 1. )
447
+ self .assertEqual (math .pow (0. , - 0. ), 1. )
448
+ self .assertRaises (ValueError , math .pow , 0. , - 2. )
449
+ self .assertRaises (ValueError , math .pow , 0. , - 2.3 )
450
+ self .assertRaises (ValueError , math .pow , 0. , - 3. )
451
+ self .assertRaises (ValueError , math .pow , 0. , NINF )
452
+ self .assertTrue (math .isnan (math .pow (0. , NAN )))
453
+
454
+ # pow(INF, x)
455
+ self .assertEqual (math .pow (INF , INF ), INF )
456
+ self .assertEqual (math .pow (INF , 3. ), INF )
457
+ self .assertEqual (math .pow (INF , 2.3 ), INF )
458
+ self .assertEqual (math .pow (INF , 2. ), INF )
459
+ self .assertEqual (math .pow (INF , 0. ), 1. )
460
+ self .assertEqual (math .pow (INF , - 0. ), 1. )
461
+ self .assertEqual (math .pow (INF , - 2. ), 0. )
462
+ self .assertEqual (math .pow (INF , - 2.3 ), 0. )
463
+ self .assertEqual (math .pow (INF , - 3. ), 0. )
464
+ self .assertEqual (math .pow (INF , NINF ), 0. )
465
+ self .assertTrue (math .isnan (math .pow (INF , NAN )))
466
+
467
+ # pow(-0., x)
468
+ self .assertEqual (math .pow (- 0. , INF ), 0. )
469
+ self .assertEqual (math .pow (- 0. , 3. ), - 0. )
470
+ self .assertEqual (math .pow (- 0. , 2.3 ), 0. )
471
+ self .assertEqual (math .pow (- 0. , 2. ), 0. )
472
+ self .assertEqual (math .pow (- 0. , 0. ), 1. )
473
+ self .assertEqual (math .pow (- 0. , - 0. ), 1. )
474
+ self .assertRaises (ValueError , math .pow , - 0. , - 2. )
475
+ self .assertRaises (ValueError , math .pow , - 0. , - 2.3 )
476
+ self .assertRaises (ValueError , math .pow , - 0. , - 3. )
477
+ self .assertRaises (ValueError , math .pow , - 0. , NINF )
478
+ self .assertTrue (math .isnan (math .pow (- 0. , NAN )))
479
+
480
+ # pow(NINF, x)
481
+ self .assertEqual (math .pow (NINF , INF ), INF )
482
+ self .assertEqual (math .pow (NINF , 3. ), NINF )
483
+ self .assertEqual (math .pow (NINF , 2.3 ), INF )
484
+ self .assertEqual (math .pow (NINF , 2. ), INF )
485
+ self .assertEqual (math .pow (NINF , 0. ), 1. )
486
+ self .assertEqual (math .pow (NINF , - 0. ), 1. )
487
+ self .assertEqual (math .pow (NINF , - 2. ), 0. )
488
+ self .assertEqual (math .pow (NINF , - 2.3 ), 0. )
489
+ self .assertEqual (math .pow (NINF , - 3. ), - 0. )
490
+ self .assertEqual (math .pow (NINF , NINF ), 0. )
491
+ self .assertTrue (math .isnan (math .pow (NINF , NAN )))
492
+
493
+ # pow(-1, x)
494
+ self .assertEqual (math .pow (- 1. , INF ), 1. )
495
+ self .assertEqual (math .pow (- 1. , 3. ), - 1. )
496
+ self .assertRaises (ValueError , math .pow , - 1. , 2.3 )
497
+ self .assertEqual (math .pow (- 1. , 2. ), 1. )
498
+ self .assertEqual (math .pow (- 1. , 0. ), 1. )
499
+ self .assertEqual (math .pow (- 1. , - 0. ), 1. )
500
+ self .assertEqual (math .pow (- 1. , - 2. ), 1. )
501
+ self .assertRaises (ValueError , math .pow , - 1. , - 2.3 )
502
+ self .assertEqual (math .pow (- 1. , - 3. ), - 1. )
503
+ self .assertEqual (math .pow (- 1. , NINF ), 1. )
504
+ self .assertTrue (math .isnan (math .pow (- 1. , NAN )))
505
+
506
+ # pow(1, x)
507
+ self .assertEqual (math .pow (1. , INF ), 1. )
508
+ self .assertEqual (math .pow (1. , 3. ), 1. )
509
+ self .assertEqual (math .pow (1. , 2.3 ), 1. )
510
+ self .assertEqual (math .pow (1. , 2. ), 1. )
511
+ self .assertEqual (math .pow (1. , 0. ), 1. )
512
+ self .assertEqual (math .pow (1. , - 0. ), 1. )
513
+ self .assertEqual (math .pow (1. , - 2. ), 1. )
514
+ self .assertEqual (math .pow (1. , - 2.3 ), 1. )
515
+ self .assertEqual (math .pow (1. , - 3. ), 1. )
516
+ self .assertEqual (math .pow (1. , NINF ), 1. )
517
+ self .assertEqual (math .pow (1. , NAN ), 1. )
518
+
519
+ # pow(x, 0) should be 1 for any x
520
+ self .assertEqual (math .pow (2.3 , 0. ), 1. )
521
+ self .assertEqual (math .pow (- 2.3 , 0. ), 1. )
522
+ self .assertEqual (math .pow (NAN , 0. ), 1. )
523
+ self .assertEqual (math .pow (2.3 , - 0. ), 1. )
524
+ self .assertEqual (math .pow (- 2.3 , - 0. ), 1. )
525
+ self .assertEqual (math .pow (NAN , - 0. ), 1. )
526
+
527
+ # pow(x, y) is invalid if x is negative and y is not integral
528
+ self .assertRaises (ValueError , math .pow , - 1. , 2.3 )
529
+ self .assertRaises (ValueError , math .pow , - 15. , - 3.1 )
530
+
531
+ # pow(x, NINF)
532
+ self .assertEqual (math .pow (1.9 , NINF ), 0. )
533
+ self .assertEqual (math .pow (1.1 , NINF ), 0. )
534
+ self .assertEqual (math .pow (0.9 , NINF ), INF )
535
+ self .assertEqual (math .pow (0.1 , NINF ), INF )
536
+ self .assertEqual (math .pow (- 0.1 , NINF ), INF )
537
+ self .assertEqual (math .pow (- 0.9 , NINF ), INF )
538
+ self .assertEqual (math .pow (- 1.1 , NINF ), 0. )
539
+ self .assertEqual (math .pow (- 1.9 , NINF ), 0. )
540
+
541
+ # pow(x, INF)
542
+ self .assertEqual (math .pow (1.9 , INF ), INF )
543
+ self .assertEqual (math .pow (1.1 , INF ), INF )
544
+ self .assertEqual (math .pow (0.9 , INF ), 0. )
545
+ self .assertEqual (math .pow (0.1 , INF ), 0. )
546
+ self .assertEqual (math .pow (- 0.1 , INF ), 0. )
547
+ self .assertEqual (math .pow (- 0.9 , INF ), 0. )
548
+ self .assertEqual (math .pow (- 1.1 , INF ), INF )
549
+ self .assertEqual (math .pow (- 1.9 , INF ), INF )
550
+
551
+ # pow(x, y) should work for x negative, y an integer
552
+ self .ftest ('(-2.)**3.' , math .pow (- 2.0 , 3.0 ), - 8.0 )
553
+ self .ftest ('(-2.)**2.' , math .pow (- 2.0 , 2.0 ), 4.0 )
554
+ self .ftest ('(-2.)**1.' , math .pow (- 2.0 , 1.0 ), - 2.0 )
555
+ self .ftest ('(-2.)**0.' , math .pow (- 2.0 , 0.0 ), 1.0 )
556
+ self .ftest ('(-2.)**-0.' , math .pow (- 2.0 , - 0.0 ), 1.0 )
557
+ self .ftest ('(-2.)**-1.' , math .pow (- 2.0 , - 1.0 ), - 0.5 )
558
+ self .ftest ('(-2.)**-2.' , math .pow (- 2.0 , - 2.0 ), 0.25 )
559
+ self .ftest ('(-2.)**-3.' , math .pow (- 2.0 , - 3.0 ), - 0.125 )
560
+ self .assertRaises (ValueError , math .pow , - 2.0 , - 0.5 )
561
+ self .assertRaises (ValueError , math .pow , - 2.0 , 0.5 )
562
+
563
+ self .assertRaises (OverflowError , math .pow , 999999999999999999999999999 , 999999999999999999999999999 )
564
+
565
+ # testing specializations
566
+ self .assertEqual (math .pow (0 , 999999999999999999999999999 ), 0 )
567
+ self .assertEqual (math .pow (999999999999999999999999999 , 0 ), 1 )
568
+ self .assertEqual (math .pow (0.0 , 999999999999999999999999999 ), 0 )
569
+ self .assertEqual (math .pow (999999999999999999999999999 , 0.0 ), 1 )
570
+
571
+ class MyNumber ():
572
+ def __float__ (self ):
573
+ return - 2. ;
574
+ self .ftest ('MyFloat()**-3.' , math .pow (MyNumber (), - 3.0 ), - 0.125 )
575
+
576
+
426
577
def test_fabs (self ):
427
578
self .assertEqual (math .fabs (- 1 ), 1 )
428
579
self .assertEqual (math .fabs (0 ), 0 )
0 commit comments