UNPKG

prando

Version:

Deterministic pseudo-random number generator for JavaScript and TypeScript

93 lines (92 loc) 4.13 kB
export default class Prando { private static readonly MIN; private static readonly MAX; private _seed; private _value; /** * Generate a new Prando pseudo-random number generator. * * @param seed - A number or string seed that determines which pseudo-random number sequence will be created. Defaults to a random seed based on `Math.random()`. */ constructor(seed?: number | string); /** * Generates a pseudo-random number between a lower (inclusive) and a higher (exclusive) bounds. * * @param min - The minimum number that can be randomly generated. * @param pseudoMax - The maximum number that can be randomly generated (exclusive). * @return The generated pseudo-random number. */ next(min?: number, pseudoMax?: number): number; /** * Generates a pseudo-random integer number in a range (inclusive). * * @param min - The minimum number that can be randomly generated. * @param max - The maximum number that can be randomly generated. * @return The generated pseudo-random number. */ nextInt(min?: number, max?: number): number; /** * Generates a pseudo-random string sequence of a particular length from a specific character range. * * Note: keep in mind that creating a random string sequence does not guarantee uniqueness; there is always a * 1 in (char_length^string_length) chance of collision. For real unique string ids, always check for * pre-existing ids, or employ a robust GUID/UUID generator. * * @param length - Length of the string to be generated. * @param chars - Characters that are used when creating the random string. Defaults to all alphanumeric chars (A-Z, a-z, 0-9). * @return The generated string sequence. */ nextString(length?: number, chars?: string): string; /** * Generates a pseudo-random string of 1 character specific character range. * * @param chars - Characters that are used when creating the random string. Defaults to all alphanumeric chars (A-Z, a-z, 0-9). * @return The generated character. */ nextChar(chars?: string): string; /** * Picks a pseudo-random item from an array. The array is left unmodified. * * Note: keep in mind that while the returned item will be random enough, picking one item from the array at a time * does not guarantee nor imply that a sequence of random non-repeating items will be picked. If you want to * *pick items in a random order* from an array, instead of *pick one random item from an array*, it's best to * apply a *shuffle* transformation to the array instead, then read it linearly. * * @param array - Array of any type containing one or more candidates for random picking. * @return An item from the array. */ nextArrayItem<T>(array: T[]): T; /** * Generates a pseudo-random boolean. * * @return A value of true or false. */ nextBoolean(): boolean; /** * Skips ahead in the sequence of numbers that are being generated. This is equivalent to * calling next() a specified number of times, but faster since it doesn't need to map the * new random numbers to a range and return it. * * @param iterations - The number of items to skip ahead. */ skip(iterations?: number): void; /** * Reset the pseudo-random number sequence back to its starting seed. Further calls to next() * will then produce the same sequence of numbers it had produced before. This is equivalent to * creating a new Prando instance with the same seed as another Prando instance. * * Example: * let rng = new Prando(12345678); * console.log(rng.next()); // 0.6177754114889017 * console.log(rng.next()); // 0.5784605181725837 * rng.reset(); * console.log(rng.next()); // 0.6177754114889017 again * console.log(rng.next()); // 0.5784605181725837 again */ reset(): void; private recalculate; private xorshift; private map; private hashCode; private getSafeSeed; }