nalgebra/src/base/helper.rs

32 lines
723 B
Rust
Raw Normal View History

2018-02-02 19:26:35 +08:00
#[cfg(feature = "arbitrary")]
use quickcheck::{Arbitrary, Gen};
2021-03-02 19:25:12 +08:00
#[cfg(feature = "rand-no-std")]
use rand::{
distributions::{Distribution, Standard},
Rng,
};
/// Simple helper function for rejection sampling
2018-02-02 19:26:35 +08:00
#[cfg(feature = "arbitrary")]
#[doc(hidden)]
#[inline]
2021-03-01 00:52:14 +08:00
pub fn reject<F: FnMut(&T) -> bool, T: Arbitrary>(g: &mut Gen, f: F) -> T {
use std::iter;
2018-02-02 19:26:35 +08:00
iter::repeat(())
.map(|_| Arbitrary::arbitrary(g))
.find(f)
.unwrap()
}
#[doc(hidden)]
#[inline]
2021-03-02 19:25:12 +08:00
#[cfg(feature = "rand-no-std")]
2018-05-23 05:58:14 +08:00
pub fn reject_rand<G: Rng + ?Sized, F: FnMut(&T) -> bool, T>(g: &mut G, f: F) -> T
2020-04-06 00:49:48 +08:00
where
Standard: Distribution<T>,
{
use std::iter;
2018-05-23 05:58:14 +08:00
iter::repeat(()).map(|_| g.gen()).find(f).unwrap()
}