module.exports = function(n, arb) { arb = jsv.utils.force(arb || jsv.json); return jsv.bless({ generator: jsv.generator.bless(function(size) { var m = new FMap(); var f = function(a0) { if (!m.contains(a0)) { var value = arb.generator(size); m.insert(a0, value); } return m.get(a0); }; switch (n) { case 1: return function(a0) { return f([a0]); }; case 2: return function(a0, a1) { return f([a0, a1]); }; case 3: return function(a0, a1, a2) { return f([a0, a1, a2]); }; case 4: return function(a0, a1, a2, a3) { return f([a0, a1, a2, a3]); }; case 5: return function(a0, a1, a2, a3, a4) { return f([a0, a1, a2, a3, a4]); }; case 6: return function(a0, a1, a2, a3, a4, a5) { return f([a0, a1, a2, a3, a4, a5]); }; case 7: return function(a0, a1, a2, a3, a4, a5, a6) { return f([a0, a1, a2, a3, a4, a5, a6]); }; case 8: return function(a0, a1, a2, a3, a4, a5, a6, a7) { return f([a0, a1, a2, a3, a4, a5, a6, a7]); }; case 9: return function(a0, a1, a2, a3, a4, a5, a6, a7, a8) { return f([a0, a1, a2, a3, a4, a5, a6, a7, a8]); }; case 10: return function(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) { return f([a0, a1, a2, a3, a4, a5, a6, a7, a8, a9]); }; default: throw new Error('First argument to funcN must be a positive integer no greater than ten'); } }), shrink: jsv.shrink.noop, show: function(f) { return 'Function of arity' + f.length; } }); };
jsc.property('div("[.#]foo", attrs, children) ≡ React.createElement("div[.#]id", attrs, children)', selChars, "nestring", "dict string", "array string", function(selChar, id, attrs, children) { const selector = selChar + id; const hr = React.createElement('div' + selector, attrs, children); const divr = div(selector, attrs, children); return jsc.utils.isApproxEqual(hr, divr); });
jsc.property('div("#id") ≡ React.createElement("div#id")', "nestring", function(id) { const selector = '#' + id; const hr = React.createElement('div' + selector); const divr = div(selector); return jsc.utils.isApproxEqual(hr, divr); });
jsc.property('div(".class") ≡ React.createElement("div.class")', "nestring", function(className) { const selector = '.' + className; const hr = React.createElement('div' + selector); const divr = div(selector); return jsc.utils.isApproxEqual(hr, divr); });
jsc.property('div(attrs, children) ≡ React.createElement("div", attrs, children)', tagArb, "dict string", "array string", function(tag, attrs, children) { const hr = React.createElement(tag, attrs, children); const divr = helpers[tag](attrs, children); return jsc.utils.isApproxEqual(hr, divr); });
jsc.property('div(children) ≡ React.createElement("div", children)', "array string", function (children) { const hr = React.createElement('div', children); const divr = div(children); return jsc.utils.isApproxEqual(hr, divr); });
jsc.property('div(attrs) ≡ React.createElement("div", attrs)', "dict string", function(attrs){ const hr = React.createElement('div', attrs); const divr = div(attrs); return jsc.utils.isApproxEqual(hr, divr); });
jsc.property('original array at the start', 'unit', 'array', (u, a) => { const r = append(u, a) return jsc.utils.isEqual(r.slice(0, r.length - 1), a) })
jsc.property('curry', 'unit', 'array', (u, a) => { return jsc.utils.isEqual(append(u)(a), append(u, a)) })
jsc.property('appended element at the end', 'unit', 'array', (u, a) => { const r = append(u, a) return jsc.utils.isEqual(r[r.length - 1], u) })
const n = A.length; if (n <= 1) return seq.nil; else { const idcs = seq.range(0, n); const idxPairs = idcs.flatMap(i => idcs.map(j => [i, j])); const skips = idxPairs.map(([i, j]) => [skip2(A, i, j), skip(b, i)]); return skips; } }); const show = ([A, b]) => `${JSON.stringify(A)} * x = ${JSON.stringify(b)}`; return { generator: jsc.utils.curried2(generator, arguments), shrink: jsc.utils.curried2(shrink, arguments), show: jsc.utils.curried2(show, arguments) }; }, digitStrings() { const digits = jsc.nat(9); const generator = jsc.generator.bless(size => { const n = jsc.random(1, Math.max(1, size)); const v = new Array(n); for (let i = 0; i < n; ++i) v[i] = digits.generator(); return v.join(''); });