@@ -526,12 +526,14 @@ impl<T: Clone + Integer + Signed> Signed for Ratio<T> {
526
526
527
527
#[ inline]
528
528
fn is_positive ( & self ) -> bool {
529
- !self . is_negative ( )
529
+ ( self . numer . is_positive ( ) && self . denom . is_positive ( ) ) ||
530
+ ( self . numer . is_negative ( ) && self . denom . is_negative ( ) )
530
531
}
531
532
532
533
#[ inline]
533
534
fn is_negative ( & self ) -> bool {
534
- self . numer . is_negative ( ) ^ self . denom . is_negative ( )
535
+ ( self . numer . is_negative ( ) && self . denom . is_positive ( ) ) ||
536
+ ( self . numer . is_positive ( ) && self . denom . is_negative ( ) )
535
537
}
536
538
}
537
539
@@ -674,6 +676,14 @@ mod test {
674
676
numer : -1 ,
675
677
denom : 2 ,
676
678
} ;
679
+ pub const _1_NEG2: Rational = Ratio {
680
+ numer : 1 ,
681
+ denom : -2 ,
682
+ } ;
683
+ pub const _NEG1_NEG2: Rational = Ratio {
684
+ numer : -1 ,
685
+ denom : -2 ,
686
+ } ;
677
687
pub const _1_3: Rational = Ratio {
678
688
numer : 1 ,
679
689
denom : 3 ,
@@ -1081,9 +1091,17 @@ mod test {
1081
1091
assert_eq ! ( _1_2. abs_sub( & _3_2) , Zero :: zero( ) ) ;
1082
1092
assert_eq ! ( _1_2. signum( ) , One :: one( ) ) ;
1083
1093
assert_eq ! ( _NEG1_2. signum( ) , -<Ratio <isize >>:: one( ) ) ;
1094
+ assert_eq ! ( _0. signum( ) , Zero :: zero( ) ) ;
1084
1095
assert ! ( _NEG1_2. is_negative( ) ) ;
1096
+ assert ! ( _1_NEG2. is_negative( ) ) ;
1085
1097
assert ! ( !_NEG1_2. is_positive( ) ) ;
1098
+ assert ! ( !_1_NEG2. is_positive( ) ) ;
1099
+ assert ! ( _1_2. is_positive( ) ) ;
1100
+ assert ! ( _NEG1_NEG2. is_positive( ) ) ;
1086
1101
assert ! ( !_1_2. is_negative( ) ) ;
1102
+ assert ! ( !_NEG1_NEG2. is_negative( ) ) ;
1103
+ assert ! ( !_0. is_positive( ) ) ;
1104
+ assert ! ( !_0. is_negative( ) ) ;
1087
1105
}
1088
1106
1089
1107
#[ test]
0 commit comments