1 |
|
2 | "use strict";
|
3 |
|
4 | var arbitraryAssert = require("./arbitraryAssert.js");
|
5 | var array = require("./array.js");
|
6 | var generator = require("./generator.js");
|
7 | var pair = require("./pair.js");
|
8 | var string = require("./string.js");
|
9 | var utils = require("./utils.js");
|
10 |
|
11 | function makeMapShow(elShow) {
|
12 | return function (m) {
|
13 | return "{" + Object.keys(m).map(function (k) {
|
14 | return k + ": " + elShow(m[k]);
|
15 | }).join(", ") + "}";
|
16 | };
|
17 | }
|
18 |
|
19 |
|
20 |
|
21 |
|
22 | function generateDict(gen) {
|
23 | var pairGen = generator.pair(string.string.generator, gen);
|
24 | var arrayGen = generator.array(pairGen);
|
25 | var result = arrayGen.map(utils.pairArrayToDict);
|
26 |
|
27 | return utils.curried2(result, arguments);
|
28 | }
|
29 |
|
30 | function dict(arb) {
|
31 | arb = utils.force(arb);
|
32 | arbitraryAssert(arb);
|
33 |
|
34 | var pairArbitrary = pair.pair(string.string, arb);
|
35 | var arrayArbitrary = array.array(pairArbitrary);
|
36 |
|
37 | return arrayArbitrary.smap(utils.pairArrayToDict, utils.dictToPairArray, makeMapShow(arb.show));
|
38 | }
|
39 |
|
40 | module.exports = {
|
41 | arbitrary: dict,
|
42 | generator: generateDict,
|
43 | };
|