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