New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

jsverify

Package Overview
Dependencies
Maintainers
1
Versions
61
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

jsverify - npm Package Compare versions

Comparing version 0.5.3 to 0.6.0-alpha.1

lib/arbitraryAssert.js

7

CHANGELOG.md
## Release History
- **0.6.0-alpha.1** — *2015-04-22* — Preview
- Using lazy sequences for shrink results
- *Breaking changes:*
- `jsc.map` renamed to `jsc.dict`
- `jsc.value` removed, use `jsc.json`
- `jsc.string()` removed, use `jsc.string`
- `shrink.isomap` renamed to `shrink.smap`
- **0.5.3** — *2015-04-21* — More algebra

@@ -4,0 +11,0 @@ - `unit` and `either` arbitraries

98

lib/arbitrary.js
/* @flow weak */
"use strict";
var arbitraryAssert = require("./arbitraryAssert.js");
var arbitraryBless = require("./arbitraryBless.js");
var array = require("./array.js");
var assert = require("assert");
var generator = require("./generator.js");
var primitive = require("./primitive.js");
var pair = require("./pair.js");
var dict = require("./dict.js");
var json = require("./json.js");
var show = require("./show.js");

@@ -31,25 +35,3 @@ var shrink = require("./shrink.js");

function arrayImpl(flavour) {
return function array(arb) {
arb = utils.force(arb || primitive.json);
return arbitraryBless({
generator: generator[flavour](arb.generator),
shrink: shrink[flavour](arb.shrink),
show: show.array(arb.show),
});
};
}
/**
- `array(arb: arbitrary a): arbitrary (array a)`
*/
var array = arrayImpl("array");
/**
- `nearray(arb: arbitrary a): arbitrary (array a)`
*/
var nearray = arrayImpl("nearray");
/**
- `unit: arbitrary ()`

@@ -67,5 +49,8 @@ */

