No description
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Daniel Baumann 02ee70da4d
Releasing fastforward version 2.3.0-2~ffwd13+u1.
Signed-off-by: Daniel Baumann <daniel@debian.org>
2026-07-20 09:53:40 +02:00
benches Adding upstream version 2.1.1. 2026-07-20 09:50:32 +02:00
debian Releasing fastforward version 2.3.0-2~ffwd13+u1. 2026-07-20 09:53:40 +02:00
src Merging upstream version 2.3.0. 2026-07-20 09:52:55 +02:00
tests Adding upstream version 2.1.1. 2026-07-20 09:50:32 +02:00
.cargo_vcs_info.json Merging upstream version 2.3.0. 2026-07-20 09:52:55 +02:00
Cargo.toml Merging upstream version 2.3.0. 2026-07-20 09:52:55 +02:00
Cargo.toml.orig Merging upstream version 2.3.0. 2026-07-20 09:52:55 +02:00
CHANGELOG.md Merging upstream version 2.3.0. 2026-07-20 09:52:55 +02:00
LICENSE-APACHE Adding upstream version 2.1.1. 2026-07-20 09:50:32 +02:00
LICENSE-MIT Adding upstream version 2.1.1. 2026-07-20 09:50:32 +02:00
README.md Merging upstream version 2.3.0. 2026-07-20 09:52:55 +02:00

fastrand

Build License Cargo Documentation

A simple and fast random number generator.

The implementation uses Wyrand, a simple and fast generator but not cryptographically secure.

Examples

Flip a coin:

if fastrand::bool() {
    println!("heads");
} else {
    println!("tails");
}

Generate a random i32:

let num = fastrand::i32(..);

Choose a random element in an array:

let v = vec![1, 2, 3, 4, 5];
let i = fastrand::usize(..v.len());
let elem = v[i];

Sample values from an array with O(n) complexity (n is the length of array):

fastrand::choose_multiple([1, 4, 5], 2);
fastrand::choose_multiple(0..20, 12);

Shuffle an array:

let mut v = vec![1, 2, 3, 4, 5];
fastrand::shuffle(&mut v);

Generate a random Vec or String:

use std::iter::repeat_with;

let v: Vec<i32> = repeat_with(|| fastrand::i32(..)).take(10).collect();
let s: String = repeat_with(fastrand::alphanumeric).take(10).collect();

To get reproducible results on every run, initialize the generator with a seed:

// Pick an arbitrary number as seed.
fastrand::seed(7);

// Now this prints the same number on every run:
println!("{}", fastrand::u32(..));

To be more efficient, create a new Rng instance instead of using the thread-local generator:

use std::iter::repeat_with;

let rng = fastrand::Rng::new();
let mut bytes: Vec<u8> = repeat_with(|| rng.u8(..)).take(10_000).collect();

This crate aims to expose a core set of useful randomness primitives. For more niche algorithms, consider using the fastrand-contrib crate alongside this one.

Features

  • std (enabled by default): Enables the std library. This is required for the global generator and global entropy. Without this feature, [Rng] can only be instantiated using the with_seed method.
  • js: Assumes that WebAssembly targets are being run in a JavaScript environment.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.