UNPKG

2.39 kBJavaScriptView Raw
1var assert = require('assert');
2var types = require('./types');
3
4var Identity = require('..').Identity;
5
6describe('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
77describe('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});