@@ -89,6 +89,33 @@ macro_rules! int_module {
89
89
assert_eq!( C . count_zeros( ) , bits as u32 - 5 ) ;
90
90
}
91
91
92
+ #[ test]
93
+ fn test_leading_trailing_ones( ) {
94
+ let bits = ( mem:: size_of:: <$T>( ) * 8 ) as u32 ;
95
+
96
+ let a: $T = 0b0101_1111 ;
97
+ assert_eq!( a. trailing_ones( ) , 5 ) ;
98
+ assert_eq!( ( !a) . leading_ones( ) , bits - 7 ) ;
99
+
100
+ assert_eq!( a. reverse_bits( ) . leading_ones( ) , 5 ) ;
101
+
102
+ assert_eq!( _1. leading_ones( ) , bits) ;
103
+ assert_eq!( _1. trailing_ones( ) , bits) ;
104
+
105
+ assert_eq!( ( _1 << 1 ) . trailing_ones( ) , 0 ) ;
106
+ assert_eq!( MAX . leading_ones( ) , 0 ) ;
107
+
108
+ assert_eq!( ( _1 << 1 ) . leading_ones( ) , bits - 1 ) ;
109
+ assert_eq!( MAX . trailing_ones( ) , bits - 1 ) ;
110
+
111
+ assert_eq!( _0. leading_ones( ) , 0 ) ;
112
+ assert_eq!( _0. trailing_ones( ) , 0 ) ;
113
+
114
+ let x: $T = 0b0010_1100 ;
115
+ assert_eq!( x. leading_ones( ) , 0 ) ;
116
+ assert_eq!( x. trailing_ones( ) , 0 ) ;
117
+ }
118
+
92
119
#[ test]
93
120
fn test_rotate( ) {
94
121
assert_eq!( A . rotate_left( 6 ) . rotate_right( 2 ) . rotate_right( 4 ) , A ) ;
0 commit comments