pub fn exhaustive_hash_sets_length_inclusive_range<I: Clone + Iterator>(
    a: u64,
    b: u64,
    xs: I,
) -> ExhaustiveOrderedUniqueCollections<I, HashSet<I::Item>> 
where I::Item: Clone + Eq + Hash,
Expand description

Generates HashSets, with lengths in a range $[a, b]$, with elements from a single iterator.

The source iterator should not repeat any elements, but this is not enforced.

The iterator should be finite; if it is infinite, only prefixes of the iterator will be generated.

If $a < b$, the output is empty.

If $a = b = 0$, the output consists of a single empty HashSet.

If the input iterator is infinite and $0 < a \leq b$, the output length is also infinite.

If the input iterator length is $n$, the output length is $$ \sum_{i=a}^b \binom{n}{i}. $$

§Examples

use itertools::Itertools;
use malachite_base::sets::exhaustive::exhaustive_hash_sets_length_inclusive_range;
use maplit::hashset;

let xss = exhaustive_hash_sets_length_inclusive_range(2, 3, 1..=4).collect_vec();
assert_eq!(
    xss,
    &[
        hashset! {1, 2},
        hashset! {1, 3},
        hashset! {2, 3},
        hashset! {1, 2, 3},
        hashset! {1, 4},
        hashset! {2, 4},
        hashset! {1, 2, 4},
        hashset! {3, 4},
        hashset! {1, 3, 4},
        hashset! {2, 3, 4}
    ]
);