function either(a, b) {
a = utils.force(a || primitive.json);
b = utils.force(b || primitive.json);
a = utils.force(a || json.json);
b = utils.force(b || json.json);
arbitraryAssert(a);
arbitraryAssert(b);
return arbitraryBless({

@@ -83,11 +68,4 @@ generator: generator.either(a.generator, b.generator),

*/
function pair(a, b) {
a = utils.force(a || primitive.json);
b = utils.force(b || primitive.json);
return arbitraryBless({
generator: generator.pair(a.generator, b.generator),
shrink: shrink.pair(a.shrink, b.shrink),
show: show.pair(a.show, b.show),
});
function pairArb(a, b) {
return pair.pair(a || json.json, b || json.json);
}

@@ -108,37 +86,30 @@

/**
- `map(arb: arbitrary a): arbitrary (map a)`
- `dict(arb: arbitrary a): arbitrary (dict a)`
Generates a JavaScript object with properties of type `A`.
*/
function fromArray(arrayOfPairs) {
var res = {};
arrayOfPairs.forEach(function (p) {
res[p[0]] = p[1];
});
return res;
function dictArb(arb) {
return dict.dict(arb || json.json);
}
function toArray(m) {
var res = [];
Object.keys(m).forEach(function (k) {
res.push([k, m[k]]);
});
return res;
/**
- `array(arb: arbitrary a): arbitrary (array a)`
*/
function arrayArb(arb) {
return array.array(arb || json.json);
}
function makeMapShow(elShow) {
return function (m) {
return "{" + Object.keys(m).map(function (k) {
return k + ": " + elShow(m[k]);
}).join(", ") + "}";
};
/**
- `nearray(arb: arbitrary a): arbitrary (array a)`
*/
function nearrayArb(arb) {
return array.nearray(arb || json.json);
}
function map(arb) {
arb = utils.force(arb || primitive.json);
var pairArbitrary = pair(primitive.string(), arb);
var arrayArbitrary = array(pairArbitrary);
/**
- `json: arbitrary json`
return arrayArbitrary.smap(fromArray, toArray, makeMapShow(arb.show));
}
JavaScript Objects: boolean, number, string, array of `json` values or object with `json` values.
*/
var jsonArb = json.json;

@@ -213,11 +184,12 @@ /**

nonshrink: nonshrink,
pair: pair,
pair: pairArb,
either: either,
unit: unit,
dict: dictArb,
json: jsonArb,
nearray: nearrayArb,
array: arrayArb,
tuple: tuple,
array: array,
nearray: nearray,
map: map,
oneof: oneof,
record: record,
};

@@ -16,3 +16,3 @@ "use strict";

generator: arb.generator.map(f),
shrink: arb.shrink.isomap(f, g),
shrink: arb.shrink.smap(f, g),
show: newShow || show.def

@@ -19,0 +19,0 @@ });

@@ -7,11 +7,13 @@ /* @flow weak */

var primitive = require("./primitive.js");
var string = require("./string.js");
var utils = require("./utils.js");
var environment = utils.merge(primitive, {
var environment = utils.merge(primitive, string, {
pair: arbitrary.pair,
unit: arbitrary.unit,
either: arbitrary.either,
dict: arbitrary.dict,
array: arbitrary.array,
nearray: arbitrary.nearray,
map: arbitrary.map,
json: arbitrary.json,
fn: fn.fn,

@@ -18,0 +20,0 @@ fun: fn.fn,

/* @flow weak */
"use strict";
var arbitraryBless = require("./arbitraryBless.js");
var FMap = require("./finitemap.js");
var primitive = require("./primitive.js");
var json = require("./json.js");
var shrink = require("./shrink.js");

@@ -15,5 +16,5 @@ var utils = require("./utils.js");

function fn(arb) {
arb = utils.force(arb || primitive.json);
arb = utils.force(arb || json.json);
return {
return arbitraryBless({
generator: function (size) {

@@ -41,3 +42,3 @@ var m = new FMap();

}
};
});
}

@@ -44,0 +45,0 @@

/* @flow weak */
"use strict";
var assert = require("assert");
var random = require("./random.js");

@@ -32,2 +33,3 @@ var either = require("./either.js");

var generator = this;
generatorAssert(generator);
return generatorBless(function (size) {

@@ -41,2 +43,3 @@ return f(generator(size));

var generator = this;
generatorAssert(generator);
return generatorBless(function (size) {

@@ -48,2 +51,8 @@ return f(generator(size))(size);

function generatorAssert(generator) {
assert(typeof generator === "function", "generator should be a function");
assert(typeof generator.map === "function", "generator.map should be a function");
assert(typeof generator.flatmap === "function", "generator.flatmap should be a function");
}
/**

@@ -63,3 +72,3 @@ - `generator.bless(f: nat -> a): generator a`

- `.isomap(f: a -> generator b): generator b`
- `.flatmap(f: a -> generator b): generator b`

@@ -103,6 +112,11 @@ Monadic bind for generators.

function generateOneof(generators) {
// TODO: generator
generators.forEach(function (gen) {
assert(typeof gen === "function");
});
var result = generatorBless(function (size) {
var idx = random(0, generators.length - 1);
var arb = generators[idx];
return arb(size);
var gen = generators[idx];
return gen(size);
});

@@ -167,5 +181,5 @@

*/
function generateUnit() {
var generateUnit = generatorBless(function () {
return [];
}
});

@@ -221,67 +235,19 @@ /**

/**
- `generator.char: generator char`
- `generator.dict(gen: generator a): generator (dict a)`
*/
var generateChar = generatorBless(function generateChar(/* size */) {
return String.fromCharCode(random(0, 0xff));
});
function generateDict(gen) {
// Circular dependency :(
var string = require("./string.js");
/**
- `generator.string: generator string`
*/
var generateString = generateArray(generateChar).map(utils.charArrayToString);
var pairGen = generatePair(string.string.generator, gen);
var arrayGen = generateArray(pairGen);
var result = arrayGen.map(utils.pairArrayToDict);
/**
- `generator.nestring: generator string`
*/
var generateNEString = generateNEArray(generateChar).map(utils.charArrayToString);
/**
- `generator.asciichar: generator char`
*/
var generateAsciiChar = generatorBless(function generateAsciiChar(/* size */) {
return String.fromCharCode(random(0x20, 0x7e));
});
/**
- `generator.asciistring: generator string`
*/
var generateAsciiString = generateArray(generateAsciiChar).map(utils.charArrayToString);
/**
- `generator.map(gen: generator a): generator (map a)`
*/
function generateMap(gen) {
var result = generatorBless(function (size) {
var objsize = random(0, logsize(size));
var obj = {};
for (var i = 0; i < objsize; i++) {
obj[generateString(size)] = gen(size);
}
return obj;
});
return utils.curried2(result, arguments);
}
/**
- `generator.json: generator json`
*/
var generateInteger = generatorBless(function (size) {
return random(-size, size);
});
function generateJson(size) {
return require("./json.js").json.generator(size);
}
var generateNumber = generatorBless(function (size) {
return random.number(-size, size);
});
var generateBool = generatorBless(function () {
return random(0, 1) === 0;
});
var generateJson = generatorRecursive(
generateOneof([generateInteger, generateNumber, generateBool, generateString]),
function (gen) {
return generateOneof([generateArray(gen), generateMap(gen)]);
});
module.exports = {

@@ -294,8 +260,3 @@ pair: generatePair,

nearray: generateNEArray,
char: generateChar,
string: generateString,
nestring: generateNEString,
asciichar: generateAsciiChar,
asciistring: generateAsciiString,
map: generateMap,
dict: generateDict,
json: generateJson,

@@ -302,0 +263,0 @@ oneof: generateOneof,

@@ -95,2 +95,3 @@ /* @flow weak */

var assert = require("assert");
var lazyseq = require("lazy-seq");

@@ -108,2 +109,3 @@ var arbitrary = require("./arbitrary.js");

var shrink = require("./shrink.js");
var string = require("./string.js");
var suchthat = require("./suchthat.js");

@@ -117,13 +119,18 @@ var typify = require("./typify.js");

function shrinkResult(gens, x, test, size, shrinks, exc, transform) {
var shrinked = shrink.tuple(utils.pluck(gens, "shrink"), x);
var shrinkP = shrinked.reduce(function (res, y) {
function shrinkResult(arbs, x, test, size, shrinksN, exc, transform) {
assert(arbs.length === x.length, "shrinkResult: arbs and x has to be of same size");
assert(typeof size === "number", "shrinkResult: size should be number");
assert(typeof shrinksN === "number", "shrinkResult: shrinkN should be number");
var shrinks = utils.pluck(arbs, "shrink");
var shows = utils.pluck(arbs, "show");
var shrinked = shrink.tuple(shrinks, x);
var shrinkP = lazyseq.fold(shrinked, true, function (res, y) {
return functor.map(res, function (resPrime) {
if (resPrime !== true) {
return resPrime;
}
return test(size, y, shrinks + 1);
var t = test(size, resPrime, shrinksN + 1);
return t !== true ? t : y();
});
}, true);
});

@@ -134,4 +141,4 @@ return functor.map(shrinkP, function (shrinkPPrime) {

counterexample: x,
counterexamplestr: show.tuple(utils.pluck(gens, "show"), x),
shrinks: shrinks,
counterexamplestr: show.tuple(shows, x),
shrinks: shrinksN,
exc: exc,

@@ -422,3 +429,2 @@ };

suchthat: suchthat.suchthat,
value: primitive.json,

@@ -447,2 +453,3 @@ // either

/* primitives */
// TODO: refactor
var k;

@@ -455,2 +462,5 @@ for (k in primitive) {

}
for (k in string) {
jsc[k] = string[k];
}

@@ -457,0 +467,0 @@ module.exports = jsc;

/* @flow weak */
"use strict";
var arbitraryBless = require("./arbitraryBless");
var assert = require("assert");

@@ -20,2 +21,3 @@ var generator = require("./generator.js");

arb.show = def.show;
arb.smap = def.smap;
}

@@ -26,3 +28,3 @@

if (arguments.length === 2) {
var arb = impl(maxsize - minsize);
var arb = arbitraryBless(impl(maxsize - minsize));
var to = function to(x) {

@@ -35,11 +37,7 @@ return Math.abs(x) + minsize;

return {
generator: arb.generator.map(to),
shrink: arb.shrink.isomap(to, from),
show: show.def,
};
return arb.smap(to, from);
} else if (arguments.length === 1) {
return impl(minsize /* as minsize */);
return arbitraryBless(impl(minsize /* as minsize */));
} else {
return impl();
return arbitraryBless(impl());
}

@@ -93,3 +91,3 @@ };

function nat(maxsize) {
return {
return arbitraryBless({
generator: generator.bless(function (size) {

@@ -111,3 +109,3 @@ size = maxsize || size;

show: show.def,
};
});
}

@@ -166,3 +164,3 @@

*/
var bool = {
var bool = arbitraryBless({
generator: generator.bless(function (/* size */) {

@@ -177,3 +175,3 @@ var i = random(0, 1);

show: show.def,
};
});

@@ -203,7 +201,3 @@ /**

return {
generator: arb.generator.map(toDate),
shrink: arb.shrink.isomap(toDate, fromDate),
show: show.def,
};
return arb.smap(toDate, fromDate);
} else {

@@ -215,7 +209,7 @@ toDate = function toDate(x) {

return {
return arbitraryBless({
generator: arb.generator.map(toDate),
shrink: shrink.noop,
show: show.def,
};
});
}

@@ -234,3 +228,3 @@ }

return {
return arbitraryBless({
generator: generator.bless(function (/* size */) {

@@ -250,77 +244,6 @@ var i = random(0, args.length - 1);

show: show.def,
};
});
}
/**
- `char: arbitrary char`
Single character
*/
var char = {
generator: generator.char,
shrink: shrink.noop,
show: show.def,
};
/**
- `asciichar: arbitrary char`
Single ascii character (0x20-0x7e inclusive, no DEL)
*/
var asciichar = {
generator: generator.asciichar,
shrink: shrink.noop,
show: show.def,
};
/**
- `string: arbitrary string`
*/
function string() {
return {
generator: generator.string,
shrink: shrink.array(char.shrink).isomap(utils.charArrayToString, utils.stringToCharArray),
show: show.def,
};
}
extendWithDefault(string);
/**
- `notEmptyString: arbitrary string`
Generates strings which are not empty.
*/
var nestring = {
generator: generator.nestring,
shrink: shrink.nearray(asciichar.shrink).isomap(utils.charArrayToString, utils.stringToCharArray),
show: show.def,
};
/**
- `asciistring: arbitrary string`
*/
var asciistring = {
generator: generator.asciistring,
shrink: shrink.array(asciichar.shrink).isomap(utils.charArrayToString, utils.stringToCharArray),
show: show.def,
};
/**
- `json: arbitrary json`
JavaScript Objects: boolean, number, string, array of `json` values or object with `json` values.
- `value: arbitrary json`
*/
var json = {
generator: generator.json,
shrink: shrink.noop,
show: function (v) {
return JSON.stringify(v);
},
};
/**
- `falsy: arbitrary *`

@@ -349,7 +272,7 @@

function constant(x) {
return {
return arbitraryBless({
generator: generator.constant(x),
shrink: shrink.noop,
show: show.def
};
});
}

@@ -367,7 +290,2 @@

number: number,
json: json,
char: char,
string: string,
asciichar: asciichar,
asciistring: asciistring,
elements: elements,

@@ -377,4 +295,3 @@ bool: bool,

constant: constant,
nestring: nestring,
datetime: datetime,
};

@@ -6,2 +6,3 @@ /* @flow weak */

var either = require("./either.js");
var lazyseq = require("lazy-seq");
var utils = require("./utils.js");

@@ -36,5 +37,5 @@

Bless function with `.isomap` property.
Bless function with `.smap` property.
- `.isomap(f: a -> b, g: b -> a): shrink b`
- `.smap(f: a -> b, g: b -> a): shrink b`

@@ -44,3 +45,3 @@ Transform `shrink a` into `shrink b`. For example:

```js
positiveIntegersShrink = nat.shrink.isomap(
positiveIntegersShrink = nat.shrink.smap(
function (x) { return x + 1; },

@@ -51,3 +52,3 @@ function (x) { return x - 1; });

function shrinkBless(shrink) {
shrink.isomap = shrinkProtoIsoMap;
shrink.smap = shrinkProtoIsoMap;
return shrink;

@@ -80,7 +81,12 @@ }

var pairB = shrinkedB.map(function (bp) {
return [a, bp];
if (Array.isArray(pairA)) {
pairA = lazyseq.fromArray(pairA);
}
return pairA.append(function () {
var pairB = shrinkedB.map(function (bp) {
return [a, bp];
});
return pairB;
});
return pairA.concat(pairB);
});

@@ -132,7 +138,7 @@

if (n + 1 === shrinks.length) {
return shrinks[n].isomap(toSingleton, fromSingleton);
return shrinks[n].smap(toSingleton, fromSingleton);
} else {
var shrinkA = shrinks[0];
var shrinkB = shrinkTupleImpl(shrinks, n + 1);
return shrinkPair(shrinkA, shrinkB).isomap(toHList, fromHList);
return shrinkPair(shrinkA, shrinkB).smap(toHList, fromHList);
}

@@ -153,4 +159,5 @@ }

var result = shrinkBless(function (arr) {
assert(Array.isArray(arr), "shrinkArrayImpl() expects array, got: " + arr);
if (arr.length <= size) {
return [];
return lazyseq.nil;
} else {

@@ -160,6 +167,5 @@ var x = arr[0];

return [xs].concat(
shrink(x).map(function (xp) { return [xp].concat(xs); }),
shrinkArrayImpl(shrink, xs).map(function (xsp) { return [x].concat(xsp); })
);
return lazyseq.cons(xs, lazyseq.nil)
.append(shrink(x).map(function (xp) { return [xp].concat(xs); }))
.append(shrinkArrayImpl(shrink, xs).map(function (xsp) { return [x].concat(xsp); }));
}

@@ -166,0 +172,0 @@ });

@@ -21,2 +21,3 @@ /* @flow weak */

var arbitrary = require("./arbitrary.js");
var array = require("./array.js");
var fn = require("./fn.js");

@@ -52,3 +53,3 @@ var typifyParser = require("typify-parser");

var arg = compileType(env, type.arg);
return arbitrary.array(arg);
return array.array(arg);
}

@@ -55,0 +56,0 @@

@@ -75,14 +75,18 @@ /* @flow weak */

/**
- `utils.merge(x: obj, y: obj): obj`
- `utils.merge(x... : obj): obj`
Merge two objects, a bit like `_.extend({}, x, y)`.
*/
function merge(x, y) {
function merge() {
var res = {};
Object.keys(x).forEach(function (k) {
res[k] = x[k];
});
Object.keys(y).forEach(function (k) {
res[k] = y[k];
});
for (var i = 0; i < arguments.length; i++) {
var arg = arguments[i];
var keys = Object.keys(arg);
for (var j = 0; j < keys.length; j++) {
var key = keys[j];
res[key] = arg[key];
}
}
return res;

@@ -117,2 +121,18 @@ }

function pairArrayToDict(arrayOfPairs) {
var res = {};
arrayOfPairs.forEach(function (p) {
res[p[0]] = p[1];
});
return res;
}
function dictToPairArray(m) {
var res = [];
Object.keys(m).forEach(function (k) {
res.push([k, m[k]]);
});
return res;
}
module.exports = {

@@ -131,2 +151,4 @@ isArray: isArray,

stringToCharArray: stringToCharArray,
pairArrayToDict: pairArrayToDict,
dictToPairArray: dictToPairArray,
};
{
"name": "jsverify",
"description": "Property-based testing for JavaScript.",
"version": "0.5.3",
"version": "0.6.0-alpha.1",
"homepage": "http://jsverify.github.io/",

@@ -64,2 +64,3 @@ "author": {

"dependencies": {
"lazy-seq": "~0.1.0",
"rc4": "~0.1.2",

@@ -66,0 +67,0 @@ "typify-parser": "0.0.1"

@@ -224,24 +224,2 @@ # JSVerify

- `char: arbitrary char`
Single character
- `asciichar: arbitrary char`
Single ascii character (0x20-0x7e inclusive, no DEL)
- `string: arbitrary string`
- `notEmptyString: arbitrary string`
Generates strings which are not empty.
- `asciistring: arbitrary string`
- `json: arbitrary json`
JavaScript Objects: boolean, number, string, array of `json` values or object with `json` values.
- `value: arbitrary json`
- `falsy: arbitrary *`

@@ -261,6 +239,2 @@

- `array(arb: arbitrary a): arbitrary (array a)`
- `nearray(arb: arbitrary a): arbitrary (array a)`
- `unit: arbitrary ()`

@@ -276,6 +250,14 @@

- `map(arb: arbitrary a): arbitrary (map a)`
- `dict(arb: arbitrary a): arbitrary (dict a)`
Generates a JavaScript object with properties of type `A`.
- `array(arb: arbitrary a): arbitrary (array a)`
- `nearray(arb: arbitrary a): arbitrary (array a)`
- `json: arbitrary json`
JavaScript Objects: boolean, number, string, array of `json` values or object with `json` values.
- `oneof(gs : array (arbitrary a)...) : arbitrary a`

@@ -322,3 +304,3 @@

- `.isomap(f: a -> generator b): generator b`
- `.flatmap(f: a -> generator b): generator b`

@@ -349,16 +331,4 @@ Monadic bind for generators.

- `generator.char: generator char`
- `generator.dict(gen: generator a): generator (dict a)`
- `generator.string: generator string`
- `generator.nestring: generator string`
- `generator.asciichar: generator char`
- `generator.asciistring: generator string`
- `generator.map(gen: generator a): generator (map a)`
- `generator.json: generator json`
### Shrink functions

@@ -377,5 +347,5 @@

Bless function with `.isomap` property.
Bless function with `.smap` property.
- `.isomap(f: a -> b, g: b -> a): shrink b`
- `.smap(f: a -> b, g: b -> a): shrink b`

@@ -385,3 +355,3 @@ Transform `shrink a` into `shrink b`. For example:

```js
positiveIntegersShrink = nat.shrink.isomap(
positiveIntegersShrink = nat.shrink.smap(
function (x) { return x + 1; },

@@ -478,3 +448,3 @@ function (x) { return x - 1; });

- `utils.merge(x: obj, y: obj): obj`
- `utils.merge(x... : obj): obj`

@@ -491,2 +461,9 @@ Merge two objects, a bit like `_.extend({}, x, y)`.

- **0.6.0-alpha.1** &mdash; *2015-04-22* &mdash; Preview
- Using lazy sequences for shrink results
- *Breaking changes:*
- `jsc.map` renamed to `jsc.dict`
- `jsc.value` removed, use `jsc.json`
- `jsc.string()` removed, use `jsc.string`
- `shrink.isomap` renamed to `shrink.smap`
- **0.5.3** &mdash; *2015-04-21* &mdash; More algebra

@@ -493,0 +470,0 @@ - `unit` and `either` arbitraries

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc