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`
1
4
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