Struct Acorn

Source
pub struct Acorn { /* private fields */ }
Expand description

Additive Congruential Random Number (ACORN) generator.

Implementations§

Source§

impl Acorn

Source

pub fn new(k: Order, seed: Seed) -> Self

Create a new ACORN generator.

This function always cycles through generating 20 individual u128s. This ensures that the modulus ceiling has been passed and wraps back around to generate a pseudo-random number even when the lowest values are provided for both Order and Seed. It returns an Acorn struct that you can use to generate pseudo-random numbers.

The internal modulus is fixed as a u128 set to 2^120.

§Examples
use acorn_prng::{Acorn, Order, Seed};

let order = Order::new(45);
let seed = Seed::new(1_000_000);
let mut prng = Acorn::new(order, seed);

Note that the created generator needs to be mutable to change the internal state.

Source

pub fn generate_fixed_length_usize(&mut self, length: usize) -> usize

Generate a random usize of a fixed digit length.

§Examples
use acorn_prng::{Acorn, Order, Seed};

let mut prng = Acorn::new(Order::new(45), Seed::new(1_000_000));
let number = prng.generate_fixed_length_usize(3);

assert_eq!(822, number); // assuming above input. further calls will produce different results

Note that the max size of a usize is platform dependant.

Source

pub fn generate_fixed_length_u8(&mut self, length: usize) -> u8

Generate a random u8 of a fixed digit length.

§Examples
use acorn_prng::{Acorn, Order, Seed};

let mut prng = Acorn::new(Order::new(45), Seed::new(1_000_000));
let number = prng.generate_fixed_length_u8(3);

assert_eq!(111, number); // assuming above input. further calls will produce different results

Note that the length is clamped between 1 and 3 because u8::MAX is 3 digits long.

Source

pub fn generate_fixed_length_u16(&mut self, length: usize) -> u16

Generate a random u16 of a fixed digit length.

§Examples
use acorn_prng::{Acorn, Order, Seed};

let mut prng = Acorn::new(Order::new(45), Seed::new(1_000_000));
let number = prng.generate_fixed_length_u16(3);

assert_eq!(822, number); // assuming above input. further calls will produce different results

Note that the length is clamped between 1 and 5 because u16::MAX is 5 digits long.

Source

pub fn generate_fixed_length_u32(&mut self, length: usize) -> u32

Generate a random u32 of a fixed digit length.

§Examples
use acorn_prng::{Acorn, Order, Seed};

let mut prng = Acorn::new(Order::new(45), Seed::new(1_000_000));
let number = prng.generate_fixed_length_u32(3);

assert_eq!(822, number); // assuming above input. further calls will produce different results

Note that the length is clamped between 1 and 10 because u32::MAX is 10 digits long.

Source

pub fn generate_fixed_length_u64(&mut self, length: usize) -> u64

Generate a random u64 of a fixed digit length.

§Examples
use acorn_prng::{Acorn, Order, Seed};

let mut prng = Acorn::new(Order::new(45), Seed::new(1_000_000));
let number = prng.generate_fixed_length_u64(3);

assert_eq!(822, number); // assuming above input. further calls will produce different results

Note that the length is clamped between 1 and 20 because u64::MAX is 20 digits long.

Source

pub fn generate_fixed_length_u128(&mut self, length: usize) -> u128

Generate a random u128 of a fixed digit length.

§Examples
use acorn_prng::{Acorn, Order, Seed};

let mut prng = Acorn::new(Order::new(45), Seed::new(1_000_000));
let number = prng.generate_fixed_length_u128(3);

assert_eq!(822, number); // assuming above input. further calls will produce different results

Note that the length is clamped between 1 and 39 because u128::MAX is 39 digits long.

Source

pub fn generate_usize_between_range( &mut self, range: RangeInclusive<usize>, ) -> usize

Generate a random usize within a given RangeInclusive.

§Examples
use acorn_prng::{Acorn, Order, Seed};

let mut prng = Acorn::new(Order::new(45), Seed::new(1_000_000));
let number = prng.generate_usize_between_range(71..=777);

assert_eq!(571, number); // assuming above input. further calls will produce different results
Source

pub fn generate_u8_between_range(&mut self, range: RangeInclusive<u8>) -> u8

Generate a random u8 within a given RangeInclusive.

§Examples
use acorn_prng::{Acorn, Order, Seed};

let mut prng = Acorn::new(Order::new(45), Seed::new(1_000_000));
let number = prng.generate_u8_between_range(71..=255);

assert_eq!(82, number); // assuming above input. further calls will produce different results
Source

pub fn generate_u16_between_range(&mut self, range: RangeInclusive<u16>) -> u16

Generate a random u16 within a given RangeInclusive.

§Examples
use acorn_prng::{Acorn, Order, Seed};

let mut prng = Acorn::new(Order::new(45), Seed::new(1_000_000));
let number = prng.generate_u16_between_range(71..=777);

assert_eq!(571, number); // assuming above input. further calls will produce different results
Source

pub fn generate_u32_between_range(&mut self, range: RangeInclusive<u32>) -> u32

Generate a random u32 within a given RangeInclusive.

§Examples
use acorn_prng::{Acorn, Order, Seed};

let mut prng = Acorn::new(Order::new(45), Seed::new(1_000_000));
let number = prng.generate_u32_between_range(71..=777);

assert_eq!(571, number); // assuming above input. further calls will produce different results
Source

pub fn generate_u64_between_range(&mut self, range: RangeInclusive<u64>) -> u64

Generate a random u64 within a given RangeInclusive.

§Examples
use acorn_prng::{Acorn, Order, Seed};

let mut prng = Acorn::new(Order::new(45), Seed::new(1_000_000));
let number = prng.generate_u64_between_range(71..=777);

assert_eq!(571, number); // assuming above input. further calls will produce different results
Source

pub fn generate_u128_between_range( &mut self, range: RangeInclusive<u128>, ) -> u128

Generate a random u128 within a given RangeInclusive.

§Examples
use acorn_prng::{Acorn, Order, Seed};

let mut prng = Acorn::new(Order::new(45), Seed::new(1_000_000));
let number = prng.generate_u128_between_range(71..=777);

assert_eq!(571, number); // assuming above input. further calls will produce different results

Trait Implementations§

Source§

impl Debug for Acorn

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for Acorn

Source§

fn eq(&self, other: &Acorn) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for Acorn

Source§

impl StructuralPartialEq for Acorn

Auto Trait Implementations§

§

impl Freeze for Acorn

§

impl RefUnwindSafe for Acorn

§

impl Send for Acorn

§

impl Sync for Acorn

§

impl Unpin for Acorn

§

impl UnwindSafe for Acorn

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.