haar_lib/algo/enum_bit/
superset_asc.rs1use std::iter::successors;
3
4pub fn super_asc(a: u32, n: u32) -> impl Iterator<Item = u32> {
6 successors(Some(a), move |&t| {
7 let t = (t + 1) | a;
8 (t < 1 << n).then_some(t)
9 })
10}
11
12#[cfg(test)]
13mod tests {
14 use super::*;
15 use test_case::test_case;
16
17 #[test_case(0b11111111, 8)]
18 #[test_case(0b00000000, 8)]
19 #[test_case(0b10101010, 8)]
20 #[test_case(0b00000001, 8)]
21 #[test_case(0b10000000, 8)]
22 #[test_case(0b10000001, 8)]
23 #[test_case(0b11011011, 8)]
24 fn check(x: u32, n: u32) {
25 let a = (0..1 << n).filter(|i| (x & !i) == 0).collect::<Vec<_>>();
26
27 let b = super_asc(x, n).collect::<Vec<_>>();
28
29 assert_eq!(a, b);
30 }
31}