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