@@ -652,6 +652,38 @@ fn test_atanh() {
652
652
assert_approx_eq ! ( ( -0.5f32 ) . atanh( ) , -0.54930614433405484569762261846126285f32 ) ;
653
653
}
654
654
655
+ #[ test]
656
+ fn test_gamma ( ) {
657
+ // precision can differ between platforms
658
+ assert_approx_eq ! ( 1.0f32 . gamma( ) , 1.0f32 ) ;
659
+ assert_approx_eq ! ( 2.0f32 . gamma( ) , 1.0f32 ) ;
660
+ assert_approx_eq ! ( 3.0f32 . gamma( ) , 2.0f32 ) ;
661
+ assert_approx_eq ! ( 4.0f32 . gamma( ) , 6.0f32 ) ;
662
+ assert_approx_eq ! ( 5.0f32 . gamma( ) , 24.0f32 ) ;
663
+ assert_approx_eq ! ( 0.5f32 . gamma( ) , consts:: PI . sqrt( ) ) ;
664
+ assert_approx_eq ! ( ( -0.5f32 ) . gamma( ) , -2.0 * consts:: PI . sqrt( ) ) ;
665
+ assert_eq ! ( 0.0f32 . gamma( ) , f32 :: INFINITY ) ;
666
+ assert_eq ! ( ( -0.0f32 ) . gamma( ) , f32 :: NEG_INFINITY ) ;
667
+ assert ! ( ( -1.0f32 ) . gamma( ) . is_nan( ) ) ;
668
+ assert ! ( ( -2.0f32 ) . gamma( ) . is_nan( ) ) ;
669
+ assert ! ( f32 :: NAN . gamma( ) . is_nan( ) ) ;
670
+ assert ! ( f32 :: NEG_INFINITY . gamma( ) . is_nan( ) ) ;
671
+ assert_eq ! ( f32 :: INFINITY . gamma( ) , f32 :: INFINITY ) ;
672
+ assert_eq ! ( 171.71f32 . gamma( ) , f32 :: INFINITY ) ;
673
+ }
674
+
675
+ #[ test]
676
+ fn test_ln_gamma ( ) {
677
+ assert_approx_eq ! ( 1.0f32 . ln_gamma( ) . 0 , 0.0f32 ) ;
678
+ assert_eq ! ( 1.0f32 . ln_gamma( ) . 1 , 1 ) ;
679
+ assert_approx_eq ! ( 2.0f32 . ln_gamma( ) . 0 , 0.0f32 ) ;
680
+ assert_eq ! ( 2.0f32 . ln_gamma( ) . 1 , 1 ) ;
681
+ assert_approx_eq ! ( 3.0f32 . ln_gamma( ) . 0 , 2.0f32 . ln( ) ) ;
682
+ assert_eq ! ( 3.0f32 . ln_gamma( ) . 1 , 1 ) ;
683
+ assert_approx_eq ! ( ( -0.5f32 ) . ln_gamma( ) . 0 , ( 2.0 * consts:: PI . sqrt( ) ) . ln( ) ) ;
684
+ assert_eq ! ( ( -0.5f32 ) . ln_gamma( ) . 1 , -1 ) ;
685
+ }
686
+
655
687
#[ test]
656
688
fn test_real_consts ( ) {
657
689
use super :: consts;
0 commit comments