1 | var Hash = require('hashish');
|
2 | var assert = require('assert');
|
3 |
|
4 | exports.map = function () {
|
5 | var ref = { a : 1, b : 2 };
|
6 | var items = Hash(ref).map(function (v) { return v + 1 }).items;
|
7 | var hash = Hash.map(ref, function (v) { return v + 1 });
|
8 | assert.deepEqual(ref, { a : 1, b : 2 });
|
9 | assert.deepEqual(items, { a : 2, b : 3 });
|
10 | assert.deepEqual(hash, { a : 2, b : 3 });
|
11 | };
|
12 |
|
13 | exports['cloned map'] = function () {
|
14 | var ref = { foo : [1,2], bar : [4,5] };
|
15 | var hash = Hash(ref).clone.map(
|
16 | function (v) { v.unshift(v[0] - 1); return v }
|
17 | ).items;
|
18 | assert.deepEqual(ref.foo, [1,2]);
|
19 | assert.deepEqual(ref.bar, [4,5]);
|
20 | assert.deepEqual(hash.foo, [0,1,2]);
|
21 | assert.deepEqual(hash.bar, [3,4,5]);
|
22 | };
|
23 |
|
24 | exports.forEach = function () {
|
25 | var ref = { a : 5, b : 2, c : 7, 1337 : 'leet' };
|
26 | var xs = [];
|
27 | Hash(ref).forEach(function (x, i) {
|
28 | xs.push([ i, x ]);
|
29 | });
|
30 |
|
31 | assert.eql(
|
32 | xs.map(function (x) { return x[0] }).sort(),
|
33 | [ '1337', 'a', 'b', 'c' ]
|
34 | );
|
35 |
|
36 | assert.eql(
|
37 | xs.map(function (x) { return x[1] }).sort(),
|
38 | [ 2, 5, 7, 'leet' ]
|
39 | );
|
40 |
|
41 | var ys = [];
|
42 | Hash.forEach(ref, function (x, i) {
|
43 | ys.push([ i, x ]);
|
44 | });
|
45 |
|
46 | assert.eql(xs.sort(), ys.sort());
|
47 | };
|
48 |
|
49 | exports.filter_items = function () {
|
50 | var ref = { a : 5, b : 2, c : 7, 1337 : 'leet' };
|
51 | var items = Hash(ref).filter(function (v, k) {
|
52 | return v > 5 || k > 5
|
53 | }).items;
|
54 | var hash = Hash.filter(ref, function (v, k) { return v > 5 || k > 5 });
|
55 | assert.deepEqual(items, { 1337 : 'leet', c : 7 });
|
56 | assert.deepEqual(hash, { 1337 : 'leet', c : 7 });
|
57 | assert.deepEqual(ref, { a : 5, b : 2, c : 7, 1337 : 'leet' });
|
58 | assert.equal(Hash(ref).length, 4);
|
59 | };
|
60 |
|
61 | exports.detect = function () {
|
62 | var h = { a : 5, b : 6, c : 7, d : 8 };
|
63 | var hh = Hash(h);
|
64 | var gt6hh = hh.detect(function (x) { return x > 6 });
|
65 | assert.ok(gt6hh == 7 || gt6hh == 8);
|
66 | var gt6h = Hash.detect(h, function (x) { return x > 6 });
|
67 | assert.ok(gt6h == 7 || gt6h == 8);
|
68 | assert.equal(hh.detect(function (x) { return x > 100 }), undefined);
|
69 | };
|
70 |
|
71 | exports.reduce = function () {
|
72 | var ref = { foo : [1,2], bar : [4,5] };
|
73 |
|
74 | var sum1 = Hash(ref).reduce(function (acc, v) {
|
75 | return acc + v.length
|
76 | }, 0);
|
77 | assert.equal(sum1, 4);
|
78 |
|
79 | var sum2 = Hash.reduce(ref, function (acc, v) {
|
80 | return acc + v.length
|
81 | }, 0);
|
82 | assert.equal(sum2, 4);
|
83 | };
|
84 |
|
85 | exports.some = function () {
|
86 | var h = { a : 5, b : 6, c : 7, d : 8 };
|
87 | var hh = Hash(h);
|
88 | assert.ok(Hash.some(h, function (x) { return x > 7 }));
|
89 | assert.ok(Hash.some(h, function (x) { return x < 6 }));
|
90 | assert.ok(!Hash.some(h, function (x) { return x > 10 }));
|
91 | assert.ok(!Hash.some(h, function (x) { return x < 0 }));
|
92 |
|
93 | assert.ok(hh.some(function (x) { return x > 7 }));
|
94 | assert.ok(hh.some(function (x) { return x < 6 }));
|
95 | assert.ok(!hh.some(function (x) { return x > 10 }));
|
96 | assert.ok(!hh.some(function (x) { return x < 0 }));
|
97 | };
|
98 |
|
99 | exports.update = function () {
|
100 | var ref = { a : 1, b : 2 };
|
101 | var items = Hash(ref).clone.update({ c : 3, a : 0 }).items;
|
102 | assert.deepEqual(ref, { a : 1, b : 2 });
|
103 | assert.deepEqual(items, { a : 0, b : 2, c : 3 });
|
104 |
|
105 | var hash = Hash.update(ref, { c : 3, a : 0 });
|
106 | assert.deepEqual(ref, hash);
|
107 | assert.deepEqual(hash, { a : 0, b : 2, c : 3 });
|
108 | };
|
109 |
|
110 | exports.merge = function () {
|
111 | var ref = { a : 1, b : 2 };
|
112 | var items = Hash(ref).merge({ b : 3, c : 3.14 }).items;
|
113 | var hash = Hash.merge(ref, { b : 3, c : 3.14 });
|
114 |
|
115 | assert.deepEqual(ref, { a : 1, b : 2 });
|
116 | assert.deepEqual(items, { a : 1, b : 3, c : 3.14 });
|
117 | assert.deepEqual(hash, { a : 1, b : 3, c : 3.14 });
|
118 | };
|
119 |
|
120 | exports.has = function () {
|
121 | var h = { a : 4, b : 5 };
|
122 | var hh = Hash(h);
|
123 |
|
124 | assert.ok(hh.has('a'));
|
125 | assert.equal(hh.has('c'), false);
|
126 | assert.ok(hh.has(['a','b']));
|
127 | assert.equal(hh.has(['a','b','c']), false);
|
128 |
|
129 | assert.ok(Hash.has(h, 'a'));
|
130 | assert.equal(Hash.has(h, 'c'), false);
|
131 | assert.ok(Hash.has(h, ['a','b']));
|
132 | assert.equal(Hash.has(h, ['a','b','c']), false);
|
133 | };
|
134 |
|
135 | exports.valuesAt = function () {
|
136 | var h = { a : 4, b : 5, c : 6 };
|
137 | assert.equal(Hash(h).valuesAt('a'), 4);
|
138 | assert.equal(Hash(h).valuesAt(['a'])[0], 4);
|
139 | assert.deepEqual(Hash(h).valuesAt(['a','b']), [4,5]);
|
140 | assert.equal(Hash.valuesAt(h, 'a'), 4);
|
141 | assert.deepEqual(Hash.valuesAt(h, ['a']), [4]);
|
142 | assert.deepEqual(Hash.valuesAt(h, ['a','b']), [4,5]);
|
143 | };
|
144 |
|
145 | exports.tap = function () {
|
146 | var h = { a : 4, b : 5, c : 6 };
|
147 | var hh = Hash(h);
|
148 | hh.tap(function (x) {
|
149 | assert.ok(this === hh)
|
150 | assert.eql(x, h);
|
151 | });
|
152 |
|
153 | Hash.tap(h, function (x) {
|
154 | assert.eql(
|
155 | Object.keys(this).sort(),
|
156 | Object.keys(hh).sort()
|
157 | );
|
158 | assert.eql(x, h);
|
159 | });
|
160 | };
|
161 |
|
162 | exports.extract = function () {
|
163 | var hash = Hash({ a : 1, b : 2, c : 3 }).clone;
|
164 | var extracted = hash.extract(['a','b']);
|
165 | assert.equal(extracted.length, 2);
|
166 | assert.deepEqual(extracted.items, { a : 1, b : 2 });
|
167 | };
|
168 |
|
169 | exports.exclude = function () {
|
170 | var hash = Hash({ a : 1, b : 2, c : 3 }).clone;
|
171 | var extracted = hash.exclude(['a','b']);
|
172 | assert.equal(extracted.length, 1);
|
173 | assert.deepEqual(extracted.items, { c : 3 });
|
174 | };
|
175 |
|
176 | exports.concat = function () {
|
177 | var ref1 = { a : 1, b : 2 };
|
178 | var ref2 = { foo : 100, bar : 200 };
|
179 | var ref3 = { b : 3, c : 4, bar : 300 };
|
180 |
|
181 | assert.deepEqual(
|
182 | Hash.concat([ ref1, ref2 ]),
|
183 | { a : 1, b : 2, foo : 100, bar : 200 }
|
184 | );
|
185 |
|
186 | assert.deepEqual(
|
187 | Hash.concat([ ref1, ref2, ref3 ]),
|
188 | { a : 1, b : 3, c : 4, foo : 100, bar : 300 }
|
189 | );
|
190 | };
|
191 |
|
192 | exports.zip = function () {
|
193 | var xs = ['a','b','c'];
|
194 | var ys = [1,2,3,4];
|
195 | var h = Hash(xs,ys);
|
196 | assert.equal(h.length, 3);
|
197 | assert.deepEqual(h.items, { a : 1, b : 2, c : 3 });
|
198 |
|
199 | var zipped = Hash.zip(xs,ys);
|
200 | assert.deepEqual(zipped, { a : 1, b : 2, c : 3 });
|
201 | };
|
202 |
|
203 | exports.length = function () {
|
204 | assert.equal(Hash({ a : 1, b : [2,3], c : 4 }).length, 3);
|
205 | assert.equal(Hash({ a : 1, b : [2,3], c : 4 }).size, 3);
|
206 | assert.equal(Hash.size({ a : 1, b : [2,3], c : 4 }), 3);
|
207 | };
|
208 |
|
209 | exports.compact = function () {
|
210 | var hash = {
|
211 | a : 1,
|
212 | b : undefined,
|
213 | c : false,
|
214 | d : 4,
|
215 | e : [ undefined, 4 ],
|
216 | f : null
|
217 | };
|
218 | var compacted = Hash(hash).compact;
|
219 | assert.deepEqual(
|
220 | {
|
221 | a : 1,
|
222 | b : undefined,
|
223 | c : false,
|
224 | d : 4,
|
225 | e : [ undefined, 4 ],
|
226 | f : null
|
227 | },
|
228 | hash, 'compact modified the hash'
|
229 | );
|
230 | assert.deepEqual(
|
231 | compacted.items,
|
232 | {
|
233 | a : 1,
|
234 | c : false,
|
235 | d : 4,
|
236 | e : [ undefined, 4 ],
|
237 | f : null
|
238 | }
|
239 | );
|
240 | var h = Hash.compact(hash);
|
241 | assert.deepEqual(h, compacted.items);
|
242 | };
|