1 |
|
2 | "use strict";
|
3 |
|
4 | var arbitraryBless = require("./arbitraryBless.js");
|
5 | var generator = require("./generator.js");
|
6 | var FMap = require("./finitemap.js");
|
7 | var json = require("./json.js");
|
8 | var shrink = require("./shrink.js");
|
9 | var utils = require("./utils.js");
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 | function fn(arb) {
|
19 | arb = utils.force(arb || json.json);
|
20 |
|
21 | return arbitraryBless({
|
22 | generator: generator.bless(function (size) {
|
23 | var m = new FMap();
|
24 |
|
25 | var f = function (arg) {
|
26 | if (!m.contains(arg)) {
|
27 | var value = arb.generator(size);
|
28 | m.insert(arg, value);
|
29 | }
|
30 |
|
31 | return m.get(arg);
|
32 | };
|
33 |
|
34 | f.internalMap = m;
|
35 | return f;
|
36 | }),
|
37 |
|
38 | shrink: shrink.noop,
|
39 | show: function (f) {
|
40 | return "[" + f.internalMap.data.map(function (item) {
|
41 | return "" + item[0] + ": " + arb.show(item[1]);
|
42 | }).join(", ") + "]";
|
43 | }
|
44 | });
|
45 | }
|
46 |
|
47 | module.exports = {
|
48 | fn: fn,
|
49 | fun: fn,
|
50 | };
|