20 lines
553 B
Rust
20 lines
553 B
Rust
#[cfg(feature="arbitrary")]
|
|
use quickcheck::{Arbitrary, Gen};
|
|
use rand::{Rand, Rng};
|
|
|
|
/// Simple helper function for rejection sampling
|
|
#[cfg(feature="arbitrary")]
|
|
#[doc(hidden)]
|
|
#[inline]
|
|
pub fn reject<G: Gen, F: FnMut(&T) -> bool, T: Arbitrary>(g: &mut G, f: F) -> T {
|
|
use std::iter;
|
|
iter::repeat(()).map(|_| Arbitrary::arbitrary(g)).find(f).unwrap()
|
|
}
|
|
|
|
#[doc(hidden)]
|
|
#[inline]
|
|
pub fn reject_rand<G: Rng, F: FnMut(&T) -> bool, T: Rand>(g: &mut G, f: F) -> T {
|
|
use std::iter;
|
|
iter::repeat(()).map(|_| Rand::rand(g)).find(f).unwrap()
|
|
}
|