Expand description

Iterators that generate tuples randomly.

random_pairs

extern crate itertools;

use itertools::Itertools;
use malachite_base::chars::random::random_char_inclusive_range;
use malachite_base::num::random::random_unsigned_inclusive_range;
use malachite_base::random::EXAMPLE_SEED;
use malachite_base::tuples::random::random_pairs;

let ps = random_pairs(
    EXAMPLE_SEED,
    &|seed| random_unsigned_inclusive_range::<u8>(seed, 0, 2),
    &|seed| random_char_inclusive_range(seed, 'x', 'z'),
);
assert_eq!(
    ps.take(20).collect_vec().as_slice(),
    &[
        (1, 'z'),
        (1, 'x'),
        (1, 'z'),
        (1, 'y'),
        (2, 'x'),
        (0, 'z'),
        (0, 'z'),
        (0, 'z'),
        (2, 'z'),
        (0, 'y'),
        (2, 'x'),
        (0, 'x'),
        (2, 'z'),
        (0, 'z'),
        (2, 'x'),
        (2, 'x'),
        (2, 'y'),
        (1, 'y'),
        (0, 'x'),
        (2, 'x')
    ]
);

random_pairs_from_single

extern crate itertools;

use itertools::Itertools;
use malachite_base::chars::random::random_char_inclusive_range;
use malachite_base::num::random::random_unsigned_inclusive_range;
use malachite_base::random::EXAMPLE_SEED;
use malachite_base::tuples::random::random_pairs_from_single;

let ps = random_pairs_from_single(random_unsigned_inclusive_range::<u8>(EXAMPLE_SEED, 0, 2));
assert_eq!(
    ps.take(20).collect_vec().as_slice(),
    &[
        (1, 0),
        (1, 2),
        (1, 1),
        (0, 1),
        (0, 2),
        (1, 0),
        (1, 2),
        (2, 0),
        (1, 0),
        (2, 2),
        (2, 1),
        (0, 2),
        (2, 1),
        (1, 1),
        (0, 0),
        (2, 0),
        (2, 2),
        (1, 0),
        (1, 1),
        (0, 2)
    ]
);

random_triples_xyx

extern crate itertools;

use itertools::Itertools;
use malachite_base::chars::random::random_char_inclusive_range;
use malachite_base::num::random::random_unsigned_inclusive_range;
use malachite_base::random::{EXAMPLE_SEED, Seed};
use malachite_base::random_custom_tuples;

random_custom_tuples!(
    (pub(crate)),
    RandomTriplesXYX,
    (X, Y, X),
    random_triples_xyx,
    [X, I, xs, xs_gen, [x_0, x_0], [x_2, y_1]],
    [Y, J, ys, ys_gen, [y_1, x_2]]
);

// We are generating triples of `char`s using two input iterators. The first iterator, `xs`,
// produces all ASCII `char`s, and the second, `ys`, produces the three numbers 0, 1, and 2. The
// function we're using is `random_triples_xyx`, meaning that the first element of the
// output triples will be taken from `xs`, the second element from `ys`, and the third also from
// `xs`.
let ts = random_triples_xyx(
    EXAMPLE_SEED,
    &|seed| random_char_inclusive_range(seed, 'x', 'z'),
    &|seed| random_unsigned_inclusive_range::<u8>(seed, 0, 2),
);
assert_eq!(
    ts.take(20).collect_vec().as_slice(),
    &[
        ('y', 2, 'y'),
        ('y', 0, 'y'),
        ('z', 2, 'x'),
        ('x', 1, 'x'),
        ('z', 0, 'x'),
        ('z', 2, 'x'),
        ('z', 2, 'x'),
        ('z', 2, 'z'),
        ('z', 2, 'y'),
        ('x', 1, 'z'),
        ('z', 0, 'x'),
        ('y', 0, 'z'),
        ('y', 2, 'z'),
        ('x', 2, 'z'),
        ('z', 0, 'y'),
        ('z', 0, 'y'),
        ('y', 1, 'x'),
        ('z', 1, 'z'),
        ('x', 0, 'z'),
        ('z', 0, 'x')
    ]
);

random_ordered_unique_quadruples

extern crate itertools;

use itertools::Itertools;
use malachite_base::num::random::random_unsigned_inclusive_range;
use malachite_base::random::EXAMPLE_SEED;
use malachite_base::random_ordered_unique_tuples;
use malachite_base::sets::random::{
    random_b_tree_sets_fixed_length,
    RandomBTreeSetsFixedLength
};

random_ordered_unique_tuples!(
    (pub(crate)),
    RandomOrderedUniqueQuadruples,
    4,
    (I::Item, I::Item, I::Item, I::Item),
    random_ordered_unique_quadruples,
    [0, 1, 2, 3]
);

let qs = random_ordered_unique_quadruples(
    random_unsigned_inclusive_range::<u8>(EXAMPLE_SEED, 1, 10)
);
assert_eq!(
    qs.take(20).collect_vec().as_slice(),
    &[
        (2, 5, 6, 8), (3, 5, 7, 9), (1, 2, 6, 8), (3, 4, 6, 7), (3, 6, 9, 10), (4, 6, 8, 10),
        (3, 6, 8, 10), (2, 5, 9, 10), (2, 3, 8, 10), (1, 3, 7, 8), (1, 2, 6, 10), (2, 5, 8, 9),
        (1, 8, 9, 10), (1, 3, 7, 8), (2, 3, 4, 5), (1, 3, 4, 8), (3, 6, 7, 9), (5, 6, 7, 8),
        (3, 4, 5, 9), (4, 6, 9, 10)
    ]
);

Structs

Generates random pairs using elements from a single iterator, where the first element is less than the second.

This documentation applies not only to RandomPairs, but also to RandomTriples, RandomQuadruples, and so on. See random_tuples for more information.

This documentation applies not only to RandomPairsFromSingle, but also to RandomTriplesFromSingle, RandomQuadruplesFromSingle, and so on. See random_tuples for more information.

Functions

Generates random pairs using elements from a single iterator, where the first element of each pair is less than the second.

This documentation applies not only to random_pairs, but also to random_triples, random_quadruples, and so on. See random_tuples for more information.

This documentation applies not only to random_pairs_from_single, but also to random_triples_from_single, random_quadruples_from_single, and so on. See random_tuples for more information.

Generates random units; repeats ().