UNPKG

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