UNPKG

1.05 kBJavaScriptView Raw
1/* @flow weak */
2"use strict";
3
4var arbitraryBless = require("./arbitraryBless.js");
5var generator = require("./generator.js");
6var FMap = require("./finitemap.js");
7var json = require("./json.js");
8var shrink = require("./shrink.js");
9var utils = require("./utils.js");
10
11/**
12 ### Arbitrary functions
13
14 - `fn(arb: arbitrary a): arbitrary (b -> a)`
15 - `fun(arb: arbitrary a): arbitrary (b -> a)`
16*/
17
18function 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
47module.exports = {
48 fn: fn,
49 fun: fn,
50};