@@ -485,11 +485,15 @@ impl<T: Clone + Integer + Signed> Signed for Ratio<T> {
485
485
}
486
486
487
487
#[ inline]
488
- fn is_positive ( & self ) -> bool { !self . is_negative ( ) }
488
+ fn is_positive ( & self ) -> bool {
489
+ ( self . numer . is_positive ( ) & self . denom . is_positive ( ) ) |
490
+ ( self . numer . is_negative ( ) & self . denom . is_negative ( ) )
491
+ }
489
492
490
493
#[ inline]
491
494
fn is_negative ( & self ) -> bool {
492
- self . numer . is_negative ( ) ^ self . denom . is_negative ( )
495
+ ( self . numer . is_negative ( ) & self . denom . is_positive ( ) ) |
496
+ ( self . numer . is_positive ( ) & self . denom . is_negative ( ) )
493
497
}
494
498
}
495
499
@@ -603,6 +607,8 @@ mod test {
603
607
pub const _1_2: Rational = Ratio { numer : 1 , denom : 2 } ;
604
608
pub const _3_2: Rational = Ratio { numer : 3 , denom : 2 } ;
605
609
pub const _NEG1_2: Rational = Ratio { numer : -1 , denom : 2 } ;
610
+ pub const _1_NEG2: Rational = Ratio { numer : 1 , denom : -2 } ;
611
+ pub const _NEG1_NEG2: Rational = Ratio { numer : -1 , denom : -2 } ;
606
612
pub const _1_3: Rational = Ratio { numer : 1 , denom : 3 } ;
607
613
pub const _NEG1_3: Rational = Ratio { numer : -1 , denom : 3 } ;
608
614
pub const _2_3: Rational = Ratio { numer : 2 , denom : 3 } ;
@@ -1000,9 +1006,17 @@ mod test {
1000
1006
assert_eq ! ( _1_2. abs_sub( & _3_2) , Zero :: zero( ) ) ;
1001
1007
assert_eq ! ( _1_2. signum( ) , One :: one( ) ) ;
1002
1008
assert_eq ! ( _NEG1_2. signum( ) , - :: one:: <Ratio <isize >>( ) ) ;
1009
+ assert_eq ! ( _0. signum( ) , Zero :: zero( ) ) ;
1003
1010
assert ! ( _NEG1_2. is_negative( ) ) ;
1011
+ assert ! ( _1_NEG2. is_negative( ) ) ;
1004
1012
assert ! ( ! _NEG1_2. is_positive( ) ) ;
1013
+ assert ! ( ! _1_NEG2. is_positive( ) ) ;
1014
+ assert ! ( _1_2. is_positive( ) ) ;
1015
+ assert ! ( _NEG1_NEG2. is_positive( ) ) ;
1005
1016
assert ! ( ! _1_2. is_negative( ) ) ;
1017
+ assert ! ( ! _NEG1_NEG2. is_negative( ) ) ;
1018
+ assert ! ( ! _0. is_positive( ) ) ;
1019
+ assert ! ( ! _0. is_negative( ) ) ;
1006
1020
}
1007
1021
1008
1022
#[ test]
0 commit comments