@@ -423,6 +423,226 @@ 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
+ def testAtan2 (self ):
577
+ self .assertRaises (TypeError , math .atan2 )
578
+ self .ftest ('atan2(-1, 0)' , math .atan2 (- 1 , 0 ), - math .pi / 2 )
579
+ self .ftest ('atan2(-1, 1)' , math .atan2 (- 1 , 1 ), - math .pi / 4 )
580
+ self .ftest ('atan2(0, 1)' , math .atan2 (0 , 1 ), 0 )
581
+ self .ftest ('atan2(1, 1)' , math .atan2 (1 , 1 ), math .pi / 4 )
582
+ self .ftest ('atan2(1, 0)' , math .atan2 (1 , 0 ), math .pi / 2 )
583
+
584
+ # math.atan2(0, x)
585
+ self .ftest ('atan2(0., -inf)' , math .atan2 (0. , NINF ), math .pi )
586
+ self .ftest ('atan2(0., -2.3)' , math .atan2 (0. , - 2.3 ), math .pi )
587
+ self .ftest ('atan2(0., -0.)' , math .atan2 (0. , - 0. ), math .pi )
588
+ self .assertEqual (math .atan2 (0. , 0. ), 0. )
589
+ self .assertEqual (math .atan2 (0. , 2.3 ), 0. )
590
+ self .assertEqual (math .atan2 (0. , INF ), 0. )
591
+ self .assertTrue (math .isnan (math .atan2 (0. , NAN )))
592
+ # math.atan2(-0, x)
593
+ self .ftest ('atan2(-0., -inf)' , math .atan2 (- 0. , NINF ), - math .pi )
594
+ self .ftest ('atan2(-0., -2.3)' , math .atan2 (- 0. , - 2.3 ), - math .pi )
595
+ self .ftest ('atan2(-0., -0.)' , math .atan2 (- 0. , - 0. ), - math .pi )
596
+ self .assertEqual (math .atan2 (- 0. , 0. ), - 0. )
597
+ self .assertEqual (math .atan2 (- 0. , 2.3 ), - 0. )
598
+ self .assertEqual (math .atan2 (- 0. , INF ), - 0. )
599
+ self .assertTrue (math .isnan (math .atan2 (- 0. , NAN )))
600
+ # math.atan2(INF, x)
601
+ self .ftest ('atan2(inf, -inf)' , math .atan2 (INF , NINF ), math .pi * 3 / 4 )
602
+ self .ftest ('atan2(inf, -2.3)' , math .atan2 (INF , - 2.3 ), math .pi / 2 )
603
+ self .ftest ('atan2(inf, -0.)' , math .atan2 (INF , - 0.0 ), math .pi / 2 )
604
+ self .ftest ('atan2(inf, 0.)' , math .atan2 (INF , 0.0 ), math .pi / 2 )
605
+ self .ftest ('atan2(inf, 2.3)' , math .atan2 (INF , 2.3 ), math .pi / 2 )
606
+ self .ftest ('atan2(inf, inf)' , math .atan2 (INF , INF ), math .pi / 4 )
607
+ self .assertTrue (math .isnan (math .atan2 (INF , NAN )))
608
+ # math.atan2(NINF, x)
609
+ self .ftest ('atan2(-inf, -inf)' , math .atan2 (NINF , NINF ), - math .pi * 3 / 4 )
610
+ self .ftest ('atan2(-inf, -2.3)' , math .atan2 (NINF , - 2.3 ), - math .pi / 2 )
611
+ self .ftest ('atan2(-inf, -0.)' , math .atan2 (NINF , - 0.0 ), - math .pi / 2 )
612
+ self .ftest ('atan2(-inf, 0.)' , math .atan2 (NINF , 0.0 ), - math .pi / 2 )
613
+ self .ftest ('atan2(-inf, 2.3)' , math .atan2 (NINF , 2.3 ), - math .pi / 2 )
614
+ self .ftest ('atan2(-inf, inf)' , math .atan2 (NINF , INF ), - math .pi / 4 )
615
+ self .assertTrue (math .isnan (math .atan2 (NINF , NAN )))
616
+ # math.atan2(+finite, x)
617
+ self .ftest ('atan2(2.3, -inf)' , math .atan2 (2.3 , NINF ), math .pi )
618
+ self .ftest ('atan2(2.3, -0.)' , math .atan2 (2.3 , - 0. ), math .pi / 2 )
619
+ self .ftest ('atan2(2.3, 0.)' , math .atan2 (2.3 , 0. ), math .pi / 2 )
620
+ self .assertEqual (math .atan2 (2.3 , INF ), 0. )
621
+ self .assertTrue (math .isnan (math .atan2 (2.3 , NAN )))
622
+ # math.atan2(-finite, x)
623
+ self .ftest ('atan2(-2.3, -inf)' , math .atan2 (- 2.3 , NINF ), - math .pi )
624
+ self .ftest ('atan2(-2.3, -0.)' , math .atan2 (- 2.3 , - 0. ), - math .pi / 2 )
625
+ self .ftest ('atan2(-2.3, 0.)' , math .atan2 (- 2.3 , 0. ), - math .pi / 2 )
626
+ self .assertEqual (math .atan2 (- 2.3 , INF ), - 0. )
627
+ self .assertTrue (math .isnan (math .atan2 (- 2.3 , NAN )))
628
+ # math.atan2(NAN, x)
629
+ self .assertTrue (math .isnan (math .atan2 (NAN , NINF )))
630
+ self .assertTrue (math .isnan (math .atan2 (NAN , - 2.3 )))
631
+ self .assertTrue (math .isnan (math .atan2 (NAN , - 0. )))
632
+ self .assertTrue (math .isnan (math .atan2 (NAN , 0. )))
633
+ self .assertTrue (math .isnan (math .atan2 (NAN , 2.3 )))
634
+ self .assertTrue (math .isnan (math .atan2 (NAN , INF )))
635
+ self .assertTrue (math .isnan (math .atan2 (NAN , NAN )))
636
+
637
+ # Testing specializations
638
+ self .ftest ('atan2(0.5,1)' , math .atan2 (0.5 ,1 ), 0.4636476090008061 )
639
+ self .ftest ('atan2(1,0.5)' , math .atan2 (1 ,0.5 ), 1.1071487177940904 )
640
+ self .ftest ('atan2(BIG_INT,BIG_INT)' , math .atan2 (BIG_INT ,BIG_INT ), 0.7853981633974483 )
641
+ self .ftest ('atan2(BIG_INT,1)' , math .atan2 (BIG_INT ,1 ), 1.5707963267948966 )
642
+ self .ftest ('atan2(BIG_INT,0.1)' , math .atan2 (BIG_INT ,0.1 ), 1.5707963267948966 )
643
+ self .ftest ('atan2(MyFloat(),MyFloat())' , math .atan2 (MyFloat (),MyFloat ()), 0.7853981633974483 )
644
+ self .ftest ('atan2(BIG_INT,MyFloat())' , math .atan2 (BIG_INT ,MyFloat ()), 1.5707963267948966 )
645
+
426
646
def test_fabs (self ):
427
647
self .assertEqual (math .fabs (- 1 ), 1 )
428
648
self .assertEqual (math .fabs (0 ), 0 )
0 commit comments