File tree Expand file tree Collapse file tree 1 file changed +29
-0
lines changed Expand file tree Collapse file tree 1 file changed +29
-0
lines changed Original file line number Diff line number Diff line change 1+ // Skipped:
2+ //
3+ // - `bsf` = `__builtin_ctz`: is equivalent to `{integer}::trailing_zeros`
14
5+ #[ allow( dead_code) ]
6+ pub ( crate ) fn ceil_pow2 ( n : u32 ) -> u32 {
7+ 32 - n. saturating_sub ( 1 ) . leading_zeros ( )
8+ }
9+
10+ #[ cfg( test) ]
11+ mod tests {
12+ #[ test]
13+ fn ceil_pow2 ( ) {
14+ // https://github.com/atcoder/ac-library/blob/2088c8e2431c3f4d29a2cfabc6529fe0a0586c48/test/unittest/bit_test.cpp
15+ assert_eq ! ( 0 , super :: ceil_pow2( 0 ) ) ;
16+ assert_eq ! ( 0 , super :: ceil_pow2( 1 ) ) ;
17+ assert_eq ! ( 1 , super :: ceil_pow2( 2 ) ) ;
18+ assert_eq ! ( 2 , super :: ceil_pow2( 3 ) ) ;
19+ assert_eq ! ( 2 , super :: ceil_pow2( 4 ) ) ;
20+ assert_eq ! ( 3 , super :: ceil_pow2( 5 ) ) ;
21+ assert_eq ! ( 3 , super :: ceil_pow2( 6 ) ) ;
22+ assert_eq ! ( 3 , super :: ceil_pow2( 7 ) ) ;
23+ assert_eq ! ( 3 , super :: ceil_pow2( 8 ) ) ;
24+ assert_eq ! ( 4 , super :: ceil_pow2( 9 ) ) ;
25+ assert_eq ! ( 30 , super :: ceil_pow2( 1 << 30 ) ) ;
26+ assert_eq ! ( 31 , super :: ceil_pow2( ( 1 << 30 ) + 1 ) ) ;
27+
28+ assert_eq ! ( 32 , super :: ceil_pow2( u32 :: max_value( ) ) ) ;
29+ }
30+ }
You can’t perform that action at this time.
0 commit comments