data-structure-typed 1.39.0 → 1.39.2
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/dist/cjs/data-structures/binary-tree/avl-tree.d.ts +2 -2
- package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +96 -32
- package/dist/cjs/data-structures/binary-tree/binary-tree.js +46 -8
- package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/bst.d.ts +6 -6
- package/dist/cjs/data-structures/binary-tree/bst.js +2 -2
- package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/tree-multiset.d.ts +2 -2
- package/dist/cjs/data-structures/binary-tree/tree-multiset.js.map +1 -1
- package/dist/cjs/data-structures/graph/abstract-graph.d.ts +1 -1
- package/dist/cjs/data-structures/graph/abstract-graph.js +1 -1
- package/dist/cjs/data-structures/graph/abstract-graph.js.map +1 -1
- package/dist/cjs/data-structures/graph/map-graph.d.ts +1 -1
- package/dist/cjs/data-structures/graph/map-graph.js +1 -1
- package/dist/cjs/data-structures/graph/map-graph.js.map +1 -1
- package/dist/cjs/data-structures/linked-list/doubly-linked-list.d.ts +46 -28
- package/dist/cjs/data-structures/linked-list/doubly-linked-list.js +59 -49
- package/dist/cjs/data-structures/linked-list/doubly-linked-list.js.map +1 -1
- package/dist/cjs/data-structures/linked-list/singly-linked-list.d.ts +75 -7
- package/dist/cjs/data-structures/linked-list/singly-linked-list.js +110 -9
- package/dist/cjs/data-structures/linked-list/singly-linked-list.js.map +1 -1
- package/dist/cjs/data-structures/matrix/matrix2d.d.ts +1 -2
- package/dist/cjs/data-structures/matrix/matrix2d.js +3 -7
- package/dist/cjs/data-structures/matrix/matrix2d.js.map +1 -1
- package/dist/cjs/data-structures/matrix/vector2d.d.ts +0 -1
- package/dist/cjs/data-structures/matrix/vector2d.js +0 -1
- package/dist/cjs/data-structures/matrix/vector2d.js.map +1 -1
- package/dist/cjs/data-structures/queue/deque.d.ts +20 -20
- package/dist/cjs/data-structures/queue/deque.js +22 -22
- package/dist/cjs/data-structures/queue/deque.js.map +1 -1
- package/dist/cjs/data-structures/queue/queue.d.ts +3 -3
- package/dist/cjs/data-structures/queue/queue.js +3 -3
- package/dist/cjs/data-structures/queue/queue.js.map +1 -1
- package/dist/cjs/interfaces/binary-tree.d.ts +2 -2
- package/dist/cjs/types/data-structures/binary-tree/binary-tree.d.ts +0 -2
- package/dist/cjs/types/helpers.d.ts +1 -4
- package/dist/cjs/types/helpers.js.map +1 -1
- package/dist/mjs/data-structures/binary-tree/avl-tree.d.ts +2 -2
- package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +96 -32
- package/dist/mjs/data-structures/binary-tree/binary-tree.js +46 -8
- package/dist/mjs/data-structures/binary-tree/bst.d.ts +6 -6
- package/dist/mjs/data-structures/binary-tree/bst.js +2 -2
- package/dist/mjs/data-structures/binary-tree/tree-multiset.d.ts +2 -2
- package/dist/mjs/data-structures/graph/abstract-graph.d.ts +1 -1
- package/dist/mjs/data-structures/graph/abstract-graph.js +1 -1
- package/dist/mjs/data-structures/graph/map-graph.d.ts +1 -1
- package/dist/mjs/data-structures/graph/map-graph.js +1 -1
- package/dist/mjs/data-structures/linked-list/doubly-linked-list.d.ts +46 -28
- package/dist/mjs/data-structures/linked-list/doubly-linked-list.js +59 -49
- package/dist/mjs/data-structures/linked-list/singly-linked-list.d.ts +75 -7
- package/dist/mjs/data-structures/linked-list/singly-linked-list.js +110 -9
- package/dist/mjs/data-structures/matrix/matrix2d.d.ts +1 -2
- package/dist/mjs/data-structures/matrix/matrix2d.js +3 -7
- package/dist/mjs/data-structures/matrix/vector2d.d.ts +0 -1
- package/dist/mjs/data-structures/matrix/vector2d.js +0 -1
- package/dist/mjs/data-structures/queue/deque.d.ts +20 -20
- package/dist/mjs/data-structures/queue/deque.js +22 -22
- package/dist/mjs/data-structures/queue/queue.d.ts +3 -3
- package/dist/mjs/data-structures/queue/queue.js +3 -3
- package/dist/mjs/interfaces/binary-tree.d.ts +2 -2
- package/dist/mjs/types/data-structures/binary-tree/binary-tree.d.ts +0 -2
- package/dist/mjs/types/helpers.d.ts +1 -4
- package/dist/umd/data-structure-typed.min.js +1 -1
- package/dist/umd/data-structure-typed.min.js.map +1 -1
- package/package.json +5 -5
- package/src/data-structures/binary-tree/avl-tree.ts +2 -2
- package/src/data-structures/binary-tree/binary-tree.ts +76 -90
- package/src/data-structures/binary-tree/bst.ts +9 -16
- package/src/data-structures/binary-tree/tree-multiset.ts +2 -2
- package/src/data-structures/graph/abstract-graph.ts +1 -1
- package/src/data-structures/graph/map-graph.ts +2 -2
- package/src/data-structures/linked-list/doubly-linked-list.ts +62 -56
- package/src/data-structures/linked-list/singly-linked-list.ts +118 -13
- package/src/data-structures/matrix/matrix2d.ts +1 -3
- package/src/data-structures/matrix/vector2d.ts +0 -2
- package/src/data-structures/queue/deque.ts +22 -22
- package/src/data-structures/queue/queue.ts +3 -3
- package/src/interfaces/binary-tree.ts +2 -2
- package/src/types/data-structures/binary-tree/binary-tree.ts +0 -4
- package/src/types/helpers.ts +1 -7
- package/test/unit/data-structures/binary-tree/avl-tree.test.ts +141 -1
- package/test/unit/data-structures/binary-tree/binary-tree.test.ts +289 -47
- package/test/unit/data-structures/binary-tree/bst.test.ts +391 -1
- package/test/unit/data-structures/binary-tree/rb-tree.test.ts +73 -7
- package/test/unit/data-structures/binary-tree/tree-multiset.test.ts +241 -186
- package/test/unit/data-structures/graph/directed-graph.test.ts +34 -4
- package/test/unit/data-structures/graph/map-graph.test.ts +82 -1
- package/test/unit/data-structures/graph/undirected-graph.test.ts +82 -0
- package/test/unit/data-structures/hash/coordinate-map.test.ts +20 -0
- package/test/unit/data-structures/hash/coordinate-set.test.ts +25 -0
- package/test/unit/data-structures/hash/hash-table.test.ts +3 -1
- package/test/unit/data-structures/linked-list/doubly-linked-list.test.ts +69 -6
- package/test/unit/data-structures/linked-list/linked-list.test.ts +2 -2
- package/test/unit/data-structures/linked-list/singly-linked-list.test.ts +59 -12
- package/test/unit/data-structures/matrix/matrix2d.test.ts +207 -0
- package/test/unit/data-structures/matrix/navigator.test.ts +166 -1
- package/test/unit/data-structures/matrix/vector2d.test.ts +171 -0
- package/test/unit/data-structures/queue/deque.test.ts +283 -20
- package/test/unit/data-structures/queue/queue.test.ts +10 -8
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import {ArrayDeque, Deque, ObjectDeque} from '../../../../src';
|
|
2
2
|
import {bigO} from '../../../utils';
|
|
3
|
+
import {isDebugTest} from '../../../config';
|
|
3
4
|
|
|
5
|
+
const isDebug = isDebugTest;
|
|
4
6
|
describe('Deque Tests', () => {
|
|
5
7
|
// Test cases for the Deque class (DoublyLinkedList-based)
|
|
6
8
|
describe('Deque (DoublyLinkedList-based)', () => {
|
|
@@ -13,20 +15,20 @@ describe('Deque Tests', () => {
|
|
|
13
15
|
it('should add elements at the beginning and end', () => {
|
|
14
16
|
deque.addFirst(1);
|
|
15
17
|
deque.addLast(2);
|
|
16
|
-
expect(deque.
|
|
17
|
-
expect(deque.
|
|
18
|
+
expect(deque.getFirst()).toBe(1);
|
|
19
|
+
expect(deque.getLast()).toBe(2);
|
|
18
20
|
});
|
|
19
21
|
|
|
20
22
|
it('should delete elements from the beginning and end', () => {
|
|
21
23
|
deque.addFirst(1);
|
|
22
24
|
deque.addLast(2);
|
|
23
|
-
deque.
|
|
24
|
-
deque.
|
|
25
|
+
deque.popFirst();
|
|
26
|
+
deque.popLast();
|
|
25
27
|
expect(deque.isEmpty()).toBe(true);
|
|
26
28
|
});
|
|
27
29
|
|
|
28
30
|
it('should handle edge case when removing from an empty deque', () => {
|
|
29
|
-
const result = deque.
|
|
31
|
+
const result = deque.popFirst();
|
|
30
32
|
expect(result).toBeUndefined();
|
|
31
33
|
});
|
|
32
34
|
|
|
@@ -38,18 +40,18 @@ describe('Deque Tests', () => {
|
|
|
38
40
|
|
|
39
41
|
it('should handle adding and removing elements alternately', () => {
|
|
40
42
|
deque.addFirst(1);
|
|
41
|
-
expect(deque.
|
|
43
|
+
expect(deque.popFirst()).toBe(1);
|
|
42
44
|
deque.addLast(2);
|
|
43
|
-
expect(deque.
|
|
45
|
+
expect(deque.popLast()).toBe(2);
|
|
44
46
|
expect(deque.isEmpty()).toBe(true);
|
|
45
47
|
});
|
|
46
48
|
|
|
47
49
|
it('should handle adding and removing elements in a cyclic manner', () => {
|
|
48
50
|
deque.addFirst(1);
|
|
49
51
|
deque.addLast(2);
|
|
50
|
-
expect(deque.
|
|
52
|
+
expect(deque.popFirst()).toBe(1);
|
|
51
53
|
deque.addFirst(3);
|
|
52
|
-
expect(deque.
|
|
54
|
+
expect(deque.popLast()).toBe(2);
|
|
53
55
|
expect(deque.size).toBe(1);
|
|
54
56
|
});
|
|
55
57
|
// Add more test cases as needed
|
|
@@ -66,20 +68,20 @@ describe('Deque Tests', () => {
|
|
|
66
68
|
it('should add elements at the beginning and end', () => {
|
|
67
69
|
objectDeque.addFirst('one');
|
|
68
70
|
objectDeque.addLast('two');
|
|
69
|
-
expect(objectDeque.
|
|
70
|
-
expect(objectDeque.
|
|
71
|
+
expect(objectDeque.getFirst()).toBe('one');
|
|
72
|
+
expect(objectDeque.getLast()).toBe('two');
|
|
71
73
|
});
|
|
72
74
|
|
|
73
75
|
it('should delete elements from the beginning and end', () => {
|
|
74
76
|
objectDeque.addFirst('one');
|
|
75
77
|
objectDeque.addLast('two');
|
|
76
|
-
objectDeque.
|
|
77
|
-
objectDeque.
|
|
78
|
+
objectDeque.popFirst();
|
|
79
|
+
objectDeque.popLast();
|
|
78
80
|
expect(objectDeque.isEmpty()).toBe(true);
|
|
79
81
|
});
|
|
80
82
|
|
|
81
83
|
it('should handle edge case when removing from an empty deque', () => {
|
|
82
|
-
const result = objectDeque.
|
|
84
|
+
const result = objectDeque.popFirst();
|
|
83
85
|
expect(result).toBeUndefined();
|
|
84
86
|
});
|
|
85
87
|
|
|
@@ -103,20 +105,20 @@ describe('Deque Tests', () => {
|
|
|
103
105
|
it('should add elements at the beginning and end', () => {
|
|
104
106
|
arrayDeque.addFirst(1);
|
|
105
107
|
arrayDeque.addLast(2);
|
|
106
|
-
expect(arrayDeque.
|
|
107
|
-
expect(arrayDeque.
|
|
108
|
+
expect(arrayDeque.getFirst()).toBe(1);
|
|
109
|
+
expect(arrayDeque.getLast()).toBe(2);
|
|
108
110
|
});
|
|
109
111
|
|
|
110
112
|
it('should delete elements from the beginning and end', () => {
|
|
111
113
|
arrayDeque.addFirst(1);
|
|
112
114
|
arrayDeque.addLast(2);
|
|
113
|
-
arrayDeque.
|
|
114
|
-
arrayDeque.
|
|
115
|
+
arrayDeque.popFirst();
|
|
116
|
+
arrayDeque.popLast();
|
|
115
117
|
expect(arrayDeque.isEmpty()).toBe(true);
|
|
116
118
|
});
|
|
117
119
|
|
|
118
120
|
it('should handle edge case when removing from an empty deque', () => {
|
|
119
|
-
const result = arrayDeque.
|
|
121
|
+
const result = arrayDeque.popFirst();
|
|
120
122
|
expect(result).toBeNull();
|
|
121
123
|
});
|
|
122
124
|
|
|
@@ -141,7 +143,268 @@ describe('Deque Performance Test', () => {
|
|
|
141
143
|
for (let i = 0; i < dataSize; i++) {
|
|
142
144
|
queue.pop();
|
|
143
145
|
}
|
|
144
|
-
console.log(`Queue Deque Test: ${performance.now() - startTime} ms`);
|
|
146
|
+
isDebug && console.log(`Queue Deque Test: ${performance.now() - startTime} ms`);
|
|
145
147
|
expect(performance.now() - startTime).toBeLessThan(bigO.LINEAR * 100);
|
|
146
148
|
});
|
|
147
149
|
});
|
|
150
|
+
|
|
151
|
+
describe('Deque', () => {
|
|
152
|
+
let deque: Deque<number>;
|
|
153
|
+
|
|
154
|
+
beforeEach(() => {
|
|
155
|
+
deque = new Deque<number>();
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
test('should initialize an empty deque', () => {
|
|
159
|
+
expect(deque.size).toBe(0);
|
|
160
|
+
expect(deque.isEmpty()).toBe(true);
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
test('should add elements to the front and back', () => {
|
|
164
|
+
deque.addFirst(1);
|
|
165
|
+
deque.addLast(2);
|
|
166
|
+
|
|
167
|
+
expect(deque.size).toBe(2);
|
|
168
|
+
expect(deque.getFirst()).toBe(1);
|
|
169
|
+
expect(deque.getLast()).toBe(2);
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
test('should remove elements from the front and back', () => {
|
|
173
|
+
deque.addFirst(1);
|
|
174
|
+
deque.addLast(2);
|
|
175
|
+
|
|
176
|
+
const firstElement = deque.popFirst();
|
|
177
|
+
const lastElement = deque.popLast();
|
|
178
|
+
|
|
179
|
+
expect(deque.size).toBe(0);
|
|
180
|
+
expect(firstElement).toBe(1);
|
|
181
|
+
expect(lastElement).toBe(2);
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
test('should get elements by index', () => {
|
|
185
|
+
deque.addLast(1);
|
|
186
|
+
deque.addLast(2);
|
|
187
|
+
deque.addLast(3);
|
|
188
|
+
|
|
189
|
+
expect(deque.getAt(0)).toBe(1);
|
|
190
|
+
expect(deque.getAt(1)).toBe(2);
|
|
191
|
+
expect(deque.getAt(2)).toBe(3);
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
test('should return null for out-of-bounds index', () => {
|
|
195
|
+
expect(deque.getAt(0)).toBe(undefined);
|
|
196
|
+
expect(deque.getAt(1)).toBe(undefined);
|
|
197
|
+
expect(deque.getAt(-1)).toBe(undefined);
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
test('should check if the deque is empty', () => {
|
|
201
|
+
expect(deque.isEmpty()).toBe(true);
|
|
202
|
+
|
|
203
|
+
deque.addLast(1);
|
|
204
|
+
expect(deque.isEmpty()).toBe(false);
|
|
205
|
+
|
|
206
|
+
deque.popFirst();
|
|
207
|
+
expect(deque.isEmpty()).toBe(true);
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
describe('ArrayDeque', () => {
|
|
212
|
+
let deque: ArrayDeque<number>;
|
|
213
|
+
|
|
214
|
+
beforeEach(() => {
|
|
215
|
+
deque = new ArrayDeque<number>();
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
test('should initialize an empty deque', () => {
|
|
219
|
+
expect(deque.size).toBe(0);
|
|
220
|
+
expect(deque.isEmpty()).toBe(true);
|
|
221
|
+
});
|
|
222
|
+
|
|
223
|
+
test('should add elements to the front and back', () => {
|
|
224
|
+
deque.addFirst(1);
|
|
225
|
+
deque.addLast(2);
|
|
226
|
+
|
|
227
|
+
expect(deque.size).toBe(2);
|
|
228
|
+
expect(deque.getFirst()).toBe(1);
|
|
229
|
+
expect(deque.getLast()).toBe(2);
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
test('should remove elements from the front and back', () => {
|
|
233
|
+
deque.addFirst(1);
|
|
234
|
+
deque.addLast(2);
|
|
235
|
+
|
|
236
|
+
const firstElement = deque.popFirst();
|
|
237
|
+
const lastElement = deque.popLast();
|
|
238
|
+
|
|
239
|
+
expect(deque.size).toBe(0);
|
|
240
|
+
expect(firstElement).toBe(1);
|
|
241
|
+
expect(lastElement).toBe(2);
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
test('should get elements by index', () => {
|
|
245
|
+
deque.addLast(1);
|
|
246
|
+
deque.addLast(2);
|
|
247
|
+
deque.addLast(3);
|
|
248
|
+
|
|
249
|
+
expect(deque.get(0)).toBe(1);
|
|
250
|
+
expect(deque.get(1)).toBe(2);
|
|
251
|
+
expect(deque.get(2)).toBe(3);
|
|
252
|
+
});
|
|
253
|
+
|
|
254
|
+
test('should return null for out-of-bounds index', () => {
|
|
255
|
+
expect(deque.get(0)).toBe(null);
|
|
256
|
+
expect(deque.get(1)).toBe(null);
|
|
257
|
+
expect(deque.get(-1)).toBe(null);
|
|
258
|
+
});
|
|
259
|
+
|
|
260
|
+
test('should check if the deque is empty', () => {
|
|
261
|
+
expect(deque.isEmpty()).toBe(true);
|
|
262
|
+
|
|
263
|
+
deque.addLast(1);
|
|
264
|
+
expect(deque.isEmpty()).toBe(false);
|
|
265
|
+
|
|
266
|
+
deque.popFirst();
|
|
267
|
+
expect(deque.isEmpty()).toBe(true);
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
test('should set elements at a specific index', () => {
|
|
271
|
+
deque.addLast(1);
|
|
272
|
+
deque.addLast(2);
|
|
273
|
+
deque.addLast(3);
|
|
274
|
+
|
|
275
|
+
deque.set(1, 4);
|
|
276
|
+
|
|
277
|
+
expect(deque.get(0)).toBe(1);
|
|
278
|
+
expect(deque.get(1)).toBe(4);
|
|
279
|
+
expect(deque.get(2)).toBe(3);
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
test('should insert elements at a specific index', () => {
|
|
283
|
+
deque.addLast(1);
|
|
284
|
+
deque.addLast(2);
|
|
285
|
+
deque.addLast(3);
|
|
286
|
+
|
|
287
|
+
deque.insert(1, 4);
|
|
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);
|
|
294
|
+
});
|
|
295
|
+
|
|
296
|
+
test('should delete elements at a specific index', () => {
|
|
297
|
+
deque.addLast(1);
|
|
298
|
+
deque.addLast(2);
|
|
299
|
+
deque.addLast(3);
|
|
300
|
+
|
|
301
|
+
const deletedElement = deque.delete(1);
|
|
302
|
+
|
|
303
|
+
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
|
+
});
|
|
308
|
+
});
|
|
309
|
+
|
|
310
|
+
describe('ObjectDeque', () => {
|
|
311
|
+
let deque: ObjectDeque<number>;
|
|
312
|
+
|
|
313
|
+
beforeEach(() => {
|
|
314
|
+
deque = new ObjectDeque<number>();
|
|
315
|
+
});
|
|
316
|
+
|
|
317
|
+
test('should add elements to the front of the deque', () => {
|
|
318
|
+
deque.addFirst(1);
|
|
319
|
+
deque.addFirst(2);
|
|
320
|
+
|
|
321
|
+
expect(deque.size).toBe(2);
|
|
322
|
+
expect(deque.getFirst()).toBe(2);
|
|
323
|
+
expect(deque.getLast()).toBe(1);
|
|
324
|
+
});
|
|
325
|
+
|
|
326
|
+
test('should add elements to the end of the deque', () => {
|
|
327
|
+
deque.addLast(1);
|
|
328
|
+
deque.addLast(2);
|
|
329
|
+
|
|
330
|
+
expect(deque.size).toBe(2);
|
|
331
|
+
expect(deque.getFirst()).toBe(1);
|
|
332
|
+
expect(deque.getLast()).toBe(2);
|
|
333
|
+
});
|
|
334
|
+
|
|
335
|
+
test('should remove elements from the front of the deque', () => {
|
|
336
|
+
deque.addLast(1);
|
|
337
|
+
deque.addLast(2);
|
|
338
|
+
|
|
339
|
+
const removedElement = deque.popFirst();
|
|
340
|
+
|
|
341
|
+
expect(deque.size).toBe(1);
|
|
342
|
+
expect(removedElement).toBe(1);
|
|
343
|
+
expect(deque.getFirst()).toBe(2);
|
|
344
|
+
});
|
|
345
|
+
|
|
346
|
+
test('should remove elements from the end of the deque', () => {
|
|
347
|
+
deque.addLast(1);
|
|
348
|
+
deque.addLast(2);
|
|
349
|
+
|
|
350
|
+
const removedElement = deque.popFirst();
|
|
351
|
+
|
|
352
|
+
expect(deque.size).toBe(1);
|
|
353
|
+
expect(removedElement).toBe(1);
|
|
354
|
+
expect(deque.getLast()).toBe(2);
|
|
355
|
+
});
|
|
356
|
+
|
|
357
|
+
test('should return the element at the front of the deque without removing it', () => {
|
|
358
|
+
deque.addFirst(1);
|
|
359
|
+
deque.addFirst(2);
|
|
360
|
+
|
|
361
|
+
expect(deque.getFirst()).toBe(2);
|
|
362
|
+
expect(deque.size).toBe(2);
|
|
363
|
+
});
|
|
364
|
+
|
|
365
|
+
test('should return the element at the end of the deque without removing it', () => {
|
|
366
|
+
deque.addLast(1);
|
|
367
|
+
deque.addLast(2);
|
|
368
|
+
|
|
369
|
+
expect(deque.getLast()).toBe(2);
|
|
370
|
+
expect(deque.size).toBe(2);
|
|
371
|
+
});
|
|
372
|
+
|
|
373
|
+
test('should return the correct size of the deque', () => {
|
|
374
|
+
deque.addFirst(1);
|
|
375
|
+
deque.addLast(2);
|
|
376
|
+
deque.addLast(3);
|
|
377
|
+
|
|
378
|
+
expect(deque.size).toBe(3);
|
|
379
|
+
});
|
|
380
|
+
|
|
381
|
+
test('should check if the deque is empty', () => {
|
|
382
|
+
expect(deque.isEmpty()).toBe(true);
|
|
383
|
+
|
|
384
|
+
deque.addFirst(1);
|
|
385
|
+
|
|
386
|
+
expect(deque.isEmpty()).toBe(false);
|
|
387
|
+
});
|
|
388
|
+
|
|
389
|
+
test('should set elements at a specific index', () => {
|
|
390
|
+
deque.addFirst(1);
|
|
391
|
+
deque.addLast(2);
|
|
392
|
+
deque.addLast(3);
|
|
393
|
+
|
|
394
|
+
expect(deque.getFirst()).toBe(1);
|
|
395
|
+
expect(deque.get(1)).toBe(2);
|
|
396
|
+
expect(deque.getLast()).toBe(3);
|
|
397
|
+
});
|
|
398
|
+
|
|
399
|
+
test('should insert elements at a specific index', () => {
|
|
400
|
+
deque.addFirst(1);
|
|
401
|
+
deque.addLast(2);
|
|
402
|
+
deque.addLast(3);
|
|
403
|
+
|
|
404
|
+
expect(deque.size).toBe(3);
|
|
405
|
+
expect(deque.getFirst()).toBe(1);
|
|
406
|
+
expect(deque.get(1)).toBe(2);
|
|
407
|
+
expect(deque.get(2)).toBe(3);
|
|
408
|
+
expect(deque.getLast()).toBe(3);
|
|
409
|
+
});
|
|
410
|
+
});
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import {LinkedListQueue, Queue} from '../../../../src';
|
|
2
2
|
import {bigO, magnitude} from '../../../utils';
|
|
3
|
+
import {isDebugTest} from '../../../config';
|
|
3
4
|
|
|
5
|
+
const isDebug = isDebugTest;
|
|
4
6
|
describe('Queue Operation Test', () => {
|
|
5
7
|
it('should validate a queue', () => {
|
|
6
8
|
const queue = new Queue<number>();
|
|
@@ -84,7 +86,7 @@ describe('Queue', () => {
|
|
|
84
86
|
queue.push(2);
|
|
85
87
|
expect(queue.size).toBe(2);
|
|
86
88
|
expect(queue.peek()).toBe(1);
|
|
87
|
-
expect(queue.
|
|
89
|
+
expect(queue.getLast()).toBe(2);
|
|
88
90
|
});
|
|
89
91
|
|
|
90
92
|
it('should shift elements from the front of the queue', () => {
|
|
@@ -94,7 +96,7 @@ describe('Queue', () => {
|
|
|
94
96
|
expect(shifted).toBe(1);
|
|
95
97
|
expect(queue.size).toBe(1);
|
|
96
98
|
expect(queue.peek()).toBe(2);
|
|
97
|
-
expect(queue.
|
|
99
|
+
expect(queue.getLast()).toBe(2);
|
|
98
100
|
});
|
|
99
101
|
|
|
100
102
|
it('should handle shifting when queue reaches half size', () => {
|
|
@@ -115,7 +117,7 @@ describe('Queue', () => {
|
|
|
115
117
|
queue.push(1);
|
|
116
118
|
queue.push(2);
|
|
117
119
|
expect(queue.peek()).toBe(1);
|
|
118
|
-
expect(queue.
|
|
120
|
+
expect(queue.getLast()).toBe(2);
|
|
119
121
|
});
|
|
120
122
|
|
|
121
123
|
it('should handle shifting when the queue is empty', () => {
|
|
@@ -127,7 +129,7 @@ describe('Queue', () => {
|
|
|
127
129
|
|
|
128
130
|
it('should handle peeking when the queue is empty', () => {
|
|
129
131
|
expect(queue.peek()).toBeUndefined();
|
|
130
|
-
expect(queue.
|
|
132
|
+
expect(queue.getLast()).toBeUndefined();
|
|
131
133
|
});
|
|
132
134
|
|
|
133
135
|
it('should handle clearing the queue', () => {
|
|
@@ -137,7 +139,7 @@ describe('Queue', () => {
|
|
|
137
139
|
queue.clear();
|
|
138
140
|
expect(queue.size).toBe(0);
|
|
139
141
|
expect(queue.peek()).toBeUndefined();
|
|
140
|
-
expect(queue.
|
|
142
|
+
expect(queue.getLast()).toBeUndefined();
|
|
141
143
|
});
|
|
142
144
|
|
|
143
145
|
it('should clone the queue', () => {
|
|
@@ -147,7 +149,7 @@ describe('Queue', () => {
|
|
|
147
149
|
const clonedQueue = queue.clone();
|
|
148
150
|
expect(clonedQueue.size).toBe(3);
|
|
149
151
|
expect(clonedQueue.peek()).toBe(1);
|
|
150
|
-
expect(clonedQueue.
|
|
152
|
+
expect(clonedQueue.getLast()).toBe(3);
|
|
151
153
|
});
|
|
152
154
|
|
|
153
155
|
it('should handle creating a queue from an array', () => {
|
|
@@ -155,7 +157,7 @@ describe('Queue', () => {
|
|
|
155
157
|
const newQueue = Queue.fromArray(elements);
|
|
156
158
|
expect(newQueue.size).toBe(5);
|
|
157
159
|
expect(newQueue.peek()).toBe(1);
|
|
158
|
-
expect(newQueue.
|
|
160
|
+
expect(newQueue.getLast()).toBe(5);
|
|
159
161
|
});
|
|
160
162
|
|
|
161
163
|
it('should iterate through the queue', () => {
|
|
@@ -209,7 +211,7 @@ describe('Queue Performance Test', () => {
|
|
|
209
211
|
for (let i = 0; i < dataSize; i++) {
|
|
210
212
|
queue.dequeue();
|
|
211
213
|
}
|
|
212
|
-
console.log(`Queue Performance Test: ${performance.now() - startTime} ms`);
|
|
214
|
+
isDebug && console.log(`Queue Performance Test: ${performance.now() - startTime} ms`);
|
|
213
215
|
expect(performance.now() - startTime).toBeLessThan(bigO.LINEAR * 100);
|
|
214
216
|
});
|
|
215
217
|
|