File tree 3 files changed +20
-2
lines changed
3 files changed +20
-2
lines changed Original file line number Diff line number Diff line change @@ -586,14 +586,14 @@ macro_rules! int_impl {
586
586
fn rotate_left( self , n: uint) -> $T {
587
587
// Protect against undefined behaviour for over-long bit shifts
588
588
let n = n % $BITS;
589
- ( self << n) | ( self >> ( $BITS - n) )
589
+ ( self << n) | ( self >> ( ( $BITS - n) % $BITS ) )
590
590
}
591
591
592
592
#[ inline]
593
593
fn rotate_right( self , n: uint) -> $T {
594
594
// Protect against undefined behaviour for over-long bit shifts
595
595
let n = n % $BITS;
596
- ( self >> n) | ( self << ( $BITS - n) )
596
+ ( self >> n) | ( self << ( ( $BITS - n) % $BITS ) )
597
597
}
598
598
599
599
#[ inline]
Original file line number Diff line number Diff line change @@ -114,6 +114,15 @@ mod tests {
114
114
assert_eq!( _1. rotate_left( 124 ) , _1) ;
115
115
assert_eq!( _0. rotate_right( 124 ) , _0) ;
116
116
assert_eq!( _1. rotate_right( 124 ) , _1) ;
117
+
118
+ // Rotating by 0 should have no effect
119
+ assert_eq!( A . rotate_left( 0 ) , A ) ;
120
+ assert_eq!( B . rotate_left( 0 ) , B ) ;
121
+ assert_eq!( C . rotate_left( 0 ) , C ) ;
122
+ // Rotating by a multiple of word size should also have no effect
123
+ assert_eq!( A . rotate_left( 64 ) , A ) ;
124
+ assert_eq!( B . rotate_left( 64 ) , B ) ;
125
+ assert_eq!( C . rotate_left( 64 ) , C ) ;
117
126
}
118
127
119
128
#[ test]
Original file line number Diff line number Diff line change @@ -74,6 +74,15 @@ mod tests {
74
74
assert_eq!( _1. rotate_left( 124 ) , _1) ;
75
75
assert_eq!( _0. rotate_right( 124 ) , _0) ;
76
76
assert_eq!( _1. rotate_right( 124 ) , _1) ;
77
+
78
+ // Rotating by 0 should have no effect
79
+ assert_eq!( A . rotate_left( 0 ) , A ) ;
80
+ assert_eq!( B . rotate_left( 0 ) , B ) ;
81
+ assert_eq!( C . rotate_left( 0 ) , C ) ;
82
+ // Rotating by a multiple of word size should also have no effect
83
+ assert_eq!( A . rotate_left( 64 ) , A ) ;
84
+ assert_eq!( B . rotate_left( 64 ) , B ) ;
85
+ assert_eq!( C . rotate_left( 64 ) , C ) ;
77
86
}
78
87
79
88
#[ test]
You can’t perform that action at this time.
0 commit comments