Function random_strings_using_chars

Source
pub fn random_strings_using_chars<I>(
    seed: Seed,
    cs_gen: &dyn Fn(Seed) -> I,
    mean_length_numerator: u64,
    mean_length_denominator: u64,
) -> StringsFromCharVecs<RandomVecs<char, GeometricRandomNaturalValues<u64>, I>> 
where I: Iterator<Item = char>,
Expand description

Generates random Strings using chars from an iterator.

The lengths of the Strings are sampled from a geometric distribution with a specified mean $m$, equal to mean_length_numerator / mean_length_denominator. $m$ must be greater than 0.

$$ P((c_0, c_1, \ldots, c_{n-1})) = \frac{m^n}{(m+1)^{n+1}}\prod_{i=0}^{n-1}P(c_i). $$

The iterators produced by cs_gen must be infinite.

§Panics

Panics if mean_length_numerator or mean_length_denominator are zero, or, if after being reduced to lowest terms, their sum is greater than or equal to $2^{64}$.

§Examples

use itertools::Itertools;
use malachite_base::chars::random::random_char_inclusive_range;
use malachite_base::random::EXAMPLE_SEED;
use malachite_base::strings::random::random_strings_using_chars;

let ss = random_strings_using_chars(
    EXAMPLE_SEED,
    &|seed| random_char_inclusive_range(seed, 'x', 'z'),
    4,
    1,
)
.take(10)
.collect_vec();
assert_eq!(
    ss.iter().map(|cs| cs.as_str()).collect_vec().as_slice(),
    &["", "yyyyzxxxzxzxzx", "zzzy", "xzzx", "y", "", "zyzxz", "zy", "zyyx", ""]
);