Skip to main content

Abstract Class: Arbitrary<T>

Defined in: packages/fast-check/src/check/arbitrary/definition/Arbitrary.ts:14

Abstract class able to generate values on type T

The values generated by an instance of Arbitrary can be previewed - with sample - or classified - with statistics.

Remarks​

Since 0.0.7

Type Parameters​

Type Parameter
T

Constructors​

Constructor​

new Arbitrary<T>(): Arbitrary<T>

Returns​

Arbitrary<T>

Methods​

canShrinkWithoutContext()​

abstract canShrinkWithoutContext(value): value is T

Defined in: packages/fast-check/src/check/arbitrary/definition/Arbitrary.ts:42

Check if a given value could be pass to shrink without providing any context.

In general, canShrinkWithoutContext is not designed to be called for each shrink but rather on very special cases. Its usage must be restricted to canShrinkWithoutContext or in the rare* contexts of a shrink method being called without any context. In this ill-formed case of shrink, canShrinkWithoutContext could be used or called if needed.

*we fall in that case when fast-check is asked to shrink a value that has been provided manually by the user, in other words: a value not coming from a call to generate or a normal shrink with context.

Parameters​

ParameterTypeDescription
valueunknownValue to be assessed

Returns​

value is T

true if and only if the value could have been generated by this instance

Remarks​

Since 3.0.0


chain()​

chain<U>(chainer): Arbitrary<U>

Defined in: packages/fast-check/src/check/arbitrary/definition/Arbitrary.ts:140

Create another arbitrary by mapping a value from a base Arbirary using the provided fmapper Values produced by the new arbitrary are the result of the arbitrary generated by applying fmapper to a value

Type Parameters​

Type Parameter
U

Parameters​

ParameterTypeDescription
chainer(t) => Arbitrary<U>Chain function, to produce a new Arbitrary using a value from another Arbitrary

Returns​

Arbitrary<U>

New arbitrary of new type

Example​

const arrayAndLimitArbitrary = fc.nat().chain((c: number) => fc.tuple( fc.array(fc.nat(c)), fc.constant(c)));

Remarks​

Since 1.2.0


filter()​

Call Signature​

filter<U>(refinement): Arbitrary<U>

Defined in: packages/fast-check/src/check/arbitrary/definition/Arbitrary.ts:78

Create another arbitrary by filtering values against predicate

All the values produced by the resulting arbitrary satisfy predicate(value) == true

Be aware that using filter may highly impact the time required to generate a valid entry

Type Parameters​
Type Parameter
U
Parameters​
ParameterTypeDescription
refinement(t) => t is UPredicate, to test each produced element. Return true to keep the element, false otherwise
Returns​

Arbitrary<U>

New arbitrary filtered using predicate

Example​
const integerGenerator: Arbitrary<number> = ...;
const evenIntegerGenerator: Arbitrary<number> = integerGenerator.filter(e => e % 2 === 0);
// new Arbitrary only keeps even values
Remarks​

Since 1.23.0

Call Signature​

filter(predicate): Arbitrary<T>

Defined in: packages/fast-check/src/check/arbitrary/definition/Arbitrary.ts:99

Create another arbitrary by filtering values against predicate

All the values produced by the resulting arbitrary satisfy predicate(value) == true

Be aware that using filter may highly impact the time required to generate a valid entry

Parameters​
ParameterTypeDescription
predicate(t) => booleanPredicate, to test each produced element. Return true to keep the element, false otherwise
Returns​

Arbitrary<T>

New arbitrary filtered using predicate

Example​
const integerGenerator: Arbitrary<number> = ...;
const evenIntegerGenerator: Arbitrary<number> = integerGenerator.filter(e => e % 2 === 0);
// new Arbitrary only keeps even values
Remarks​

Since 0.0.1


generate()​

abstract generate(mrng, biasFactor): Value<T>

Defined in: packages/fast-check/src/check/arbitrary/definition/Arbitrary.ts:25

Generate a value of type T along with its context (if any) based on the provided random number generator

Parameters​

ParameterTypeDescription
mrngRandomRandom number generator
biasFactornumber | undefinedIf taken into account 1 value over biasFactor must be biased. Either integer value greater or equal to 2 (bias) or undefined (no bias)

Returns​

Value<T>

Random value of type T and its context

Remarks​

Since 0.0.1 (return type changed in 3.0.0)


map()​

map<U>(mapper, unmapper?): Arbitrary<U>

Defined in: packages/fast-check/src/check/arbitrary/definition/Arbitrary.ts:122

Create another arbitrary by mapping all produced values using the provided mapper Values produced by the new arbitrary are the result of applying mapper value by value

Type Parameters​

Type Parameter
U

Parameters​

ParameterTypeDescription
mapper(t) => UMap function, to produce a new element based on an old one
unmapper?(possiblyU) => TOptional unmap function, it will never be used except when shrinking user defined values. Must throw if value is not compatible (since 3.0.0)

Returns​

Arbitrary<U>

New arbitrary with mapped elements

Example​

const rgbChannels: Arbitrary<{r:number,g:number,b:number}> = ...;
const color: Arbitrary<string> = rgbChannels.map(ch => `#${(ch.r*65536 + ch.g*256 + ch.b).toString(16).padStart(6, '0')}`);
// transform an Arbitrary producing {r,g,b} integers into an Arbitrary of '#rrggbb'

Remarks​

Since 0.0.1


shrink()​

abstract shrink(value, context): Stream<Value<T>>

Defined in: packages/fast-check/src/check/arbitrary/definition/Arbitrary.ts:56

Shrink a value of type T, may rely on the context previously provided to shrink efficiently

Must never be called with possibly invalid values and no context without ensuring that such call is legal by calling canShrinkWithoutContext first on the value.

Parameters​

ParameterTypeDescription
valueTThe value to shrink
contextunknownIts associated context (the one returned by generate) or undefined if no context but canShrinkWithoutContext(value) === true

Returns​

Stream<Value<T>>

Stream of shrinks for value based on context (if provided)

Remarks​

Since 3.0.0