#![cfg(feature = "rand")]
use crate::freq::Frequency;
use rand::{Rng, RngExt};
use rand_distr::uniform::{SampleRange, SampleUniform};
use rand_distr::{Distribution, StandardUniform};
impl<T> Frequency<T> {
pub fn random_range<R>(range: R) -> Self
where
R: SampleRange<T>,
T: SampleUniform,
{
Frequency(rand::random_range(range))
}
}
impl<T> Frequency<T>
where
StandardUniform: Distribution<T>,
{
pub fn random() -> Self {
Frequency::random_with(&mut rand::rng())
}
pub fn random_with<R>(rng: &mut R) -> Self
where
R: ?Sized + Rng,
{
Frequency(rng.random())
}
}
impl<T> Distribution<Frequency<T>> for StandardUniform
where
StandardUniform: Distribution<T>,
{
fn sample<R>(&self, rng: &mut R) -> Frequency<T>
where
R: ?Sized + Rng,
{
Frequency(rng.random())
}
}