Crate spinoso_random

source ·
Expand description

An implementation of Ruby’s pseudo-random number generator, or PRNG.

The PRNG produces a deterministic sequence of bits which approximate true randomness. The sequence may be represented by integers, floats, or binary strings.

The generator may be initialized with either a system-generated or user-supplied seed value.

PRNGs are currently implemented as a modified Mersenne Twister with a period of 2**19937-1.

Implementation notes

This RNG reproduces the same random bytes and floats as MRI. It may differ when returning elements confined to a distribution.


Generate integers:

let seed = [627457_u32, 697550, 16438, 41926];
let mut random = Random::with_array_seed(seed);
let rand = random.next_int32();

Generate random numbers in a range:

let mut random = Random::new()?;
let max = Max::Integer(10);
let mut rand = rand(&mut random, max)?;
assert!(matches!(rand, Rand::Integer(x) if x < 10));


This crate is no_std compatible when built without the std feature. This crate does not depend on alloc.

Crate features

All features are enabled by default.

  • random-rand - Enables range sampling methods for the rand() function. Activating this feature also activates the rand-traits feature. Dropping this feature removes the rand dependency.
  • rand-traits - Enables implementations of RngCore on the Random type. Dropping this feature removes the rand_core dependency.
  • std - Enables a dependency on the Rust Standard Library. Activating this feature enables std::error::Error impls on error types in this crate.


Error that indicates a random number could not be generated with the given bounds.
Error that indicates a Random random number generator failed to initialize.
Error that indicates the system source of cryptographically secure randomness failed to read sufficient bytes to create a new seed.
Random provides an interface to Ruby’s pseudo-random number generator, or PRNG.
Error that indicates the system source of cryptographically secure randomness failed to read the requested bytes.


Sum type of all errors possibly returned from Random functions.
A range constraint for generating random numbers.
A generated random number.


Read a new Random seed, using platform-provided randomness.
Generate random numbers bounded from below by 0 and above by the given max.
Convert a byte array into a reseeding key of u32s.
Read random bytes, using platform-provided randomness.