diff --git a/random-js/random-js-tests.ts b/random-js/random-js-tests.ts new file mode 100644 index 000000000..9ee80883b --- /dev/null +++ b/random-js/random-js-tests.ts @@ -0,0 +1,29 @@ +/// +/// + +// Examples taken from the documentation at https://github.com/ckknight/random-js +// create a Mersenne Twister-19937 that is auto-seeded based on time and other random values +import Engine = random.Engine; +import Random = random.Random; + +var engine: Engine = Random.engines.mt19937().autoSeed(); +// create a distribution that will consistently produce integers within inclusive range [0, 99]. +var distribution: Function = Random.integer(0, 99); +// generate a number that is guaranteed to be within [0, 99] without any particular bias. +function generateNaturalLessThan100(): number { + return distribution(engine); +} + +// using essentially Math.random() +var engine2: Engine = Random.engines.nativeMath; +// lower-case Hex string distribution +var distribution2: Function = Random.hex(false); +// generate a 40-character hex string +function generateSHA1(): string { + return distribution(40); +} + +var r: Random = new Random(Random.engines.mt19937().seedWithArray([0x12345678, 0x90abcdef])); +var value = r.integer(0, 99); + +r = new Random(); // same as new Random(Random.engines.nativeMath) diff --git a/random-js/random-js.d.ts b/random-js/random-js.d.ts new file mode 100644 index 000000000..c03d6af0f --- /dev/null +++ b/random-js/random-js.d.ts @@ -0,0 +1,62 @@ +// Type definitions for random-js 1.0.8 +// Project: https://github.com/ckknight/random-js +// Definitions by: Gustavo Di Pietro +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +declare module random { + export function Engine(): number; + export interface Engine { + + } + + export function MT19937 (): number; + export interface MT19937 extends Engine{ + seed (value: number): Engine; + seedWithArray(array: Array): Engine + autoSeed(): Engine; + discard(count: number): Engine; + getUseCount(): Engine; + } + + export class Random { + constructor (engine?: Engine); + + static engines: { + nativeMath: Engine, + browserCrypto: Engine, + mt19937: () => MT19937 + } + + static integer(min: number, max: number): (engine: Engine) => number; + static real(min: number, max: number, inclusive: boolean): (engine: Engine) => number; + static bool(percentage?: number): (engine: Engine) => boolean; + static bool(numerator: number, denominator: number): (engine: Engine) => boolean; + static pick(engine: Engine, array: Array, begin?: number, end?: number): T; + static picker(array: Array, begin?: number, end?: number): (engine: Engine) => T; + static shuffle(engine: Engine, array: Array): Array; + static sample(engine: Engine, population: Array, sampleSize: number): Array; + static die(sideCount: number): (engine: Engine) => number; + static dice(sideCount: number, dieCount: number): (engine: Engine) => number; + static uuid4(engine: Engine): string; + static string(engine: Engine, length: number): string; + static string(pool: string, length: number): (engine: Engine, length: number) => string; + static hex(upperCase?: boolean): (engine: Engine, length: number) => string; + static date(start: Date, end: Date): (engine: Engine) => Date; + + integer(min: number, max: number): number; + real(min: number, max: number, inclusive: boolean): number; + bool(percentage?: number): (engine: Engine) => boolean; + bool(numerator: number, denominator: number): boolean; + pick(engine: Engine, array: Array, begin?: number, end?: number): T; + picker(array: Array, begin?: number, end?: number): (engine: Engine) => T; + shuffle(engine: Engine, array: Array): Array; + sample(engine: Engine, population: Array, sampleSize: number): Array; + die(sideCount: number): (engine: Engine) => number; + dice(sideCount: number, dieCount: number): number; + uuid4(engine: Engine): string; + string(engine: Engine, length: number): string; + string(pool: string, length: number): string; + hex(upperCase?: boolean): string; + date(start: Date, end: Date): Date; + } +}