Link Search Menu Expand Document

index overview

Added in v0.1.0


Table of contents


Applicative

ap

Signature

export declare const ap: <E, A>(fa: State<E, A>) => <B>(fab: State<E, (a: A) => B>) => State<E, B>

Added in v0.1.0

of

Signature

export declare const of: <E, A>(a: A) => State<E, A>

Added in v0.1.0

Constructors

arrayOf

Generates a pseudo random array

Signature

export declare const arrayOf: <T>(gen: Gen<T>) => Gen<T[]>

Example

import { mkSeed, generateSample, arrayOf, int } from '@no-day/fp-ts-generators'
import { pipe } from 'fp-ts/function'

assert.deepStrictEqual(
  pipe(
    arrayOf(int()),

    generateSample({ count: 10, size: 5, seed: mkSeed(42) })
  ),
  [[27], [22, -14, 73], [-84, -13, 50], [-6, 16, -62, 76], [-44, 96], [48, 0], [], [23, 75, -63, -71, 64], [], [-83]]
)

Added in v0.1.0

boolean

A pseudo random boolean

Signature

export declare const boolean: Gen<boolean>

Example

import { mkSeed, generateSample, boolean } from '@no-day/fp-ts-generators'
import { pipe } from 'fp-ts/function'

assert.deepStrictEqual(
  pipe(
    boolean,

    generateSample({ seed: mkSeed(42) })
  ),
  [true, true, true, true, true, false, true, true, false, false]
)

Added in v0.1.0

char

A pseudo random character

Signature

export declare const char: ({ from, to }?: { from?: string; to?: string }) => Gen<string>

Example

import { mkSeed, generateSample, char } from '@no-day/fp-ts-generators'
import { pipe } from 'fp-ts/function'

assert.deepStrictEqual(
  pipe(
    char(),

    generateSample({ count: 20, seed: mkSeed(42) })
  ),
  ['K', '}', 'l', 'i', 'C', ':', 'n', 'o', 'q', '0', '{', 'h', '}', 'I', '=', 'o', '<', 'U', 'Z', ';']
)

assert.deepStrictEqual(
  pipe(
    char({ from: 'a', to: 'z' }),

    generateSample({ count: 20, seed: mkSeed(42) })
  ),
  ['r', 'v', 'l', 'f', 'p', 'i', 'n', 'b', 'k', 's', 'w', 'a', 'j', 'e', 'b', 'q', 'p', 'w', 'a', 'm']
)

Added in v0.1.0

float

Generates a pseudo random float in a given interval

Signature

export declare const float: ({ min, max }?: { min?: number; max?: number }) => Gen<number>

Example

import { mkSeed, generateSample, float } from '@no-day/fp-ts-generators'
import * as gen from '@no-day/fp-ts-generators'
import { pipe } from 'fp-ts/function'

const formatFloat = (digits: number) => (n: number) => Math.round(n * 10 ** digits) / 10 ** digits

assert.deepStrictEqual(
  pipe(
    float({ min: -10, max: 10 }),
    gen.map(formatFloat(4)),

    generateSample({ count: 10, seed: mkSeed(42) })
  ),
  [-10, -9.9807, 3.1279, 7.1632, -3.2143, 2.4419, -6.8668, -7.1208, -7.7128, -3.9007]
)

Added in v0.1.0

int

Generates a pseudo random integer in a given interval

Signature

export declare const int: ({ min, max }?: { min?: number; max?: number }) => Gen<number>

Example

import { mkSeed, generateSample, int } from '@no-day/fp-ts-generators'
import { pipe } from 'fp-ts/function'

assert.deepStrictEqual(
  pipe(
    int({ min: -10, max: 10 }),

    generateSample({ count: 10, seed: mkSeed(42) })
  ),
  [-9, 3, 8, -2, -2, -8, -4, 3, -7, -10]
)

Added in v0.1.0

lcgStep

A random generator which simply outputs the current seed.

Signature

export declare const lcgStep: Gen<number>

Example

import { mkSeed, generateSample, lcgStep } from '@no-day/fp-ts-generators'
import { pipe } from 'fp-ts/function'

assert.deepStrictEqual(
  pipe(
    lcgStep,

    generateSample({ count: 4, seed: mkSeed(42) })
  ),
  [43, 2075653, 1409598201, 1842888923]
)

Added in v0.1.0

oneOf

Create a random generator which selects and executes a random generator from a non-empty array of random generators with uniform probability.

Signature

export declare const oneOf: <T>(gens: NonEmptyArray<Gen<T>>) => Gen<T>

Example

import { mkSeed, generateSample, oneOf, int } from '@no-day/fp-ts-generators'
import { pipe } from 'fp-ts/function'

assert.deepStrictEqual(
  pipe(
    oneOf([int({ min: 10, max: 20 }), int({ min: 50, max: 60 })]),

    generateSample({ count: 6, seed: mkSeed(42) })
  ),
  [58, 57, 55, 60, 12, 10]
)

Added in v0.1.0

recordOf

Generates a pseudo random record if generators are provided for each field

Signature

export declare const recordOf: <E, NER>(
  r: (keyof NER extends never ? never : NER) & Record<string, State<E, any>>
) => State<E, { [K in keyof NER]: [NER[K]] extends [State<any, infer A>] ? A : never }>

Example

import { mkSeed, generateSample, recordOf, boolean, int } from '@no-day/fp-ts-generators'
import { pipe } from 'fp-ts/function'

