@@ -325,6 +325,13 @@ impl Signed for f64 {
325325 #[ inline( always) ]
326326 fn abs ( & self ) -> f64 { abs ( * self ) }
327327
328+ ///
329+ /// The positive difference of two numbers. Returns `0.0` if the number is less than or
330+ /// equal to `other`, otherwise the difference between`self` and `other` is returned.
331+ ///
332+ #[ inline( always) ]
333+ fn abs_sub ( & self , other : & f64 ) -> f64 { abs_sub ( * self , * other) }
334+
328335 ///
329336 /// # Returns
330337 ///
@@ -594,6 +601,7 @@ impl Float for f64 {
594601 #[ inline( always) ]
595602 fn neg_zero ( ) -> f64 { -0.0 }
596603
604+ /// Returns `true` if the number is NaN
597605 #[ inline( always) ]
598606 fn is_NaN ( & self ) -> bool { * self != * self }
599607
@@ -603,7 +611,7 @@ impl Float for f64 {
603611 * self == Float :: infinity ( ) || * self == Float :: neg_infinity ( )
604612 }
605613
606- /// Returns `true` if the number is finite
614+ /// Returns `true` if the number is not infinite or NaN
607615 #[ inline( always) ]
608616 fn is_finite ( & self ) -> bool {
609617 !( self . is_NaN ( ) || self . is_infinite ( ) )
@@ -1005,7 +1013,7 @@ mod tests {
10051013 }
10061014
10071015 #[ test]
1008- pub fn test_signed ( ) {
1016+ pub fn test_abs ( ) {
10091017 assert_eq ! ( infinity. abs( ) , infinity) ;
10101018 assert_eq ! ( 1f64 . abs( ) , 1f64 ) ;
10111019 assert_eq ! ( 0f64 . abs( ) , 0f64 ) ;
@@ -1014,7 +1022,24 @@ mod tests {
10141022 assert_eq ! ( neg_infinity. abs( ) , infinity) ;
10151023 assert_eq ! ( ( 1f64 /neg_infinity) . abs( ) , 0f64 ) ;
10161024 assert ! ( NaN . abs( ) . is_NaN( ) ) ;
1025+ }
10171026
1027+ #[ test]
1028+ fn test_abs_sub ( ) {
1029+ assert_eq ! ( ( -1f64 ) . abs_sub( & 1f64 ) , 0f64 ) ;
1030+ assert_eq ! ( 1f64 . abs_sub( & 1f64 ) , 0f64 ) ;
1031+ assert_eq ! ( 1f64 . abs_sub( & 0f64 ) , 1f64 ) ;
1032+ assert_eq ! ( 1f64 . abs_sub( & -1f64 ) , 2f64 ) ;
1033+ assert_eq ! ( neg_infinity. abs_sub( & 0f64 ) , 0f64 ) ;
1034+ assert_eq ! ( infinity. abs_sub( & 1f64 ) , infinity) ;
1035+ assert_eq ! ( 0f64 . abs_sub( & neg_infinity) , infinity) ;
1036+ assert_eq ! ( 0f64 . abs_sub( & infinity) , 0f64 ) ;
1037+ assert ! ( NaN . abs_sub( & -1f64 ) . is_NaN( ) ) ;
1038+ assert ! ( 1f64 . abs_sub( & NaN ) . is_NaN( ) ) ;
1039+ }
1040+
1041+ #[ test]
1042+ fn test_signum ( ) {
10181043 assert_eq ! ( infinity. signum( ) , 1f64 ) ;
10191044 assert_eq ! ( 1f64 . signum( ) , 1f64 ) ;
10201045 assert_eq ! ( 0f64 . signum( ) , 1f64 ) ;
@@ -1023,7 +1048,10 @@ mod tests {
10231048 assert_eq ! ( neg_infinity. signum( ) , -1f64 ) ;
10241049 assert_eq ! ( ( 1f64 /neg_infinity) . signum( ) , -1f64 ) ;
10251050 assert ! ( NaN . signum( ) . is_NaN( ) ) ;
1051+ }
10261052
1053+ #[ test]
1054+ fn test_is_positive ( ) {
10271055 assert ! ( infinity. is_positive( ) ) ;
10281056 assert ! ( 1f64 . is_positive( ) ) ;
10291057 assert ! ( 0f64 . is_positive( ) ) ;
@@ -1032,7 +1060,10 @@ mod tests {
10321060 assert ! ( !neg_infinity. is_positive( ) ) ;
10331061 assert ! ( !( 1f64 /neg_infinity) . is_positive( ) ) ;
10341062 assert ! ( !NaN . is_positive( ) ) ;
1063+ }
10351064
1065+ #[ test]
1066+ fn test_is_negative ( ) {
10361067 assert ! ( !infinity. is_negative( ) ) ;
10371068 assert ! ( !1f64 . is_negative( ) ) ;
10381069 assert ! ( !0f64 . is_negative( ) ) ;
0 commit comments