1 | var assert = require('assert');
|
2 | var types = require('./types');
|
3 |
|
4 | var Identity = require('..').Identity;
|
5 |
|
6 | describe('Identity', function() {
|
7 | var m = Identity(1);
|
8 |
|
9 | function mult(a) {
|
10 | return function(b) { return a * b; };
|
11 | }
|
12 |
|
13 | function add(a) {
|
14 | return function(b) { return a + b; };
|
15 | }
|
16 |
|
17 |
|
18 | it('is a Functor', function() {
|
19 | var fTest = types.functor;
|
20 | assert.equal(true, fTest.iface(m));
|
21 | assert.equal(true, fTest.id(m));
|
22 | assert.equal(true, fTest.compose(m, mult(2), add(3)));
|
23 | });
|
24 |
|
25 | it('is an Apply', function() {
|
26 | var aTest = types.apply;
|
27 | var appA = Identity(mult(10));
|
28 | var appU = Identity(add(7));
|
29 | var appV = Identity(10);
|
30 |
|
31 | assert.equal(true, aTest.iface(appA));
|
32 | assert.equal(true, aTest.compose(appA, appU, appV));
|
33 | });
|
34 |
|
35 | it('is an Applicative', function() {
|
36 | var aTest = types.applicative;
|
37 | var app1 = Identity(101);
|
38 | var app2 = Identity(-123);
|
39 | var appF = Identity(mult(3));
|
40 |
|
41 | assert.equal(true, aTest.iface(app1));
|
42 | assert.equal(true, aTest.id(app1, app2));
|
43 | assert.equal(true, aTest.homomorphic(app1, add(3), 46));
|
44 | assert.equal(true, aTest.interchange(app2, appF, 17));
|
45 | });
|
46 |
|
47 | it('is a Chain', function() {
|
48 | var cTest = types.chain;
|
49 | var f1 = function(x) {return Identity(3 * x);};
|
50 | var f2 = function(x) {return Identity(5 + x);};
|
51 | var fNull = function() {return Identity(null);};
|
52 | assert.equal(true, cTest.iface(m));
|
53 | assert.equal(true, cTest.associative(m, f1, f2));
|
54 | assert.equal(true, cTest.associative(m, fNull, f2));
|
55 | assert.equal(true, cTest.associative(m, f1, fNull));
|
56 | assert.equal(true, cTest.associative(m, fNull, fNull));
|
57 | });
|
58 |
|
59 | it('is a Monad', function() {
|
60 | var mTest = types.monad;
|
61 | assert.equal(true, mTest.iface(m));
|
62 | });
|
63 |
|
64 | describe('#toString', function() {
|
65 |
|
66 | it('returns the string representation of an Identity', function() {
|
67 | assert.strictEqual(Identity([1, 2, 3]).toString(),
|
68 | 'Identity([1, 2, 3])');
|
69 | assert.strictEqual(Identity(Identity('abc')).toString(),
|
70 | 'Identity(Identity("abc"))');
|
71 | });
|
72 |
|
73 | });
|
74 |
|
75 | });
|
76 |
|
77 | describe('Identity example', function() {
|
78 |
|
79 | it('returns wrapped value', function() {
|
80 | var identNumber = Identity(4);
|
81 | assert.equal(identNumber.get(), 4);
|
82 |
|
83 | var identArray = Identity([1, 2, 3, 4]);
|
84 | assert.deepEqual(identArray.get(), [1, 2, 3, 4]);
|
85 | });
|
86 |
|
87 | });
|