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>ⓘ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 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
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],
&[]
]
);