//! internally. The `IndependentSample` trait is for generating values
//! that do not need to record state.
+use core::fmt;
+
#[cfg(not(test))] // only necessary for no_std
use core::num::Float;
// trait called `Sample` and the other should be `DependentSample`.
pub trait IndependentSample<Support>: Sample<Support> {
/// Generate a random value.
- fn ind_sample<R: Rng>(&self, &mut R) -> Support;
+ fn ind_sample<R: Rng>(&self, _: &mut R) -> Support;
}
/// A wrapper for generating types that implement `Rand` via the
}
}
+impl<Sup> fmt::Debug for RandSample<Sup> {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ f.pad("RandSample { .. }")
+ }
+}
+
/// A value with a particular weight for use with `WeightedChoice`.
pub struct Weighted<T> {
/// The numerical weight of this item
pub item: T,
}
+impl<T: fmt::Debug> fmt::Debug for Weighted<T> {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ f.debug_struct("Weighted")
+ .field("weight", &self.weight)
+ .field("item", &self.item)
+ .finish()
+ }
+}
+
/// A distribution that selects from a finite collection of weighted items.
///
/// Each item has an associated weight that influences how likely it
"WeightedChoice::new called with a total weight of 0");
WeightedChoice {
- items: items,
+ items,
// we're likely to be generating numbers in this range
// relatively often, so might as well cache it
weight_range: Range::new(0, running_total),
}
}
+impl<'a, T: fmt::Debug> fmt::Debug for WeightedChoice<'a, T> {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ f.debug_struct("WeightedChoice")
+ .field("items", &self.items)
+ .field("weight_range", &self.weight_range)
+ .finish()
+ }
+}
+
mod ziggurat_tables;
/// Sample a random number using the Ziggurat method (specifically the