pub fn random_hash_sets_from_length_iterator<T: Eq + Hash, I: Iterator<Item = u64>, J: Iterator<Item = T>>(
    seed: Seed,
    lengths_gen: &dyn Fn(Seed) -> I,
    xs_gen: &dyn Fn(Seed) -> J
) -> RandomHashSets<T, I, J>Notable traits for RandomHashSets<T, I, J>impl<T: Eq + Hash, I: Iterator<Item = u64>, J: Iterator<Item = T>> Iterator for RandomHashSets<T, I, J> type Item = HashSet<T>;
Expand description

Generates random HashSets using elements from an iterator and with lengths from another iterator.

The input iterator must generate at least many distinct elements as any number generated by the lengths iterator; otherwise, this iterator will hang.

$$ P((x_i)_{i=0}^{n-1}) = n!P(n)\prod_{i=0}^{n-1}P(x_i). $$

lengths and xs must be infinite.

Examples

extern crate itertools;
#[macro_use]
extern crate maplit;

use itertools::Itertools;
use malachite_base::num::random::random_primitive_ints;
use malachite_base::random::EXAMPLE_SEED;
use malachite_base::sets::random::random_hash_sets_from_length_iterator;
use malachite_base::vecs::random_values_from_vec;

fn main() {
    let xs = random_hash_sets_from_length_iterator(
        EXAMPLE_SEED,
        &|seed| random_values_from_vec(seed, vec![0, 2, 4]),
        &random_primitive_ints::<u8>,
    );
    let values = xs.take(20).collect_vec();
    assert_eq!(
        values,
        &[
            hashset!{11, 85},
            hashset!{134, 136, 200, 235},
            hashset!{203, 223},
            hashset!{38, 177, 217, 235},
            hashset!{32, 162, 166, 234},
            hashset!{30, 218},
            hashset!{},
            hashset!{90, 106},
            hashset!{},
            hashset!{9, 151, 204, 216},
            hashset!{78, 97, 213, 253},
            hashset!{39, 91},
            hashset!{170, 175, 191, 232},
            hashset!{2, 233},
            hashset!{22, 35, 198, 217},
            hashset!{17, 32, 114, 173},
            hashset!{65, 114, 121, 222},
            hashset!{},
            hashset!{25, 144, 148, 173},
            hashset!{}
        ]
    );
}