assert.deepStrictEqual(
  pipe(
    recordOf({ bar: boolean, baz: int(), foo: int() }),

    generateSample({ count: 4, seed: mkSeed(42) })
  ),
  [
    {
      bar: true,
      baz: 27,
      foo: -25,
    },
    {
      bar: true,
      baz: -14,
      foo: 73,
    },
    {
      bar: true,
      baz: -84,
      foo: -13,
    },
    {
      bar: false,
      baz: 36,
      foo: -6,
    },
  ]
)

Added in v0.1.0

string

A pseudo random string

Signature

export declare const string: ({ from, to }?: { from?: string; to?: string }) => Gen<string>

Example

import { mkSeed, generateSample, string } from '@no-day/fp-ts-generators'
import { pipe } from 'fp-ts/function'

assert.deepStrictEqual(
  pipe(
    string({ from: 'a', to: 'z' }),

    generateSample({ count: 10, seed: mkSeed(42) })
  ),

  ['vlfpinbksw', '', 'ebqpwa', 'uknubf', 'lq', 'jflq', 'fehcuxoqm', 'lsug', 'bat', 't']
)

Added in v0.1.0

tupleOf

Generates a pseudo random tuple if generators are provided for each position

Signature

export declare const tupleOf: <E, T>(
  ...t: T & { readonly 0: State<E, any> }
) => State<E, { [K in keyof T]: [T[K]] extends [State<E, infer A>] ? A : never }>

Example

import { mkSeed, generateSample, tupleOf, int, boolean } from '@no-day/fp-ts-generators'
import { pipe } from 'fp-ts/function'

assert.deepStrictEqual(
  pipe(
    tupleOf(int(), boolean),

    generateSample({ count: 4, seed: mkSeed(42) })
  ),
  [
    [-57, true],
    [-25, true],
    [-14, false],
    [-64, true],
  ]
)

Added in v0.1.0

uniform

A random generator which approximates a uniform random variable on [0, 1]

Signature

export declare const uniform: <T>() => Gen<number>

Example

import { mkSeed, generateSample, uniform } from '@no-day/fp-ts-generators'
import * as gen from '@no-day/fp-ts-generators'
import { pipe } from 'fp-ts/function'

const formatFloat = (digits: number) => (n: number) => Math.round(n * 10 ** digits) / 10 ** digits

assert.deepStrictEqual(
  pipe(
    uniform(),
    gen.map(formatFloat(4)),

    generateSample({ count: 10, seed: mkSeed(42) })
  ),
  [0, 0.001, 0.6564, 0.8582, 0.3393, 0.6221, 0.1567, 0.144, 0.1144, 0.305]
)

Added in v0.1.0

vectorOf

Generates a pseudo random array of a fixed size

Signature

export declare const vectorOf: (size: number) => <T>(gen: Gen<T>) => Gen<T[]>

Example

import { mkSeed, generateSample, vectorOf, int } from '@no-day/fp-ts-generators'
import { pipe } from 'fp-ts/function'

assert.deepStrictEqual(
  pipe(
    vectorOf(6)(int()),

    generateSample({ count: 4, seed: mkSeed(42) })
  ),
  [
    [-57, 27, -25, 22, -14, 73],
    [-64, -84, -13, 50, 36, -6],
    [16, -62, 76, -8, -44, 96],
    [88, 48, 0, -37, -53, 23],
  ]
)

Added in v0.1.0

Destructors

evalGen

Run a random generator

Signature

export declare const evalGen: <S>(s: S) => <A>(ma: State<S, A>) => A

Added in v0.1.0

generate

Run a random generator with a given seed and size.

Signature

export declare const generate: (opts: { seed: Seed; size?: number }) => <T>(gen: Gen<T>) => T

Added in v0.1.0

generateSample

Run a random generator with a given seed and size. Produces an array of results, configured by count.

Signature

export declare const generateSample: (opts: { seed: Seed; size?: number; count?: number }) => <T>(gen: Gen<T>) => T[]

Added in v0.1.0

Functor

map

Signature

export declare const map: <A, B>(f: (a: A) => B) => <E>(fa: State<E, A>) => State<E, B>

Added in v0.1.0

Instances

Applicative

Signature

export declare const Applicative: Applicative2<'State'>

Added in v0.1.0

Functor

Signature

export declare const Functor: Functor2<'State'>

Added in v0.1.0

Monad

Signature

export declare const Monad: Monad2<'State'>

Added in v0.1.0

Model

Gen (type alias)

The random generator monad

Signature

export type Gen<T> = State<GenState, T>

Added in v0.1.0

GenState (type alias)

The state of the random generator monad.

Signature

export type GenState = { newSeed: Seed; size: Size }

Added in v0.1.0

Size (type alias)

The meaning of size depends on the particular generator used.

Signature

export type Size = number

Added in v0.1.0

Monad

chain

Signature

export declare const chain: <E, A, B>(f: (a: A) => State<E, B>) => (ma: State<E, A>) => State<E, B>

Added in v0.1.0

Util

mkSeed

Creates a seed to that’s needed for the random generator

Signature

export declare const mkSeed: (n: number) => Seed

Added in v0.1.0

seedMax

Maximum possible seed value

Signature

export declare const seedMax: number

Added in v0.1.0

seedMin

Minimum possible seed value

Signature

export declare const seedMin: number

Added in v0.1.0

Utils

bind

Signature

export declare const bind: <N extends string, A, S, B>(
  name: Exclude<N, keyof A>,
  f: (a: A) => State<S, B>
) => (fa: State<S, A>) => State<S, { [K in N | keyof A]: K extends keyof A ? A[K] : B }>

Added in v0.1.0

bindTo

Signature

export declare const bindTo: <N extends string>(name: N) => <S, A>(fa: State<S, A>) => State<S, { [K in N]: A }>

Added in v0.1.0