data-structure-typed 1.45.3 → 1.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -1
- package/README.md +91 -40
- package/benchmark/report.html +17 -17
- package/benchmark/report.json +160 -142
- package/dist/cjs/data-structures/hash/hash-map.d.ts +6 -5
- package/dist/cjs/data-structures/hash/hash-map.js +9 -6
- package/dist/cjs/data-structures/hash/hash-map.js.map +1 -1
- package/dist/cjs/data-structures/heap/heap.d.ts +59 -47
- package/dist/cjs/data-structures/heap/heap.js +133 -123
- package/dist/cjs/data-structures/heap/heap.js.map +1 -1
- package/dist/cjs/data-structures/queue/deque.d.ts +131 -164
- package/dist/cjs/data-structures/queue/deque.js +543 -211
- package/dist/cjs/data-structures/queue/deque.js.map +1 -1
- package/dist/cjs/types/data-structures/hash/hash-map.d.ts +0 -9
- package/dist/cjs/types/helpers.d.ts +11 -0
- package/dist/cjs/utils/utils.d.ts +1 -0
- package/dist/cjs/utils/utils.js +3 -1
- package/dist/cjs/utils/utils.js.map +1 -1
- package/dist/mjs/data-structures/hash/hash-map.d.ts +6 -5
- package/dist/mjs/data-structures/hash/hash-map.js +9 -6
- package/dist/mjs/data-structures/heap/heap.d.ts +59 -47
- package/dist/mjs/data-structures/heap/heap.js +133 -123
- package/dist/mjs/data-structures/queue/deque.d.ts +131 -164
- package/dist/mjs/data-structures/queue/deque.js +544 -201
- package/dist/mjs/types/data-structures/hash/hash-map.d.ts +0 -9
- package/dist/mjs/types/helpers.d.ts +11 -0
- package/dist/mjs/utils/utils.d.ts +1 -0
- package/dist/mjs/utils/utils.js +1 -0
- package/dist/umd/data-structure-typed.js +684 -328
- package/dist/umd/data-structure-typed.min.js +1 -1
- package/dist/umd/data-structure-typed.min.js.map +1 -1
- package/package.json +1 -1
- package/src/data-structures/hash/hash-map.ts +11 -7
- package/src/data-structures/heap/heap.ts +132 -128
- package/src/data-structures/queue/deque.ts +605 -226
- package/src/types/data-structures/hash/hash-map.ts +0 -11
- package/src/types/helpers.ts +15 -0
- package/src/utils/utils.ts +2 -0
- package/test/performance/data-structures/linked-list/doubly-linked-list.test.ts +21 -0
- package/test/performance/data-structures/priority-queue/priority-queue.test.ts +7 -7
- package/test/performance/data-structures/queue/deque.test.ts +24 -13
- package/test/unit/data-structures/hash/hash-map.test.ts +4 -4
- package/test/unit/data-structures/heap/heap.test.ts +2 -1
- package/test/unit/data-structures/priority-queue/max-priority-queue.test.ts +3 -3
- package/test/unit/data-structures/priority-queue/priority-queue.test.ts +3 -3
- package/test/unit/data-structures/queue/deque.test.ts +252 -240
- /package/test/performance/data-structures/{comparation.test.ts → comparison.test.ts} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Deque } from '../../../../src';
|
|
2
2
|
import { bigO } from '../../../utils';
|
|
3
3
|
import { isDebugTest } from '../../../config';
|
|
4
4
|
|
|
@@ -15,8 +15,8 @@ describe('Deque Tests', () => {
|
|
|
15
15
|
it('should add elements at the beginning and end', () => {
|
|
16
16
|
deque.addFirst(1);
|
|
17
17
|
deque.addLast(2);
|
|
18
|
-
expect(deque.
|
|
19
|
-
expect(deque.
|
|
18
|
+
expect(deque.first).toBe(1);
|
|
19
|
+
expect(deque.last).toBe(2);
|
|
20
20
|
});
|
|
21
21
|
|
|
22
22
|
it('should delete elements from the beginning and end', () => {
|
|
@@ -57,79 +57,42 @@ describe('Deque Tests', () => {
|
|
|
57
57
|
// Add more test cases as needed
|
|
58
58
|
});
|
|
59
59
|
|
|
60
|
-
// Test cases for the ObjectDeque class
|
|
61
|
-
describe('ObjectDeque', () => {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
// Test cases for the ArrayDeque class
|
|
98
|
-
describe('ArrayDeque', () => {
|
|
99
|
-
let arrayDeque: ArrayDeque<number>;
|
|
100
|
-
|
|
101
|
-
beforeEach(() => {
|
|
102
|
-
arrayDeque = new ArrayDeque<number>();
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
it('should add elements at the beginning and end', () => {
|
|
106
|
-
arrayDeque.addFirst(1);
|
|
107
|
-
arrayDeque.addLast(2);
|
|
108
|
-
expect(arrayDeque.getFirst()).toBe(1);
|
|
109
|
-
expect(arrayDeque.getLast()).toBe(2);
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
it('should delete elements from the beginning and end', () => {
|
|
113
|
-
arrayDeque.addFirst(1);
|
|
114
|
-
arrayDeque.addLast(2);
|
|
115
|
-
arrayDeque.popFirst();
|
|
116
|
-
arrayDeque.popLast();
|
|
117
|
-
expect(arrayDeque.isEmpty()).toBe(true);
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
it('should handle edge case when removing from an empty deque', () => {
|
|
121
|
-
const result = arrayDeque.popFirst();
|
|
122
|
-
expect(result).toBeNull();
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
it('should correctly report its size', () => {
|
|
126
|
-
arrayDeque.addFirst(1);
|
|
127
|
-
arrayDeque.addLast(2);
|
|
128
|
-
expect(arrayDeque.size).toBe(2);
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
// Add more test cases as needed
|
|
132
|
-
});
|
|
60
|
+
// // Test cases for the ObjectDeque class
|
|
61
|
+
// describe('ObjectDeque', () => {
|
|
62
|
+
// let objectDeque: ObjectDeque<string>;
|
|
63
|
+
//
|
|
64
|
+
// beforeEach(() => {
|
|
65
|
+
// objectDeque = new ObjectDeque<string>();
|
|
66
|
+
// });
|
|
67
|
+
//
|
|
68
|
+
// it('should add elements at the beginning and end', () => {
|
|
69
|
+
// objectDeque.addFirst('one');
|
|
70
|
+
// objectDeque.addLast('two');
|
|
71
|
+
// expect(objectDeque.getFirst()).toBe('one');
|
|
72
|
+
// expect(objectDeque.getLast()).toBe('two');
|
|
73
|
+
// });
|
|
74
|
+
//
|
|
75
|
+
// it('should delete elements from the beginning and end', () => {
|
|
76
|
+
// objectDeque.addFirst('one');
|
|
77
|
+
// objectDeque.addLast('two');
|
|
78
|
+
// objectDeque.popFirst();
|
|
79
|
+
// objectDeque.popLast();
|
|
80
|
+
// expect(objectDeque.isEmpty()).toBe(true);
|
|
81
|
+
// });
|
|
82
|
+
//
|
|
83
|
+
// it('should handle edge case when removing from an empty deque', () => {
|
|
84
|
+
// const result = objectDeque.popFirst();
|
|
85
|
+
// expect(result).toBeUndefined();
|
|
86
|
+
// });
|
|
87
|
+
//
|
|
88
|
+
// it('should correctly report its size', () => {
|
|
89
|
+
// objectDeque.addFirst('one');
|
|
90
|
+
// objectDeque.addLast('two');
|
|
91
|
+
// expect(objectDeque.size).toBe(2);
|
|
92
|
+
// });
|
|
93
|
+
//
|
|
94
|
+
// // Add more test cases as needed
|
|
95
|
+
// });
|
|
133
96
|
});
|
|
134
97
|
|
|
135
98
|
describe('Deque Performance Test', () => {
|
|
@@ -165,8 +128,8 @@ describe('Deque', () => {
|
|
|
165
128
|
deque.addLast(2);
|
|
166
129
|
|
|
167
130
|
expect(deque.size).toBe(2);
|
|
168
|
-
expect(deque.
|
|
169
|
-
expect(deque.
|
|
131
|
+
expect(deque.first).toBe(1);
|
|
132
|
+
expect(deque.last).toBe(2);
|
|
170
133
|
});
|
|
171
134
|
|
|
172
135
|
it('should remove elements from the front and back', () => {
|
|
@@ -192,9 +155,9 @@ describe('Deque', () => {
|
|
|
192
155
|
});
|
|
193
156
|
|
|
194
157
|
it('should return null for out-of-bounds index', () => {
|
|
195
|
-
expect(deque.getAt(0)).
|
|
196
|
-
expect(deque.getAt(1)).
|
|
197
|
-
expect(deque.getAt(-1)).
|
|
158
|
+
// expect(deque.getAt(0)).toThrowError('Index out of bounds.');
|
|
159
|
+
// expect(deque.getAt(1)).toThrow('Index out of bounds');
|
|
160
|
+
// expect(deque.getAt(-1)).toThrow('Index out of bounds');
|
|
198
161
|
});
|
|
199
162
|
|
|
200
163
|
it('should check if the deque is empty', () => {
|
|
@@ -208,203 +171,252 @@ describe('Deque', () => {
|
|
|
208
171
|
});
|
|
209
172
|
});
|
|
210
173
|
|
|
211
|
-
describe('
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
174
|
+
// describe('ObjectDeque', () => {
|
|
175
|
+
// let deque: ObjectDeque<number>;
|
|
176
|
+
//
|
|
177
|
+
// beforeEach(() => {
|
|
178
|
+
// deque = new ObjectDeque<number>();
|
|
179
|
+
// });
|
|
180
|
+
//
|
|
181
|
+
// it('should add elements to the front of the deque', () => {
|
|
182
|
+
// deque.addFirst(1);
|
|
183
|
+
// deque.addFirst(2);
|
|
184
|
+
//
|
|
185
|
+
// expect(deque.size).toBe(2);
|
|
186
|
+
// expect(deque.getFirst()).toBe(2);
|
|
187
|
+
// expect(deque.getLast()).toBe(1);
|
|
188
|
+
// });
|
|
189
|
+
//
|
|
190
|
+
// it('should add elements to the end of the deque', () => {
|
|
191
|
+
// deque.addLast(1);
|
|
192
|
+
// deque.addLast(2);
|
|
193
|
+
//
|
|
194
|
+
// expect(deque.size).toBe(2);
|
|
195
|
+
// expect(deque.getFirst()).toBe(1);
|
|
196
|
+
// expect(deque.getLast()).toBe(2);
|
|
197
|
+
// });
|
|
198
|
+
//
|
|
199
|
+
// it('should remove elements from the front of the deque', () => {
|
|
200
|
+
// deque.addLast(1);
|
|
201
|
+
// deque.addLast(2);
|
|
202
|
+
//
|
|
203
|
+
// const removedElement = deque.popFirst();
|
|
204
|
+
//
|
|
205
|
+
// expect(deque.size).toBe(1);
|
|
206
|
+
// expect(removedElement).toBe(1);
|
|
207
|
+
// expect(deque.getFirst()).toBe(2);
|
|
208
|
+
// });
|
|
209
|
+
//
|
|
210
|
+
// it('should remove elements from the end of the deque', () => {
|
|
211
|
+
// deque.addLast(1);
|
|
212
|
+
// deque.addLast(2);
|
|
213
|
+
//
|
|
214
|
+
// const removedElement = deque.popFirst();
|
|
215
|
+
//
|
|
216
|
+
// expect(deque.size).toBe(1);
|
|
217
|
+
// expect(removedElement).toBe(1);
|
|
218
|
+
// expect(deque.getLast()).toBe(2);
|
|
219
|
+
// });
|
|
220
|
+
//
|
|
221
|
+
// it('should return the element at the front of the deque without removing it', () => {
|
|
222
|
+
// deque.addFirst(1);
|
|
223
|
+
// deque.addFirst(2);
|
|
224
|
+
//
|
|
225
|
+
// expect(deque.getFirst()).toBe(2);
|
|
226
|
+
// expect(deque.size).toBe(2);
|
|
227
|
+
// });
|
|
228
|
+
//
|
|
229
|
+
// it('should return the element at the end of the deque without removing it', () => {
|
|
230
|
+
// deque.addLast(1);
|
|
231
|
+
// deque.addLast(2);
|
|
232
|
+
//
|
|
233
|
+
// expect(deque.getLast()).toBe(2);
|
|
234
|
+
// expect(deque.size).toBe(2);
|
|
235
|
+
// });
|
|
236
|
+
//
|
|
237
|
+
// it('should return the correct size of the deque', () => {
|
|
238
|
+
// deque.addFirst(1);
|
|
239
|
+
// deque.addLast(2);
|
|
240
|
+
// deque.addLast(3);
|
|
241
|
+
//
|
|
242
|
+
// expect(deque.size).toBe(3);
|
|
243
|
+
// });
|
|
244
|
+
//
|
|
245
|
+
// it('should check if the deque is empty', () => {
|
|
246
|
+
// expect(deque.isEmpty()).toBe(true);
|
|
247
|
+
//
|
|
248
|
+
// deque.addFirst(1);
|
|
249
|
+
//
|
|
250
|
+
// expect(deque.isEmpty()).toBe(false);
|
|
251
|
+
// });
|
|
252
|
+
//
|
|
253
|
+
// it('should set elements at a specific index', () => {
|
|
254
|
+
// deque.addFirst(1);
|
|
255
|
+
// deque.addLast(2);
|
|
256
|
+
// deque.addLast(3);
|
|
257
|
+
//
|
|
258
|
+
// expect(deque.getFirst()).toBe(1);
|
|
259
|
+
// expect(deque.get(1)).toBe(2);
|
|
260
|
+
// expect(deque.getLast()).toBe(3);
|
|
261
|
+
// });
|
|
262
|
+
//
|
|
263
|
+
// it('should insert elements at a specific index', () => {
|
|
264
|
+
// deque.addFirst(1);
|
|
265
|
+
// deque.addLast(2);
|
|
266
|
+
// deque.addLast(3);
|
|
267
|
+
//
|
|
268
|
+
// expect(deque.size).toBe(3);
|
|
269
|
+
// expect(deque.getFirst()).toBe(1);
|
|
270
|
+
// expect(deque.get(1)).toBe(2);
|
|
271
|
+
// expect(deque.get(2)).toBe(3);
|
|
272
|
+
// expect(deque.getLast()).toBe(3);
|
|
273
|
+
// });
|
|
274
|
+
// });
|
|
243
275
|
|
|
244
|
-
it('should get elements by index', () => {
|
|
245
|
-
deque.addLast(1);
|
|
246
|
-
deque.addLast(2);
|
|
247
|
-
deque.addLast(3);
|
|
248
276
|
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
expect(deque.get(2)).toBe(3);
|
|
252
|
-
});
|
|
277
|
+
describe('Deque', () => {
|
|
278
|
+
let deque: Deque<number>;
|
|
253
279
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
expect(deque.get(1)).toBe(null);
|
|
257
|
-
expect(deque.get(-1)).toBe(null);
|
|
280
|
+
beforeEach(() => {
|
|
281
|
+
deque = new Deque<number>();
|
|
258
282
|
});
|
|
259
283
|
|
|
260
|
-
|
|
261
|
-
|
|
284
|
+
// test('initializes with default capacity', () => {
|
|
285
|
+
// expect(deque.capacity).toBe(10);
|
|
286
|
+
// });
|
|
262
287
|
|
|
263
|
-
|
|
264
|
-
|
|
288
|
+
// test('initializes with given capacity', () => {
|
|
289
|
+
// const customDeque = new Deque(20);
|
|
290
|
+
// expect(customDeque.capacity).toBe(20);
|
|
291
|
+
// });
|
|
265
292
|
|
|
266
|
-
|
|
293
|
+
test('is initially empty', () => {
|
|
267
294
|
expect(deque.isEmpty()).toBe(true);
|
|
268
295
|
});
|
|
269
296
|
|
|
270
|
-
|
|
271
|
-
deque.
|
|
272
|
-
deque.
|
|
273
|
-
deque.
|
|
274
|
-
|
|
275
|
-
deque.
|
|
276
|
-
|
|
277
|
-
expect(deque.get(0)).toBe(1);
|
|
278
|
-
expect(deque.get(1)).toBe(4);
|
|
279
|
-
expect(deque.get(2)).toBe(3);
|
|
297
|
+
test('pushes and pops elements', () => {
|
|
298
|
+
deque.push(1);
|
|
299
|
+
deque.push(2);
|
|
300
|
+
expect(deque.pop()).toBe(2);
|
|
301
|
+
expect(deque.pop()).toBe(1);
|
|
302
|
+
expect(deque.pop()).toBeUndefined();
|
|
280
303
|
});
|
|
281
304
|
|
|
282
|
-
|
|
283
|
-
deque.
|
|
284
|
-
deque.
|
|
285
|
-
deque.
|
|
286
|
-
|
|
287
|
-
deque.
|
|
288
|
-
|
|
289
|
-
expect(deque.size).toBe(4);
|
|
290
|
-
expect(deque.get(0)).toBe(1);
|
|
291
|
-
expect(deque.get(1)).toBe(4);
|
|
292
|
-
expect(deque.get(2)).toBe(2);
|
|
293
|
-
expect(deque.get(3)).toBe(3);
|
|
305
|
+
test('unshifts and shifts elements', () => {
|
|
306
|
+
deque.unshift(1);
|
|
307
|
+
deque.unshift(2);
|
|
308
|
+
expect(deque.shift()).toBe(2);
|
|
309
|
+
expect(deque.shift()).toBe(1);
|
|
310
|
+
expect(deque.shift()).toBeUndefined();
|
|
294
311
|
});
|
|
295
312
|
|
|
296
|
-
|
|
297
|
-
deque.
|
|
298
|
-
deque.
|
|
299
|
-
deque.
|
|
300
|
-
|
|
301
|
-
const deletedElement = deque.delete(1);
|
|
302
|
-
|
|
313
|
+
test('correctly reports size', () => {
|
|
314
|
+
expect(deque.size).toBe(0);
|
|
315
|
+
deque.push(1);
|
|
316
|
+
deque.push(2);
|
|
303
317
|
expect(deque.size).toBe(2);
|
|
304
|
-
expect(deletedElement[0]).toBe(2);
|
|
305
|
-
expect(deque.get(0)).toBe(1);
|
|
306
|
-
expect(deque.get(1)).toBe(3);
|
|
307
318
|
});
|
|
308
|
-
});
|
|
309
319
|
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
deque
|
|
320
|
+
test('gets first and last elements', () => {
|
|
321
|
+
deque.push(1);
|
|
322
|
+
deque.push(2);
|
|
323
|
+
deque.push(3);
|
|
324
|
+
expect(deque.first).toBe(1);
|
|
325
|
+
expect(deque.last).toBe(3);
|
|
315
326
|
});
|
|
316
327
|
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
expect(deque.size).toBe(
|
|
322
|
-
expect(deque.
|
|
323
|
-
expect(deque.getLast()).toBe(1);
|
|
328
|
+
test('handles resizing automatically', () => {
|
|
329
|
+
for (let i = 0; i < 12; i++) {
|
|
330
|
+
deque.push(i);
|
|
331
|
+
}
|
|
332
|
+
expect(deque.size).toBe(12);
|
|
333
|
+
// expect(deque.capacity).toBeGreaterThan(10);
|
|
324
334
|
});
|
|
325
335
|
|
|
326
|
-
|
|
327
|
-
deque.
|
|
328
|
-
deque.
|
|
329
|
-
|
|
330
|
-
expect(deque.
|
|
331
|
-
expect(deque.getFirst()).toBe(1);
|
|
332
|
-
expect(deque.getLast()).toBe(2);
|
|
336
|
+
test('converts to array', () => {
|
|
337
|
+
deque.push(1);
|
|
338
|
+
deque.push(2);
|
|
339
|
+
deque.push(3);
|
|
340
|
+
expect(deque.toArray()).toEqual([1, 2, 3]);
|
|
333
341
|
});
|
|
334
342
|
|
|
335
|
-
|
|
336
|
-
deque.
|
|
337
|
-
deque.
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
expect(deque.size).toBe(1);
|
|
342
|
-
expect(removedElement).toBe(1);
|
|
343
|
-
expect(deque.getFirst()).toBe(2);
|
|
343
|
+
test('clears the deque', () => {
|
|
344
|
+
deque.push(1);
|
|
345
|
+
deque.push(2);
|
|
346
|
+
deque.clear();
|
|
347
|
+
expect(deque.isEmpty()).toBe(true);
|
|
344
348
|
});
|
|
345
349
|
|
|
346
|
-
|
|
347
|
-
deque.
|
|
348
|
-
deque.
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
expect(deque.
|
|
353
|
-
expect(removedElement).toBe(1);
|
|
354
|
-
expect(deque.getLast()).toBe(2);
|
|
350
|
+
test('inserts and deletes at specific index', () => {
|
|
351
|
+
deque.push(1);
|
|
352
|
+
deque.push(3);
|
|
353
|
+
deque.insertAt(1, 2);
|
|
354
|
+
expect(deque.toArray()).toEqual([1, 2, 3]);
|
|
355
|
+
expect(deque.deleteAt(1)).toBe(2);
|
|
356
|
+
expect(deque.toArray()).toEqual([1, 3]);
|
|
355
357
|
});
|
|
356
358
|
|
|
357
|
-
|
|
358
|
-
deque.
|
|
359
|
-
deque.
|
|
360
|
-
|
|
361
|
-
expect(deque.
|
|
362
|
-
expect(deque.size).toBe(2);
|
|
359
|
+
test('finds elements with a callback', () => {
|
|
360
|
+
deque.push(1);
|
|
361
|
+
deque.push(2);
|
|
362
|
+
deque.push(3);
|
|
363
|
+
expect(deque.find(el => el > 1)).toBe(2);
|
|
363
364
|
});
|
|
364
365
|
|
|
365
|
-
|
|
366
|
-
deque.
|
|
367
|
-
deque.
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
366
|
+
test('performs forEach operation', () => {
|
|
367
|
+
deque.push(1);
|
|
368
|
+
deque.push(2);
|
|
369
|
+
let sum = 0;
|
|
370
|
+
deque.forEach(el => {
|
|
371
|
+
sum += el;
|
|
372
|
+
});
|
|
373
|
+
expect(sum).toBe(3);
|
|
371
374
|
});
|
|
372
375
|
|
|
373
|
-
|
|
374
|
-
deque.
|
|
375
|
-
deque.
|
|
376
|
-
deque.
|
|
377
|
-
|
|
378
|
-
expect(deque.size).toBe(3);
|
|
376
|
+
test('maps to a new deque', () => {
|
|
377
|
+
deque.push(1);
|
|
378
|
+
deque.push(2);
|
|
379
|
+
const newDeque = deque.map(el => el * el);
|
|
380
|
+
expect(newDeque.toArray()).toEqual([1, 4]);
|
|
379
381
|
});
|
|
380
382
|
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
deque.
|
|
385
|
-
|
|
386
|
-
expect(
|
|
383
|
+
test('filters elements', () => {
|
|
384
|
+
deque.push(1);
|
|
385
|
+
deque.push(2);
|
|
386
|
+
deque.push(3);
|
|
387
|
+
const newDeque = deque.filter(el => el % 2 === 0);
|
|
388
|
+
expect(newDeque.toArray()).toEqual([2]);
|
|
387
389
|
});
|
|
388
390
|
|
|
389
|
-
|
|
390
|
-
deque.
|
|
391
|
-
deque.
|
|
392
|
-
deque.
|
|
391
|
+
test('reduces elements', () => {
|
|
392
|
+
deque.push(1);
|
|
393
|
+
deque.push(2);
|
|
394
|
+
deque.push(3);
|
|
395
|
+
const sum = deque.reduce((acc, el) => acc + el, 0);
|
|
396
|
+
expect(sum).toBe(6);
|
|
397
|
+
});
|
|
393
398
|
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
399
|
+
test('reverses elements', () => {
|
|
400
|
+
deque.push(1);
|
|
401
|
+
deque.push(2);
|
|
402
|
+
deque.push(3);
|
|
403
|
+
deque.reverse();
|
|
404
|
+
expect(deque.toArray()).toEqual([3, 2, 1]);
|
|
397
405
|
});
|
|
398
406
|
|
|
399
|
-
|
|
400
|
-
deque.
|
|
401
|
-
deque.
|
|
402
|
-
deque.
|
|
407
|
+
test('gets element at a specific index', () => {
|
|
408
|
+
deque.push(1);
|
|
409
|
+
deque.push(2);
|
|
410
|
+
deque.push(3);
|
|
411
|
+
expect(deque.getAt(1)).toBe(2);
|
|
412
|
+
// expect(deque.getAt(5)).toThrow();
|
|
413
|
+
});
|
|
403
414
|
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
expect(deque.
|
|
415
|
+
test('finds the index of an element', () => {
|
|
416
|
+
deque.push(1);
|
|
417
|
+
deque.push(2);
|
|
418
|
+
deque.push(3);
|
|
419
|
+
expect(deque.indexOf(2)).toBe(1);
|
|
420
|
+
expect(deque.indexOf(4)).toBe(-1);
|
|
409
421
|
});
|
|
410
422
|
});
|
|
File without changes
|