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

Generates random BTreeSets with lengths in $[a, b]$, using elements from an iterator.

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

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

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

xs_gen must be infinite.

Panics

Panics if $a \geq b$.

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

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