Comparing version
@@ -18,2 +18,10 @@ "use strict"; | ||
} | ||
function generatorProtoFlatMap(generator) { | ||
return function (f) { | ||
return generatorBless(function (size) { | ||
return f(generator(size))(size); | ||
}); | ||
}; | ||
} | ||
/* eslint-enable no-use-before-define */ | ||
@@ -23,2 +31,3 @@ | ||
generator.map = generatorProtoMap(generator); | ||
generator.flatmap = generatorProtoFlatMap(generator); | ||
return generator; | ||
@@ -160,2 +169,18 @@ } | ||
/** | ||
- `generator.combine(gen: gen a..., f: a... -> b): gen b` | ||
*/ | ||
function generatorCombine() { | ||
var generators = Array.prototype.slice.call(arguments, 0, -1); | ||
var f = arguments[arguments.length - 1]; | ||
return generatorBless(function (size) { | ||
var values = generators.map(function (gen) { | ||
return gen(size); | ||
}); | ||
return f.apply(undefined, values); | ||
}); | ||
} | ||
module.exports = { | ||
@@ -171,2 +196,3 @@ array: generateArray, | ||
bless: generatorBless, | ||
combine: generatorCombine, | ||
}; |
@@ -13,2 +13,9 @@ "use strict"; | ||
function extendWithDefault(arb) { | ||
var def = arb(); | ||
arb.generator = def.generator; | ||
arb.shrink = def.shrink; | ||
arb.show = def.show; | ||
} | ||
/** | ||
@@ -40,2 +47,4 @@ - `integer: arbitrary integer` | ||
extendWithDefault(integer); | ||
/** | ||
@@ -64,2 +73,4 @@ - `nat: arbitrary nat` | ||
extendWithDefault(nat); | ||
/** | ||
@@ -82,2 +93,4 @@ - `number: arbitrary number` | ||
extendWithDefault(number); | ||
/** | ||
@@ -125,12 +138,31 @@ - `uint8: arbitrary nat` | ||
var datetime = { | ||
generator: generator.bless(function (size) { | ||
// TODO: if size === 0 return datetimeConst or distantPast or distantFuture | ||
return new Date(random.number(-size, size) * 768000000 + datetimeConst); | ||
}), | ||
// TODO: implement datetime shrink | ||
shrink: shrink.noop, | ||
show: show.def, | ||
}; | ||
function datetime(from, to) { | ||
if (arguments.length === 2) { | ||
from = from.getTime(); | ||
to = to.getTime(); | ||
return { | ||
generator: generator.bless(function () { | ||
return new Date(random.number(from, to)); | ||
}), | ||
// TODO: implement datetime shrink | ||
shrink: shrink.noop, | ||
show: show.def, | ||
}; | ||
} else { | ||
return { | ||
generator: generator.bless(function (size) { | ||
// TODO: if size === 0 return datetimeConst or distantPast or distantFuture | ||
return new Date(random.number(-size, size) * 768000000 + datetimeConst); | ||
}), | ||
// TODO: implement datetime shrink | ||
shrink: shrink.noop, | ||
show: show.def, | ||
}; | ||
} | ||
} | ||
extendWithDefault(datetime); | ||
/** | ||
@@ -195,2 +227,4 @@ - `elements(args: array a): generator a` | ||
extendWithDefault(string); | ||
/** | ||
@@ -197,0 +231,0 @@ - `notEmptyString: arbitrary string` |
{ | ||
"version": "0.4.4", | ||
"version": "0.4.5", | ||
"dependencies": { | ||
@@ -2368,2 +2368,2 @@ "browserify": { | ||
} | ||
} | ||
} |
{ | ||
"name": "jsverify", | ||
"description": "Property-based testing for JavaScript.", | ||
"version": "0.4.4", | ||
"version": "0.4.5", | ||
"homepage": "http://jsverify.github.io/", | ||
@@ -6,0 +6,0 @@ "author": { |
@@ -331,3 +331,6 @@ # JSVerify | ||
- `generator.combine(gen: gen a..., f: a... -> b): gen b` | ||
### Shrink functions | ||
@@ -422,3 +425,6 @@ | ||
- 0.4.4 — *2014-11-22* new generators | ||
- **0.4.5** — *2014-11-22* stuff | ||
- `generator.combine` & `.flatmap` | ||
- `nat`, `integer`, `number` & and `string` act as objects too | ||
- **0.4.4** — *2014-11-22* new generators | ||
- New generators: `nearray`, `nestring` | ||
@@ -428,3 +434,3 @@ - `generator.constant` | ||
- `jsc.sampler` | ||
- 0.4.3 — *2014-11-08* jsc.property | ||
- **0.4.3** — *2014-11-08* jsc.property | ||
- Now you can write your bdd specs without any boilerplate | ||
@@ -440,9 +446,9 @@ - support for nat-litearls in dsl [#36](https://github.com/jsverify/jsverify/issues/36) | ||
- Falsy generator [#42](https://github.com/jsverify/jsverify/issues/42) | ||
- 0.4.2 — *2014-11-03* User environments for DSL | ||
- **0.4.2** — *2014-11-03* User environments for DSL | ||
- User environments for DSL | ||
- Generator prototype `map`, and shrink prototype `isomap` | ||
- JSON generator works with larger sizes | ||
- 0.4.1 Move to own organization in GitHub | ||
- 0.4.0 *2014-10-27* typify-dsl & more arbitraries. | ||
Changes from 0.3.6: | ||
- **0.4.1** Move to own organization in GitHub | ||
- **0.4.0** *2014-10-27* typify-dsl & more arbitraries. | ||
Changes from **0.3.6**: | ||
- DSL for `forall` and `suchthat` | ||
@@ -453,12 +459,12 @@ - new primitive arbitraries | ||
- Other smaller stuff under the hood | ||
- 0.4.0-beta.4 generator.oneof | ||
- 0.4.0-beta.3 Expose shrink and show modules | ||
- 0.4.0-beta.2 Move everything around | ||
- **0.4.0**-beta.4 generator.oneof | ||
- **0.4.0**-beta.3 Expose shrink and show modules | ||
- **0.4.0**-beta.2 Move everything around | ||
- Better looking README.md! | ||
- 0.4.0-beta.1 Beta! | ||
- **0.4.0**-beta.1 Beta! | ||
- Dev Dependencies update | ||
- 0.4.0-alpha8 oneof & record -dsl support | ||
- **0.4.0**-alpha8 oneof & record -dsl support | ||
- also `jsc.compile` | ||
- record is shrinkable! | ||
- 0.4.0-alpha7 oneof & record | ||
- **0.4.0**-alpha7 oneof & record | ||
- *oneof* and *record* generator combinators ([@fson](https://github.com/fson)) | ||
@@ -468,3 +474,3 @@ - Fixed uint\* generators | ||
- Numeric generators with size specified are independent of test size ([#20](https://github.com/phadej/jsverify/issues/20)) | ||
- 0.4.0-alpha6 more primitives | ||
- **0.4.0**-alpha6 more primitives | ||
- int8, int16, int32, uint8, uint16, uint32 | ||
@@ -474,10 +480,10 @@ - char, asciichar and asciistring | ||
- use eslint | ||
- 0.4.0-alpha5 move david to be devDependency | ||
- 0.4.0-alpha4 more typify | ||
- **0.4.0**-alpha5 move david to be devDependency | ||
- **0.4.0**-alpha4 more typify | ||
- `suchchat` supports typify dsl | ||
- `oneof` → `elements` to be in line with QuickCheck | ||
- Added versions of examples using typify dsl | ||
- 0.4.0-alpha3 David, npm-freeze and jscs | ||
- 0.4.0-alpha2 Fix typo in readme | ||
- 0.4.0-alpha1 typify | ||
- **0.4.0**-alpha3 David, npm-freeze and jscs | ||
- **0.4.0**-alpha2 Fix typo in readme | ||
- **0.4.0**-alpha1 typify | ||
- DSL for `forall` | ||
@@ -493,9 +499,9 @@ ```js | ||
- 0.3.6 map generator | ||
- 0.3.5 Fix forgotten rngState in console output | ||
- 0.3.4 Dependencies update | ||
- 0.3.3 Dependencies update | ||
- 0.3.2 `fun` → `fn` | ||
- 0.3.1 Documentation typo fixes | ||
- 0.3.0 Major changes | ||
- **0.3.6** map generator | ||
- **0.3.5** Fix forgotten rngState in console output | ||
- **0.3.4** Dependencies update | ||
- **0.3.3** Dependencies update | ||
- **0.3.2** `fun` → `fn` | ||
- **0.3.1** Documentation typo fixes | ||
- **0.3.0** Major changes | ||
- random generate state handling | ||
@@ -506,11 +512,11 @@ - `--jsverifyRngState` parameter value used when run on node | ||
- dependencies update | ||
- 0.2.0 Use browserify | ||
- 0.1.4 Mocha test suite | ||
- **0.2.0** Use browserify | ||
- **0.1.4** Mocha test suite | ||
- major cleanup | ||
- 0.1.3 gen.show and exception catching | ||
- 0.1.2 Added jsc.assert | ||
- 0.1.1 Use grunt-literate | ||
- 0.1.0 Usable library | ||
- 0.0.2 Documented preview | ||
- 0.0.1 Initial preview | ||
- **0.1.3** gen.show and exception catching | ||
- **0.1.2** Added jsc.assert | ||
- **0.1.1** Use grunt-literate | ||
- **0.1.0** Usable library | ||
- **0.0.2** Documented preview | ||
- **0.0.1** Initial preview | ||
@@ -517,0 +523,0 @@ ## Related work |
134949
1.22%3868
1.28%557
1.09%