fast-check
Version:
Property based testing framework for JavaScript (like QuickCheck)
45 lines (44 loc) • 1.9 kB
JavaScript
import { boolean } from '../../boolean.js';
import { constant } from '../../constant.js';
import { double } from '../../double.js';
import { maxSafeInteger } from '../../maxSafeInteger.js';
import { oneof } from '../../oneof.js';
import { string } from '../../string.js';
import { boxedArbitraryBuilder } from '../builders/BoxedArbitraryBuilder.js';
function defaultValues(constraints, stringArbitrary) {
return [
boolean(),
maxSafeInteger(),
double(),
stringArbitrary(constraints),
oneof(stringArbitrary(constraints), constant(null), constant(undefined)),
];
}
function boxArbitraries(arbs) {
return arbs.map((arb) => boxedArbitraryBuilder(arb));
}
function boxArbitrariesIfNeeded(arbs, boxEnabled) {
return boxEnabled ? boxArbitraries(arbs).concat(arbs) : arbs;
}
export function toQualifiedObjectConstraints(settings = {}) {
const valueConstraints = {
size: settings.size,
unit: 'stringUnit' in settings ? settings.stringUnit : settings.withUnicodeString ? 'binary' : undefined,
};
return {
key: settings.key !== undefined ? settings.key : string(valueConstraints),
values: boxArbitrariesIfNeeded(settings.values !== undefined ? settings.values : defaultValues(valueConstraints, string), settings.withBoxedValues === true),
depthSize: settings.depthSize,
maxDepth: settings.maxDepth,
maxKeys: settings.maxKeys,
size: settings.size,
withSet: settings.withSet === true,
withMap: settings.withMap === true,
withObjectString: settings.withObjectString === true,
withNullPrototype: settings.withNullPrototype === true,
withBigInt: settings.withBigInt === true,
withDate: settings.withDate === true,
withTypedArray: settings.withTypedArray === true,
withSparseArray: settings.withSparseArray === true,
};
}