UNPKG

fast-check

Version:

Property based testing framework for JavaScript (like QuickCheck)

46 lines (45 loc) 2.73 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.uniqueArray = uniqueArray; const ArrayArbitrary_js_1 = require("./_internals/ArrayArbitrary.js"); const MaxLengthFromMinLength_js_1 = require("./_internals/helpers/MaxLengthFromMinLength.js"); const CustomEqualSet_js_1 = require("./_internals/helpers/CustomEqualSet.js"); const StrictlyEqualSet_js_1 = require("./_internals/helpers/StrictlyEqualSet.js"); const SameValueSet_js_1 = require("./_internals/helpers/SameValueSet.js"); const SameValueZeroSet_js_1 = require("./_internals/helpers/SameValueZeroSet.js"); function buildUniqueArraySetBuilder(constraints) { if (typeof constraints.comparator === 'function') { if (constraints.selector === undefined) { const comparator = constraints.comparator; const isEqualForBuilder = (nextA, nextB) => comparator(nextA.value_, nextB.value_); return () => new CustomEqualSet_js_1.CustomEqualSet(isEqualForBuilder); } const comparator = constraints.comparator; const selector = constraints.selector; const refinedSelector = (next) => selector(next.value_); const isEqualForBuilder = (nextA, nextB) => comparator(refinedSelector(nextA), refinedSelector(nextB)); return () => new CustomEqualSet_js_1.CustomEqualSet(isEqualForBuilder); } const selector = constraints.selector || ((v) => v); const refinedSelector = (next) => selector(next.value_); switch (constraints.comparator) { case 'IsStrictlyEqual': return () => new StrictlyEqualSet_js_1.StrictlyEqualSet(refinedSelector); case 'SameValueZero': return () => new SameValueZeroSet_js_1.SameValueZeroSet(refinedSelector); case 'SameValue': case undefined: return () => new SameValueSet_js_1.SameValueSet(refinedSelector); } } /**@__NO_SIDE_EFFECTS__*/function uniqueArray(arb, constraints = {}) { const minLength = constraints.minLength !== undefined ? constraints.minLength : 0; const maxLength = constraints.maxLength !== undefined ? constraints.maxLength : MaxLengthFromMinLength_js_1.MaxLengthUpperBound; const maxGeneratedLength = (0, MaxLengthFromMinLength_js_1.maxGeneratedLengthFromSizeForArbitrary)(constraints.size, minLength, maxLength, constraints.maxLength !== undefined); const depthIdentifier = constraints.depthIdentifier; const setBuilder = buildUniqueArraySetBuilder(constraints); const arrayArb = new ArrayArbitrary_js_1.ArrayArbitrary(arb, minLength, maxGeneratedLength, maxLength, depthIdentifier, setBuilder, []); if (minLength === 0) return arrayArb; return arrayArb.filter((tab) => tab.length >= minLength); }