|
1 | 1 | var mori = require("../mori");
|
2 | 2 |
|
3 | 3 | describe("Map", function () {
|
4 |
| - |
5 | 4 | it("demonstrates mapping a function over a vector", function () {
|
6 |
| - |
7 | 5 | var inc = function (n) { return n + 1; },
|
8 | 6 | outArr = mori.intoArray(mori.map(inc, mori.vector(1,2,3,4,5)));
|
9 |
| - |
10 | 7 | expect(outArr).toEqual([2,3,4,5,6]);
|
11 |
| - |
12 | 8 | });
|
13 | 9 |
|
14 | 10 | });
|
15 | 11 |
|
16 | 12 | describe("Non-destructive update", function () {
|
17 |
| - |
18 | 13 | it("demonstrates a non-destructive collection update", function () {
|
19 |
| - |
20 | 14 | var v1 = mori.vector(1,2,3),
|
21 | 15 | v2 = mori.conj(v1, 4);
|
22 |
| - |
23 | 16 | expect(JSON.stringify(mori.intoArray(v1))).toEqual("[1,2,3]");
|
24 | 17 | expect(JSON.stringify(mori.intoArray(v2))).toEqual("[1,2,3,4]");
|
25 |
| - |
26 | 18 | });
|
27 |
| - |
28 | 19 | });
|
29 | 20 |
|
30 | 21 | describe("Reduce", function () {
|
31 |
| - |
32 | 22 | it("demonstrates functional reduction on a vector", function () {
|
33 |
| - |
34 | 23 | var sum = function(a, b) {
|
35 | 24 | return a + b;
|
36 | 25 | };
|
37 |
| - |
38 | 26 | var reduced = mori.reduce(sum, mori.vector(1, 2, 3, 4));
|
39 |
| - |
40 | 27 | expect(reduced).toEqual(10);
|
41 |
| - |
42 | 28 | });
|
43 |
| - |
44 | 29 | });
|
45 | 30 |
|
46 | 31 | describe("Lazy sequences", function () {
|
47 |
| - |
48 | 32 | it("demonstrates interposition on a lazy sequence", function () {
|
49 |
| - |
50 | 33 | var _ = mori;
|
51 |
| - |
52 | 34 | var interposed = _.intoArray(_.interpose("foo", _.vector(1, 2, 3, 4)));
|
53 |
| - |
54 | 35 | expect(interposed).toEqual([1, "foo", 2, "foo", 3, "foo", 4]);
|
55 |
| - |
56 | 36 | });
|
57 |
| - |
58 | 37 | });
|
59 | 38 |
|
60 | 39 | describe("Pipelines", function () {
|
61 |
| - |
62 | 40 | it("demonstrates function pipelining", function () {
|
63 |
| - |
64 |
| - var pipeRes = mori.pipeline(mori.vector(1,2,3), |
65 |
| - function(v) { return mori.conj(v,4); }, |
66 |
| - function(v) { return mori.drop(2, v); }); |
67 |
| - |
| 41 | + var pipeRes = mori.pipeline( |
| 42 | + mori.vector(1,2,3), |
| 43 | + function(v) { return mori.conj(v,4); }, |
| 44 | + function(v) { return mori.drop(2, v); } |
| 45 | + ); |
68 | 46 | expect(mori.intoArray(pipeRes)).toEqual([3,4]);
|
69 |
| - |
70 | 47 | });
|
71 |
| - |
72 | 48 | });
|
73 | 49 |
|
74 | 50 | describe("Currying", function () {
|
75 |
| - |
76 | 51 | it("demonstrates function currying", function () {
|
77 |
| - |
78 |
| - var curRes = mori.pipeline(mori.vector(1,2,3), |
79 |
| - mori.curry(mori.conj, 4), |
80 |
| - mori.curry(mori.conj, 5)); |
81 |
| - |
| 52 | + var curRes = mori.pipeline( |
| 53 | + mori.vector(1,2,3), |
| 54 | + mori.curry(mori.conj, 4), |
| 55 | + mori.curry(mori.conj, 5) |
| 56 | + ); |
82 | 57 | expect(mori.intoArray(curRes)).toEqual([1,2,3,4,5]);
|
83 |
| - |
84 | 58 | });
|
85 |
| - |
86 | 59 | });
|
87 | 60 |
|
88 | 61 | describe("Partial application", function () {
|
89 |
| - |
90 | 62 | it("demonstrates partial function application", function () {
|
91 |
| - |
92 |
| - var parRes = mori.pipeline(mori.vector(1,2,3), |
93 |
| - mori.curry(mori.conj, 4), |
94 |
| - mori.partial(mori.drop, 2)); |
95 |
| - |
| 63 | + var parRes = mori.pipeline( |
| 64 | + mori.vector(1,2,3), |
| 65 | + mori.curry(mori.conj, 4), |
| 66 | + mori.partial(mori.drop, 2) |
| 67 | + ); |
96 | 68 | expect(mori.intoArray(parRes)).toEqual([3, 4]);
|
97 |
| - |
98 | 69 | });
|
99 |
| - |
100 | 70 | });
|
101 | 71 |
|
102 | 72 |
|
103 | 73 | describe("Function composition", function () {
|
104 |
| - |
105 | 74 | it("demonstrates function composition", function () {
|
106 |
| - |
107 | 75 | var second = mori.comp(mori.first, mori.rest);
|
108 |
| - |
109 | 76 | var secRes = second(mori.vector(1,2,3));
|
110 |
| - |
111 | 77 | expect(secRes).toEqual(2);
|
112 |
| - |
113 | 78 | });
|
114 |
| - |
115 | 79 | });
|
116 | 80 |
|
117 | 81 | describe("Juxtaposition", function () {
|
118 |
| - |
119 | 82 | it("demonstrates function juxtaposition", function () {
|
120 |
| - |
121 | 83 | var posAndNeg = mori.juxt(mori.identity, function (v) { return -v; });
|
122 |
| - |
123 | 84 | var pnRes = posAndNeg(1);
|
124 |
| - |
125 | 85 | expect(mori.intoArray(pnRes)).toEqual([1,-1]);
|
126 |
| - |
127 | 86 | var knitRes = mori.knit(mori.inc, mori.dec)(posAndNeg(1));
|
128 |
| - |
129 | 87 | expect(mori.intoArray(knitRes)).toEqual([2,-2]);
|
130 |
| - |
131 | 88 | });
|
132 |
| - |
133 | 89 | });
|
134 | 90 |
|
135 | 91 | describe("Conversion utilities", function () {
|
136 |
| - |
137 | 92 | it("demonstrates conversion from clojurescript values to javascript objects, and vice versa", function () {
|
138 |
| - |
139 | 93 | var jsObj = { a: 1, b: "two" },
|
140 | 94 | jsArr = [1, 2, 3],
|
141 | 95 | cljMap = mori.hashMap("a", 1, "b", "two"),
|
142 | 96 | cljMapKeywordized = mori.hashMap(mori.keyword("a"), 1, mori.keyword("b"), "two"),
|
143 | 97 | cljVec = mori.vector(1, 2, 3);
|
144 |
| - |
145 | 98 | expect(mori.equals(mori.toClj(jsObj), cljMap)).toBe(true);
|
146 | 99 | expect(mori.equals(mori.toClj(jsObj,true), cljMapKeywordized)).toBe(true);
|
147 |
| - |
148 | 100 | expect(mori.equals(mori.toClj(jsArr), cljVec)).toBe(true);
|
149 |
| - |
150 | 101 | expect(mori.toJs(cljMap)).toEqual(jsObj);
|
151 |
| - |
152 | 102 | expect(mori.toJs(cljVec)).toEqual(jsArr);
|
153 |
| - |
154 | 103 | expect(mori.isVector(mori.toClj(jsArr))).toBe(true);
|
155 |
| - |
156 | 104 | });
|
157 |
| - |
158 | 105 | });
|
159 | 106 |
|
160 | 107 | describe("Distinct", function() {
|
161 | 108 | it("demonstrates function `distinct`", function() {
|
162 |
| - |
163 | 109 | var vec = mori.vector(1,1,1,1,2,2,3,4,5,6,6);
|
164 |
| - |
165 | 110 | var distinctVector = mori.distinct(vec);
|
166 |
| - |
167 | 111 | expect(mori.toJs(distinctVector)).toEqual([1,2,3,4,5,6]);
|
168 |
| - |
169 | 112 | });
|
170 |
| - |
171 | 113 | });
|
172 | 114 |
|
173 | 115 | describe("configure", function() {
|
174 | 116 | it("can tune *print-length*", function() {
|
175 | 117 | mori.configure("print-length", 5);
|
176 | 118 | expect(mori.range(10).toString()).toEqual("(0 1 2 3 4 ...)");
|
177 |
| - |
178 | 119 | mori.configure("print-length", 3);
|
179 | 120 | expect(mori.range(5).toString()).toEqual("(0 1 2 ...)");
|
180 |
| - |
181 | 121 | mori.configure("print-length", null);
|
182 | 122 | expect(mori.range(5).toString()).toEqual("(0 1 2 3 4)");
|
183 | 123 | });
|
184 | 124 | it("can tune *print-level*", function() {
|
185 | 125 | mori.configure("print-level", 3);
|
186 | 126 | var m = mori;
|
187 | 127 | expect(m.vector(1, m.vector(2, m.vector(3, m.vector(4, m.vector(5))))).toString()).toEqual("[1 [2 [3 #]]]");
|
188 |
| - |
189 | 128 | mori.configure("print-level", 1);
|
190 | 129 | expect(m.hashMap(1, m.hashMap(2, 3)).toString()).toEqual("{1 #}");
|
191 |
| - |
192 | 130 | mori.configure("print-level", null);
|
193 | 131 | expect(m.vector(1, m.vector(2, m.vector(3, m.vector(4)))).toString()).toEqual("[1 [2 [3 [4]]]]");
|
194 | 132 | });
|
195 | 133 | });
|
196 | 134 |
|
197 | 135 | describe("Queue", function() {
|
198 |
| - |
199 | 136 | it("can be initialized empty", function() {
|
200 |
| - |
201 | 137 | var q = mori.queue();
|
202 |
| - |
203 | 138 | expect(mori.isEmpty(q)).toBeTruthy();
|
204 |
| - |
205 | 139 | });
|
206 | 140 |
|
207 | 141 | it("can be initialized with values", function() {
|
208 |
| - |
209 | 142 | var q = mori.queue('a', 'b');
|
210 |
| - |
211 | 143 | expect(mori.isEmpty(q)).toBeFalsy();
|
212 | 144 | expect(mori.peek(q)).toEqual('a');
|
213 |
| - |
214 | 145 | });
|
215 |
| - |
216 | 146 | });
|
217 | 147 |
|
218 | 148 | describe("lazy-seq", function() {
|
|
0 commit comments