Exemplo n.º 1
0
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);
 });
Exemplo n.º 8
0
 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)
 })
Exemplo n.º 9
0
 jsc.property('curry', 'unit', 'array', (u, a) => {
   return jsc.utils.isEqual(append(u)(a), append(u, a))
 })
Exemplo n.º 10
0
 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)
 })
Exemplo n.º 11
0
      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('');
    });