cribler 0.1.0

Statistical randomness-test toolkit (chi-squared, serial, runs, KS, birthday spacing, NIST SP 800-22, paranoid meta-test). Batteries-included layer over cribler_core.
Documentation
#![doc = include_str!("../README.md")]
//!
//! # Module map
//! * [`suite`] / [`paranoid_suite`]: named-case batching (`XxxSuite`) over the [`cribler_core`] engines. [`suite::Suite`] aggregates every engine into one batch.
//! * [`source`]: [`source::WordSource`] (used by `from_custom` — integer-based, never float) and the [`source::UrngSeed32`]/[`source::UrngSeed64`]/[`source::RandSource`] traits that back `from_urng32`/`from_urng64`/`from_rand`.
//! * [`urng_support`] (feature `urng`): adds [`urng_support::Test32`]/[`urng_support::Test64`] (`rng.run_chisq(name)`, ...) directly to any `urng::Rng32`/`Rng64` generator.

pub mod paranoid_suite;
#[cfg(feature = "rand")]
pub mod rand_support;
pub mod source;
pub mod suite;
#[cfg(feature = "urng")]
pub mod urng_support;

/// The unqualified type name of `T`, e.g. `"Sfc32"` for `urng::Sfc32`. Used to
/// auto-name cases registered via `Suite::from_urng32`/`from_urng64`/`from_rand`.
pub(crate) fn short_type_name<T>() -> String {
    let full = std::any::type_name::<T>();
    full.rsplit("::").next().unwrap_or(full).to_string()
}

pub use cribler_core::*;
pub use paranoid_suite::ParanoidSuite;
#[cfg(feature = "rand")]
pub use rand_support::*;
#[cfg(feature = "rand")]
pub use source::RandSource;
pub use source::WordSource;
#[cfg(feature = "urng")]
pub use source::{UrngSeed32, UrngSeed64};
pub use suite::{
    BirthdaySuite, ChiSqSuite, KsSuite, McPiSuite, NistSuite, RunsSuite, SerialSuite, Suite,
    SuiteError, SuiteResults,
};
#[cfg(feature = "urng")]
pub use urng_support::*;