UNPKG

fast-check

Version:

Property based testing framework for JavaScript (like QuickCheck)

38 lines (37 loc) 1.4 kB
import { Arbitrary } from './definition/Arbitrary.js'; import { Shrinkable } from './definition/Shrinkable.js'; import { nat } from './IntegerArbitrary.js'; class OptionArbitrary extends Arbitrary { constructor(arb, frequency, nil) { super(); this.arb = arb; this.frequency = frequency; this.nil = nil; this.isOptionArb = nat(frequency); } static extendedShrinkable(s, nil) { function* g() { yield new Shrinkable(nil); } return new Shrinkable(s.value_, () => s .shrink() .map((v) => OptionArbitrary.extendedShrinkable(v, nil)) .join(g())); } generate(mrng) { return this.isOptionArb.generate(mrng).value === 0 ? new Shrinkable(this.nil) : OptionArbitrary.extendedShrinkable(this.arb.generate(mrng), this.nil); } withBias(freq) { return new OptionArbitrary(this.arb.withBias(freq), this.frequency, this.nil); } } function option(arb, constraints) { if (!constraints) return new OptionArbitrary(arb, 5, null); if (typeof constraints === 'number') return new OptionArbitrary(arb, constraints, null); return new OptionArbitrary(arb, constraints.freq == null ? 5 : constraints.freq, Object.prototype.hasOwnProperty.call(constraints, 'nil') ? constraints.nil : null); } export { option };