@@ -724,7 +724,7 @@ assume_usize_width! {
724
724
}
725
725
726
726
macro_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 ) => {
728
728
mod $modname {
729
729
#[ test]
730
730
fn min( ) {
@@ -845,6 +845,38 @@ macro_rules! test_float {
845
845
assert!( ( $nan as $fty) . maximum( $nan) . is_nan( ) ) ;
846
846
}
847
847
#[ 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]
848
880
fn rem_euclid( ) {
849
881
let a: $fty = 42.0 ;
850
882
assert!( $inf. rem_euclid( a) . is_nan( ) ) ;
@@ -867,5 +899,23 @@ macro_rules! test_float {
867
899
} ;
868
900
}
869
901
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