UNPKG

6.98 kBJavaScriptView Raw
1var Hash = require('hashish');
2var assert = require('assert');
3
4exports.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
13exports['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
24exports.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
49exports.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
61exports.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
71exports.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
85exports.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
99exports.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
110exports.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
120exports.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
135exports.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
145exports.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
162exports.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
169exports.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
176exports.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
192exports.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
203exports.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
209exports.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};