fast-check
Version:
Property based testing framework for JavaScript (like QuickCheck)
30 lines (29 loc) • 1.14 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.letrec = letrec;
const LazyArbitrary_js_1 = require("./_internals/LazyArbitrary.js");
const globals_js_1 = require("../utils/globals.js");
const safeGetOwnPropertyNames = Object.getOwnPropertyNames;
function createLazyArbsPool() {
const lazyArbsPool = new globals_js_1.Map();
const getLazyFromPool = (key) => {
let lazyArb = (0, globals_js_1.safeMapGet)(lazyArbsPool, key);
if (lazyArb !== undefined) {
return lazyArb;
}
lazyArb = new LazyArbitrary_js_1.LazyArbitrary(String(key));
(0, globals_js_1.safeMapSet)(lazyArbsPool, key, lazyArb);
return lazyArb;
};
return getLazyFromPool;
}
/**@__NO_SIDE_EFFECTS__*/function letrec(builder) {
const getLazyFromPool = createLazyArbsPool();
const strictArbs = builder(getLazyFromPool);
const declaredArbitraryNames = safeGetOwnPropertyNames(strictArbs);
for (const name of declaredArbitraryNames) {
const lazyArb = getLazyFromPool(name);
lazyArb.underlying = strictArbs[name];
}
return strictArbs;
}