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:

use spinoso_random::Random;

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:

use spinoso_random::{rand, Max, Rand, Random};

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.

  • rand-method - Enables range sampling methods for the rand() function. Activating this feature also activates the rand_core feature. Dropping this feature removes the rand dependency.
  • rand_core - 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.