pub fn random_vecs_from_length_iterator<T, I: Iterator<Item = u64>, J: Iterator<Item = T>>(
    seed: Seed,
    lengths_gen: &dyn Fn(Seed) -> I,
    xs_gen: &dyn Fn(Seed) -> J
) -> RandomVecs<T, I, J>Notable traits for RandomVecs<T, I, J>impl<T, I: Iterator<Item = u64>, J: Iterator<Item = T>> Iterator for RandomVecs<T, I, J> type Item = Vec<T>;
Expand description

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

The probability of a particular Vec being generated is the product of the probabilities of each of its elements, multiplied by the probability of its length being generated.

lengths and xs must be infinite.

Examples

extern crate itertools;

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

let xs = random_vecs_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.iter().map(Vec::as_slice).collect_vec().as_slice(),
    &[
        &[85, 11][..],
        &[136, 200, 235, 134],
        &[203, 223],
        &[38, 235, 217, 177],
        &[162, 32, 166, 234],
        &[30, 218],
        &[],
        &[90, 106],
        &[],
        &[9, 216, 204, 151],
        &[213, 97, 253, 78],
        &[91, 39],
        &[191, 175, 170, 232],
        &[233, 2],
        &[35, 22, 217, 198],
        &[114, 17, 32, 173],
        &[114, 65, 121, 222],
        &[],
        &[173, 25, 144, 148],
        &[]
    ]
);