@@ -89,6 +89,33 @@ macro_rules! int_module {
8989 assert_eq!( C . count_zeros( ) , bits as u32 - 5 ) ;
9090 }
9191
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+
92119 #[ test]
93120 fn test_rotate( ) {
94121 assert_eq!( A . rotate_left( 6 ) . rotate_right( 2 ) . rotate_right( 4 ) , A ) ;
0 commit comments