pub fn random_ordered_unique_vecs_length_range<I: Iterator>(
    seed: Seed,
    a: u64,
    b: u64,
    xs_gen: &dyn Fn(Seed) -> I
) -> RandomOrderedUniqueVecs<I::Item, RandomUnsignedRange<u64>, I>Notable traits for RandomOrderedUniqueVecs<T, I, J>impl<T: Ord, I: Iterator<Item = u64>, J: Iterator<Item = T>> Iterator for RandomOrderedUniqueVecs<T, I, J> type Item = Vec<T>; where
    I::Item: Ord
Expand description

Generates random Vecs with lengths in $[a, b)$, using elements from an iterator, where the Vecs have no repeated elements, and the elements are in ascending order.

The lengths of the Vecs are sampled from a uniform distribution on $[a, b)$. $a$ must be less than $b$.

The input iterator must generate at least $b$ distinct elements.

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

xs_gen must be infinite.

Panics

Panics if $a \geq b$.

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_ordered_unique_vecs_length_range;

let xs = random_ordered_unique_vecs_length_range(
    EXAMPLE_SEED,
    2,
    5,
    &random_primitive_ints::<u8>
);
let values = xs.take(20).collect_vec();
assert_eq!(
    values.iter().map(Vec::as_slice).collect_vec().as_slice(),
    &[
        &[11, 85, 136][..],
        &[134, 200, 203, 235],
        &[38, 223, 235],
        &[32, 162, 177, 217],
        &[30, 166, 218, 234],
        &[9, 90, 106],
        &[204, 216],
        &[97, 151, 213],
        &[78, 253],
        &[39, 91, 175, 191],
        &[2, 170, 232, 233],
        &[22, 35, 217],
        &[17, 32, 114, 198],
        &[65, 114, 173],
        &[25, 121, 173, 222],
        &[79, 115, 144, 148],
        &[52, 69, 73, 137],
        &[91, 153],
        &[34, 95, 112, 178],
        &[106, 167]
    ]
);