Skip to content

Commit 6f6f530

Browse files
authored
Merge pull request #32 from qryxip/internal-bit
Implement `internal_bit`
2 parents bd58139 + f9b142c commit 6f6f530

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed

src/internal_bit.rs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,30 @@
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+
}

0 commit comments

Comments
 (0)