Function sample_std::sampler_choice
source · pub fn sampler_choice<C, II>(choices: II) -> SamplerChoice<C>where
II: IntoIterator<Item = C>,
C: Sample,
<C as Sample>::Output: Clone,
Expand description
Sample values from a sampler randomly drawn from a list of choices
.
shrink
attempts to run the Sample::shrink
method from each specified
sampler in order. This allows sampler_choice
to work with choices that
generate enum
variants (e.g. via Sample::try_convert
):
use std::boxed::Box;
use sample_std::{Sample, sampler_choice};
#[derive(Clone)]
enum Widget {
Bib(usize),
Bob(usize)
}
type WidgetSampler = Box<dyn Sample<Output = Widget>>;
let bibs: WidgetSampler = Box::new((0..100).try_convert(Widget::Bib, |v| match v {
Widget::Bib(u) => Some(u),
_ => None,
}));
let bobs: WidgetSampler = Box::new((100..200).try_convert(Widget::Bob, |v| match v {
Widget::Bob(u) => Some(u),
_ => None,
}));
let widgets = sampler_choice([bibs, bobs]);
This may lead to unexpected shrinking behavior if every sampler in the
SamplerChoice
can shrink a given value.