Function malachite_base::vecs::random::random_vecs_from_length_iterator
source · 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> ⓘ
Expand description
Generates random Vec
s 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
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],
&[]
]
);