pub fn random_b_tree_sets_from_length_iterator<T: Ord, I: Iterator<Item = u64>, J: Iterator<Item = T>>(
seed: Seed,
lengths_gen: &dyn Fn(Seed) -> I,
xs_gen: &dyn Fn(Seed) -> J
) -> RandomBTreeSets<T, I, J> ⓘ
Expand description
Generates random BTreeSet
s using elements from an iterator and with lengths from another
iterator.
The input iterator must generate at least many distinct elements as any number generated by the lengths iterator; otherwise, this iterator will hang.
$$ P((x_i)_{i=0}^{n-1}) = n!P(n)\prod_{i=0}^{n-1}P(x_i). $$
lengths
and xs
must be infinite.
Examples
#[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_from_length_iterator;
use malachite_base::vecs::random_values_from_vec;
fn main() {
let xs = random_b_tree_sets_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,
&[
btreeset!{11, 85},
btreeset!{134, 136, 200, 235},
btreeset!{203, 223},
btreeset!{38, 177, 217, 235},
btreeset!{32, 162, 166, 234},
btreeset!{30, 218},
btreeset!{},
btreeset!{90, 106},
btreeset!{},
btreeset!{9, 151, 204, 216},
btreeset!{78, 97, 213, 253},
btreeset!{39, 91},
btreeset!{170, 175, 191, 232},
btreeset!{2, 233},
btreeset!{22, 35, 198, 217},
btreeset!{17, 32, 114, 173},
btreeset!{65, 114, 121, 222},
btreeset!{},
btreeset!{25, 144, 148, 173},
btreeset!{}
]
);
}