@@ -724,7 +724,7 @@ assume_usize_width! {
724724}
725725
726726macro_rules! test_float {
727- ( $modname: ident, $fty: ty, $inf: expr, $neginf: expr, $nan: expr) => {
727+ ( $modname: ident, $fty: ty, $inf: expr, $neginf: expr, $nan: expr, $min : expr , $max : expr , $min_pos : expr ) => {
728728 mod $modname {
729729 #[ test]
730730 fn min( ) {
@@ -845,6 +845,38 @@ macro_rules! test_float {
845845 assert!( ( $nan as $fty) . maximum( $nan) . is_nan( ) ) ;
846846 }
847847 #[ test]
848+ fn midpoint( ) {
849+ assert_eq!( ( 0.5 as $fty) . midpoint( 0.5 ) , 0.5 ) ;
850+ assert_eq!( ( 0.5 as $fty) . midpoint( 2.5 ) , 1.5 ) ;
851+ assert_eq!( ( 3.0 as $fty) . midpoint( 4.0 ) , 3.5 ) ;
852+ assert_eq!( ( -3.0 as $fty) . midpoint( 4.0 ) , 0.5 ) ;
853+ assert_eq!( ( 3.0 as $fty) . midpoint( -4.0 ) , -0.5 ) ;
854+ assert_eq!( ( -3.0 as $fty) . midpoint( -4.0 ) , -3.5 ) ;
855+ assert_eq!( ( 0.0 as $fty) . midpoint( 0.0 ) , 0.0 ) ;
856+ assert_eq!( ( -0.0 as $fty) . midpoint( -0.0 ) , -0.0 ) ;
857+ assert_eq!( ( -5.0 as $fty) . midpoint( 5.0 ) , 0.0 ) ;
858+ assert_eq!( ( $max as $fty) . midpoint( $min) , 0.0 ) ;
859+ assert_eq!( ( $min as $fty) . midpoint( $max) , -0.0 ) ;
860+ assert_eq!( ( $max as $fty) . midpoint( $min_pos) , $max / 2. ) ;
861+ assert_eq!( ( -$max as $fty) . midpoint( $min_pos) , -$max / 2. ) ;
862+ assert_eq!( ( $max as $fty) . midpoint( -$min_pos) , $max / 2. ) ;
863+ assert_eq!( ( -$max as $fty) . midpoint( -$min_pos) , -$max / 2. ) ;
864+ assert_eq!( ( $min_pos as $fty) . midpoint( $max) , $max / 2. ) ;
865+ assert_eq!( ( $min_pos as $fty) . midpoint( -$max) , -$max / 2. ) ;
866+ assert_eq!( ( -$min_pos as $fty) . midpoint( $max) , $max / 2. ) ;
867+ assert_eq!( ( -$min_pos as $fty) . midpoint( -$max) , -$max / 2. ) ;
868+ assert_eq!( ( $max as $fty) . midpoint( $max) , $max) ;
869+ assert_eq!( ( $min_pos as $fty) . midpoint( $min_pos) , $min_pos) ;
870+ assert_eq!( ( -$min_pos as $fty) . midpoint( -$min_pos) , -$min_pos) ;
871+ assert_eq!( ( $max as $fty) . midpoint( 5.0 ) , $max / 2.0 + 2.5 ) ;
872+ assert_eq!( ( $max as $fty) . midpoint( -5.0 ) , $max / 2.0 - 2.5 ) ;
873+ assert_eq!( ( $inf as $fty) . midpoint( $inf) , $inf) ;
874+ assert_eq!( ( $neginf as $fty) . midpoint( $neginf) , $neginf) ;
875+ assert!( ( $nan as $fty) . midpoint( 1.0 ) . is_nan( ) ) ;
876+ assert!( ( 1.0 as $fty) . midpoint( $nan) . is_nan( ) ) ;
877+ assert!( ( $nan as $fty) . midpoint( $nan) . is_nan( ) ) ;
878+ }
879+ #[ test]
848880 fn rem_euclid( ) {
849881 let a: $fty = 42.0 ;
850882 assert!( $inf. rem_euclid( a) . is_nan( ) ) ;
@@ -867,5 +899,23 @@ macro_rules! test_float {
867899 } ;
868900}
869901
870- test_float ! ( f32 , f32 , f32 :: INFINITY , f32 :: NEG_INFINITY , f32 :: NAN ) ;
871- test_float ! ( f64 , f64 , f64 :: INFINITY , f64 :: NEG_INFINITY , f64 :: NAN ) ;
902+ test_float ! (
903+ f32 ,
904+ f32 ,
905+ f32 :: INFINITY ,
906+ f32 :: NEG_INFINITY ,
907+ f32 :: NAN ,
908+ f32 :: MIN ,
909+ f32 :: MAX ,
910+ f32 :: MIN_POSITIVE
911+ ) ;
912+ test_float ! (
913+ f64 ,
914+ f64 ,
915+ f64 :: INFINITY ,
916+ f64 :: NEG_INFINITY ,
917+ f64 :: NAN ,
918+ f64 :: MIN ,
919+ f64 :: MAX ,
920+ f64 :: MIN_POSITIVE
921+ ) ;
0 commit comments