UNPKG

fast-check

Version:

Property based testing framework for JavaScript (like QuickCheck)

41 lines (40 loc) 1.74 kB
import { Arbitrary } from '../../check/arbitrary/definition/Arbitrary.js'; import { Stream } from '../../stream/Stream.js'; import { safeMap } from '../../utils/globals.js'; import { buildGeneratorValue } from './builders/GeneratorValueBuilder.js'; import { buildStableArbitraryGeneratorCache, naiveIsEqual } from './builders/StableArbitraryGeneratorCache.js'; import { tupleShrink } from './TupleArbitrary.js'; export class GeneratorArbitrary extends Arbitrary { constructor() { super(...arguments); this.arbitraryCache = buildStableArbitraryGeneratorCache(naiveIsEqual); } generate(mrng, biasFactor) { return buildGeneratorValue(mrng, biasFactor, () => [], this.arbitraryCache); } canShrinkWithoutContext(value) { return false; } shrink(_value, context) { if (context === undefined) { return Stream.nil(); } const safeContext = context; const mrng = safeContext.mrng; const biasFactor = safeContext.biasFactor; const history = safeContext.history; return tupleShrink(history.map((c) => c.arb), history.map((c) => c.value), history.map((c) => c.context)).map((shrink) => { function computePreBuiltValues() { const subValues = shrink.value; const subContexts = shrink.context; return safeMap(history, (entry, index) => ({ arb: entry.arb, value: subValues[index], context: subContexts[index], mrng: entry.mrng, })); } return buildGeneratorValue(mrng, biasFactor, computePreBuiltValues, this.arbitraryCache); }); } }