data-structure-typed 1.50.1 → 1.50.3
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 +2 -1
- package/README.md +30 -28
- package/README_zh-CN.md +1 -1
- package/SPECIFICATION.md +56 -0
- package/SPONSOR-zh-CN.md +90 -0
- package/SPONSOR.md +54 -0
- package/benchmark/report.html +13 -13
- package/benchmark/report.json +149 -161
- package/dist/cjs/data-structures/base/iterable-base.d.ts +120 -9
- package/dist/cjs/data-structures/base/iterable-base.js +143 -7
- package/dist/cjs/data-structures/base/iterable-base.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/avl-tree.d.ts +72 -47
- package/dist/cjs/data-structures/binary-tree/avl-tree.js +101 -72
- package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/binary-indexed-tree.d.ts +22 -0
- package/dist/cjs/data-structures/binary-tree/binary-indexed-tree.js +22 -0
- package/dist/cjs/data-structures/binary-tree/binary-indexed-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +244 -199
- package/dist/cjs/data-structures/binary-tree/binary-tree.js +484 -376
- package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/bst.d.ts +92 -79
- package/dist/cjs/data-structures/binary-tree/bst.js +68 -76
- package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/rb-tree.d.ts +127 -57
- package/dist/cjs/data-structures/binary-tree/rb-tree.js +152 -99
- package/dist/cjs/data-structures/binary-tree/rb-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/segment-tree.d.ts +99 -6
- package/dist/cjs/data-structures/binary-tree/segment-tree.js +127 -10
- package/dist/cjs/data-structures/binary-tree/segment-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/tree-multimap.d.ts +72 -58
- package/dist/cjs/data-structures/binary-tree/tree-multimap.js +102 -85
- package/dist/cjs/data-structures/binary-tree/tree-multimap.js.map +1 -1
- package/dist/cjs/data-structures/graph/abstract-graph.d.ts +1 -78
- package/dist/cjs/data-structures/graph/abstract-graph.js +3 -189
- package/dist/cjs/data-structures/graph/abstract-graph.js.map +1 -1
- package/dist/cjs/data-structures/graph/directed-graph.d.ts +73 -0
- package/dist/cjs/data-structures/graph/directed-graph.js +131 -0
- package/dist/cjs/data-structures/graph/directed-graph.js.map +1 -1
- package/dist/cjs/data-structures/graph/map-graph.d.ts +8 -0
- package/dist/cjs/data-structures/graph/map-graph.js +14 -0
- package/dist/cjs/data-structures/graph/map-graph.js.map +1 -1
- package/dist/cjs/data-structures/graph/undirected-graph.d.ts +76 -7
- package/dist/cjs/data-structures/graph/undirected-graph.js +151 -18
- package/dist/cjs/data-structures/graph/undirected-graph.js.map +1 -1
- package/dist/cjs/data-structures/hash/hash-map.d.ts +254 -28
- package/dist/cjs/data-structures/hash/hash-map.js +347 -78
- package/dist/cjs/data-structures/hash/hash-map.js.map +1 -1
- package/dist/cjs/data-structures/heap/heap.d.ts +95 -25
- package/dist/cjs/data-structures/heap/heap.js +95 -26
- package/dist/cjs/data-structures/heap/heap.js.map +1 -1
- package/dist/cjs/data-structures/linked-list/doubly-linked-list.d.ts +126 -63
- package/dist/cjs/data-structures/linked-list/doubly-linked-list.js +141 -77
- 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 +154 -106
- package/dist/cjs/data-structures/linked-list/singly-linked-list.js +164 -115
- package/dist/cjs/data-structures/linked-list/singly-linked-list.js.map +1 -1
- package/dist/cjs/data-structures/linked-list/skip-linked-list.d.ts +63 -36
- package/dist/cjs/data-structures/linked-list/skip-linked-list.js +63 -36
- package/dist/cjs/data-structures/linked-list/skip-linked-list.js.map +1 -1
- package/dist/cjs/data-structures/matrix/matrix.d.ts +35 -4
- package/dist/cjs/data-structures/matrix/matrix.js +50 -11
- package/dist/cjs/data-structures/matrix/matrix.js.map +1 -1
- package/dist/cjs/data-structures/priority-queue/max-priority-queue.d.ts +10 -0
- package/dist/cjs/data-structures/priority-queue/max-priority-queue.js +10 -0
- package/dist/cjs/data-structures/priority-queue/max-priority-queue.js.map +1 -1
- package/dist/cjs/data-structures/priority-queue/min-priority-queue.d.ts +11 -0
- package/dist/cjs/data-structures/priority-queue/min-priority-queue.js +11 -0
- package/dist/cjs/data-structures/priority-queue/min-priority-queue.js.map +1 -1
- package/dist/cjs/data-structures/priority-queue/priority-queue.d.ts +8 -0
- package/dist/cjs/data-structures/priority-queue/priority-queue.js +8 -0
- package/dist/cjs/data-structures/priority-queue/priority-queue.js.map +1 -1
- package/dist/cjs/data-structures/queue/deque.d.ts +139 -35
- package/dist/cjs/data-structures/queue/deque.js +200 -62
- package/dist/cjs/data-structures/queue/deque.js.map +1 -1
- package/dist/cjs/data-structures/queue/queue.d.ts +103 -49
- package/dist/cjs/data-structures/queue/queue.js +111 -49
- package/dist/cjs/data-structures/queue/queue.js.map +1 -1
- package/dist/cjs/data-structures/stack/stack.d.ts +51 -21
- package/dist/cjs/data-structures/stack/stack.js +58 -22
- package/dist/cjs/data-structures/stack/stack.js.map +1 -1
- package/dist/cjs/data-structures/tree/tree.d.ts +57 -3
- package/dist/cjs/data-structures/tree/tree.js +77 -11
- package/dist/cjs/data-structures/tree/tree.js.map +1 -1
- package/dist/cjs/data-structures/trie/trie.d.ts +135 -34
- package/dist/cjs/data-structures/trie/trie.js +153 -33
- package/dist/cjs/data-structures/trie/trie.js.map +1 -1
- package/dist/cjs/types/data-structures/binary-tree/binary-tree.d.ts +1 -1
- package/dist/cjs/types/data-structures/hash/hash-map.d.ts +4 -3
- package/dist/cjs/types/utils/utils.d.ts +1 -0
- package/dist/mjs/data-structures/base/iterable-base.d.ts +120 -9
- package/dist/mjs/data-structures/base/iterable-base.js +143 -7
- package/dist/mjs/data-structures/binary-tree/avl-tree.d.ts +72 -47
- package/dist/mjs/data-structures/binary-tree/avl-tree.js +102 -73
- package/dist/mjs/data-structures/binary-tree/binary-indexed-tree.d.ts +22 -0
- package/dist/mjs/data-structures/binary-tree/binary-indexed-tree.js +22 -0
- package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +244 -199
- package/dist/mjs/data-structures/binary-tree/binary-tree.js +483 -375
- package/dist/mjs/data-structures/binary-tree/bst.d.ts +92 -79
- package/dist/mjs/data-structures/binary-tree/bst.js +68 -76
- package/dist/mjs/data-structures/binary-tree/rb-tree.d.ts +127 -57
- package/dist/mjs/data-structures/binary-tree/rb-tree.js +153 -100
- package/dist/mjs/data-structures/binary-tree/segment-tree.d.ts +99 -6
- package/dist/mjs/data-structures/binary-tree/segment-tree.js +127 -10
- package/dist/mjs/data-structures/binary-tree/tree-multimap.d.ts +72 -58
- package/dist/mjs/data-structures/binary-tree/tree-multimap.js +102 -86
- package/dist/mjs/data-structures/graph/abstract-graph.d.ts +1 -78
- package/dist/mjs/data-structures/graph/abstract-graph.js +3 -188
- package/dist/mjs/data-structures/graph/directed-graph.d.ts +73 -0
- package/dist/mjs/data-structures/graph/directed-graph.js +131 -0
- package/dist/mjs/data-structures/graph/map-graph.d.ts +8 -0
- package/dist/mjs/data-structures/graph/map-graph.js +14 -0
- package/dist/mjs/data-structures/graph/undirected-graph.d.ts +76 -7
- package/dist/mjs/data-structures/graph/undirected-graph.js +152 -19
- package/dist/mjs/data-structures/hash/hash-map.d.ts +254 -28
- package/dist/mjs/data-structures/hash/hash-map.js +353 -84
- package/dist/mjs/data-structures/heap/heap.d.ts +95 -25
- package/dist/mjs/data-structures/heap/heap.js +95 -26
- package/dist/mjs/data-structures/linked-list/doubly-linked-list.d.ts +126 -63
- package/dist/mjs/data-structures/linked-list/doubly-linked-list.js +144 -80
- package/dist/mjs/data-structures/linked-list/singly-linked-list.d.ts +154 -106
- package/dist/mjs/data-structures/linked-list/singly-linked-list.js +166 -117
- package/dist/mjs/data-structures/linked-list/skip-linked-list.d.ts +63 -36
- package/dist/mjs/data-structures/linked-list/skip-linked-list.js +63 -36
- package/dist/mjs/data-structures/matrix/matrix.d.ts +35 -4
- package/dist/mjs/data-structures/matrix/matrix.js +50 -11
- package/dist/mjs/data-structures/priority-queue/max-priority-queue.d.ts +10 -0
- package/dist/mjs/data-structures/priority-queue/max-priority-queue.js +10 -0
- package/dist/mjs/data-structures/priority-queue/min-priority-queue.d.ts +11 -0
- package/dist/mjs/data-structures/priority-queue/min-priority-queue.js +11 -0
- package/dist/mjs/data-structures/priority-queue/priority-queue.d.ts +8 -0
- package/dist/mjs/data-structures/priority-queue/priority-queue.js +8 -0
- package/dist/mjs/data-structures/queue/deque.d.ts +139 -35
- package/dist/mjs/data-structures/queue/deque.js +205 -67
- package/dist/mjs/data-structures/queue/queue.d.ts +103 -49
- package/dist/mjs/data-structures/queue/queue.js +111 -49
- package/dist/mjs/data-structures/stack/stack.d.ts +51 -21
- package/dist/mjs/data-structures/stack/stack.js +58 -22
- package/dist/mjs/data-structures/tree/tree.d.ts +57 -3
- package/dist/mjs/data-structures/tree/tree.js +80 -14
- package/dist/mjs/data-structures/trie/trie.d.ts +135 -34
- package/dist/mjs/data-structures/trie/trie.js +156 -36
- package/dist/mjs/types/data-structures/binary-tree/binary-tree.d.ts +1 -1
- package/dist/mjs/types/data-structures/hash/hash-map.d.ts +4 -3
- package/dist/mjs/types/utils/utils.d.ts +1 -0
- package/dist/umd/data-structure-typed.js +3121 -1583
- package/dist/umd/data-structure-typed.min.js +3 -3
- package/dist/umd/data-structure-typed.min.js.map +1 -1
- package/package.json +61 -55
- package/src/data-structures/base/iterable-base.ts +184 -19
- package/src/data-structures/binary-tree/avl-tree.ts +134 -100
- package/src/data-structures/binary-tree/binary-indexed-tree.ts +22 -0
- package/src/data-structures/binary-tree/binary-tree.ts +674 -671
- package/src/data-structures/binary-tree/bst.ts +127 -136
- package/src/data-structures/binary-tree/rb-tree.ts +199 -166
- package/src/data-structures/binary-tree/segment-tree.ts +145 -11
- package/src/data-structures/binary-tree/tree-multimap.ts +138 -115
- package/src/data-structures/graph/abstract-graph.ts +4 -211
- package/src/data-structures/graph/directed-graph.ts +152 -0
- package/src/data-structures/graph/map-graph.ts +15 -0
- package/src/data-structures/graph/undirected-graph.ts +171 -19
- package/src/data-structures/hash/hash-map.ts +389 -96
- package/src/data-structures/heap/heap.ts +97 -26
- package/src/data-structures/linked-list/doubly-linked-list.ts +156 -83
- package/src/data-structures/linked-list/singly-linked-list.ts +174 -120
- package/src/data-structures/linked-list/skip-linked-list.ts +63 -37
- package/src/data-structures/matrix/matrix.ts +52 -12
- package/src/data-structures/priority-queue/max-priority-queue.ts +10 -0
- package/src/data-structures/priority-queue/min-priority-queue.ts +11 -0
- package/src/data-structures/priority-queue/priority-queue.ts +8 -0
- package/src/data-structures/queue/deque.ts +225 -70
- package/src/data-structures/queue/queue.ts +118 -49
- package/src/data-structures/stack/stack.ts +63 -23
- package/src/data-structures/tree/tree.ts +89 -15
- package/src/data-structures/trie/trie.ts +173 -38
- package/src/types/data-structures/binary-tree/binary-tree.ts +1 -1
- package/src/types/data-structures/hash/hash-map.ts +4 -3
- package/src/types/utils/utils.ts +2 -0
- package/test/performance/data-structures/graph/directed-graph.test.ts +4 -4
- package/test/performance/data-structures/queue/deque.test.ts +26 -25
- package/test/unit/data-structures/binary-tree/avl-tree.test.ts +37 -0
- package/test/unit/data-structures/binary-tree/binary-tree.test.ts +46 -17
- package/test/unit/data-structures/binary-tree/bst.test.ts +65 -1
- package/test/unit/data-structures/binary-tree/rb-tree.test.ts +38 -1
- package/test/unit/data-structures/binary-tree/tree-multimap.test.ts +37 -32
- package/test/unit/data-structures/graph/abstract-graph.test.ts +11 -0
- package/test/unit/data-structures/graph/directed-graph.test.ts +190 -5
- package/test/unit/data-structures/graph/undirected-graph.test.ts +263 -18
- package/test/unit/data-structures/hash/hash-map.test.ts +376 -353
- package/test/unit/data-structures/heap/heap.test.ts +18 -1
- package/test/unit/data-structures/linked-list/doubly-linked-list.test.ts +24 -5
- package/test/unit/data-structures/linked-list/singly-linked-list.test.ts +20 -2
- package/test/unit/data-structures/linked-list/skip-list.test.ts +1 -1
- package/test/unit/data-structures/queue/deque.test.ts +65 -5
- package/test/unit/data-structures/queue/queue.test.ts +24 -5
- package/test/unit/data-structures/stack/stack.test.ts +17 -0
- package/test/unit/data-structures/trie/trie.test.ts +17 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FibonacciHeap, MaxHeap, MinHeap } from '../../../../src';
|
|
1
|
+
import { FibonacciHeap, Heap, MaxHeap, MinHeap } from '../../../../src';
|
|
2
2
|
import { logBigOMetricsWrap } from '../../../utils';
|
|
3
3
|
|
|
4
4
|
describe('Heap Operation Test', () => {
|
|
@@ -26,6 +26,23 @@ describe('Heap Operation Test', () => {
|
|
|
26
26
|
expect(minNumHeap.sort()).toEqual([2, 5, 6, 9]);
|
|
27
27
|
});
|
|
28
28
|
|
|
29
|
+
it('should clone', function () {
|
|
30
|
+
const minNumHeap = new Heap<string>([], { comparator: (a, b) => Number(a) - Number(b) });
|
|
31
|
+
minNumHeap.add('1');
|
|
32
|
+
minNumHeap.add('6');
|
|
33
|
+
minNumHeap.add('2');
|
|
34
|
+
minNumHeap.add('0');
|
|
35
|
+
minNumHeap.add('5');
|
|
36
|
+
minNumHeap.add('9');
|
|
37
|
+
minNumHeap.delete('2');
|
|
38
|
+
expect([...minNumHeap]).toEqual(['0', '1', '9', '6', '5']);
|
|
39
|
+
const cloned = minNumHeap.clone();
|
|
40
|
+
expect([...cloned]).toEqual(['0', '1', '9', '6', '5']);
|
|
41
|
+
minNumHeap.delete('5');
|
|
42
|
+
expect([...minNumHeap]).toEqual(['0', '1', '9', '6']);
|
|
43
|
+
expect([...cloned]).toEqual(['0', '1', '9', '6', '5']);
|
|
44
|
+
});
|
|
45
|
+
|
|
29
46
|
it('should object heap work well', function () {
|
|
30
47
|
const minHeap = new MinHeap<{ a: string; key: number }>([], { comparator: (a, b) => a.key - b.key });
|
|
31
48
|
minHeap.add({ key: 1, a: 'a1' });
|
|
@@ -37,8 +37,27 @@ describe('DoublyLinkedList Operation Test', () => {
|
|
|
37
37
|
expect(list.tail?.value).toBe(4);
|
|
38
38
|
});
|
|
39
39
|
|
|
40
|
+
it('should clone', function () {
|
|
41
|
+
const dList = new DoublyLinkedList<string>();
|
|
42
|
+
dList.addLast('1');
|
|
43
|
+
dList.addLast('6');
|
|
44
|
+
dList.addLast('2');
|
|
45
|
+
dList.addLast('0');
|
|
46
|
+
dList.addLast('5');
|
|
47
|
+
dList.addLast('9');
|
|
48
|
+
dList.delete('2');
|
|
49
|
+
expect([...dList]).toEqual(['1', '6', '0', '5', '9']);
|
|
50
|
+
const cloned = dList.clone();
|
|
51
|
+
expect([...cloned]).toEqual(['1', '6', '0', '5', '9']);
|
|
52
|
+
dList.delete('5');
|
|
53
|
+
expect([...dList]).toEqual(['1', '6', '0', '9']);
|
|
54
|
+
expect([...cloned]).toEqual(['1', '6', '0', '5', '9']);
|
|
55
|
+
});
|
|
56
|
+
|
|
40
57
|
it('should find undefined', () => {
|
|
41
58
|
expect(list.find(value => value === 6)).toBe(undefined);
|
|
59
|
+
expect(list.find(value => value === 4)).toBe(4);
|
|
60
|
+
expect(list.find(value => value === 3)).toBe(3);
|
|
42
61
|
});
|
|
43
62
|
|
|
44
63
|
it('should indexOf -1', () => {
|
|
@@ -99,19 +118,19 @@ describe('DoublyLinkedList Operation Test', () => {
|
|
|
99
118
|
// Inserting at the beginning
|
|
100
119
|
list.addAt(0, 0);
|
|
101
120
|
expect(list.size).toBe(4);
|
|
102
|
-
expect(list.
|
|
103
|
-
expect(list.
|
|
121
|
+
expect(list.at(0)).toBe(0);
|
|
122
|
+
expect(list.at(1)).toBe(1);
|
|
104
123
|
|
|
105
124
|
// Inserting in the middle
|
|
106
125
|
list.addAt(2, 1.5);
|
|
107
126
|
expect(list.size).toBe(5);
|
|
108
|
-
expect(list.
|
|
109
|
-
expect(list.
|
|
127
|
+
expect(list.at(2)).toBe(1.5);
|
|
128
|
+
expect(list.at(3)).toBe(2);
|
|
110
129
|
|
|
111
130
|
// Inserting at the end
|
|
112
131
|
list.addAt(5, 4);
|
|
113
132
|
expect(list.size).toBe(6);
|
|
114
|
-
expect(list.
|
|
133
|
+
expect(list.at(5)).toBe(4);
|
|
115
134
|
expect(list.tail!.value).toBe(4);
|
|
116
135
|
});
|
|
117
136
|
|
|
@@ -72,14 +72,14 @@ describe('SinglyLinkedList Operation Test', () => {
|
|
|
72
72
|
list.push(1);
|
|
73
73
|
list.push(2);
|
|
74
74
|
list.push(3);
|
|
75
|
-
const element = list.
|
|
75
|
+
const element = list.at(1);
|
|
76
76
|
expect(element).toBe(2);
|
|
77
77
|
expect(list.getNodeAt(2)?.value).toBe(3);
|
|
78
78
|
});
|
|
79
79
|
|
|
80
80
|
it('should return undefined for an out-of-bounds index', () => {
|
|
81
81
|
list.push(1);
|
|
82
|
-
const element = list.
|
|
82
|
+
const element = list.at(1);
|
|
83
83
|
expect(element).toBeUndefined();
|
|
84
84
|
});
|
|
85
85
|
});
|
|
@@ -327,6 +327,7 @@ describe('SinglyLinkedList Operation Test', () => {
|
|
|
327
327
|
list.push(3);
|
|
328
328
|
const result = list.find(data => data % 2 === 0);
|
|
329
329
|
expect(result).toBe(2);
|
|
330
|
+
expect(list.find(value => value === 3)).toBe(3);
|
|
330
331
|
});
|
|
331
332
|
|
|
332
333
|
it('should return undefined if element is not found', () => {
|
|
@@ -347,6 +348,23 @@ describe('SinglyLinkedList Operation Test', () => {
|
|
|
347
348
|
});
|
|
348
349
|
});
|
|
349
350
|
|
|
351
|
+
it('should clone', function () {
|
|
352
|
+
const sList = new SinglyLinkedList<string>();
|
|
353
|
+
sList.addLast('1');
|
|
354
|
+
sList.addLast('6');
|
|
355
|
+
sList.addLast('2');
|
|
356
|
+
sList.addLast('0');
|
|
357
|
+
sList.addLast('5');
|
|
358
|
+
sList.addLast('9');
|
|
359
|
+
sList.delete('2');
|
|
360
|
+
expect([...sList]).toEqual(['1', '6', '0', '5', '9']);
|
|
361
|
+
const cloned = sList.clone();
|
|
362
|
+
expect([...cloned]).toEqual(['1', '6', '0', '5', '9']);
|
|
363
|
+
sList.delete('5');
|
|
364
|
+
expect([...sList]).toEqual(['1', '6', '0', '9']);
|
|
365
|
+
expect([...cloned]).toEqual(['1', '6', '0', '5', '9']);
|
|
366
|
+
});
|
|
367
|
+
|
|
350
368
|
describe('countOccurrences', () => {
|
|
351
369
|
it('should count occurrences of a value', () => {
|
|
352
370
|
list.push(1);
|
|
@@ -40,14 +40,42 @@ describe('Deque - Basic Operations', () => {
|
|
|
40
40
|
expect(deque.isEmpty()).toBeTruthy();
|
|
41
41
|
});
|
|
42
42
|
|
|
43
|
-
test('
|
|
44
|
-
expect(deque.
|
|
45
|
-
expect(deque.
|
|
43
|
+
test('at should retrieve the correct element', () => {
|
|
44
|
+
expect(deque.at(0)).toBe(1);
|
|
45
|
+
expect(deque.at(1)).toBe(2);
|
|
46
46
|
});
|
|
47
47
|
|
|
48
48
|
test('setAt should set the correct element', () => {
|
|
49
49
|
deque.setAt(0, 3);
|
|
50
|
-
expect(deque.
|
|
50
|
+
expect(deque.at(0)).toBe(3);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it('should clone', function () {
|
|
54
|
+
const deque = new Deque<string>();
|
|
55
|
+
deque.addLast('1');
|
|
56
|
+
deque.addLast('6');
|
|
57
|
+
deque.addLast('2');
|
|
58
|
+
deque.addLast('0');
|
|
59
|
+
deque.addLast('5');
|
|
60
|
+
deque.addLast('9');
|
|
61
|
+
expect(deque.size).toBe(6);
|
|
62
|
+
deque.delete('2');
|
|
63
|
+
expect(deque.size).toBe(5);
|
|
64
|
+
expect([...deque]).toEqual(['1', '6', '0', '5', '9']);
|
|
65
|
+
const cloned = deque.clone();
|
|
66
|
+
expect([...cloned]).toEqual(['1', '6', '0', '5', '9']);
|
|
67
|
+
expect(deque.size).toBe(5);
|
|
68
|
+
deque.delete('5');
|
|
69
|
+
expect(deque.size).toBe(4);
|
|
70
|
+
expect([...deque]).toEqual(['1', '6', '0', '9']);
|
|
71
|
+
expect([...cloned]).toEqual(['1', '6', '0', '5', '9']);
|
|
72
|
+
expect(cloned.size).toBe(5);
|
|
73
|
+
cloned.addLast('8');
|
|
74
|
+
expect(cloned.size).toBe(6);
|
|
75
|
+
cloned.delete('6');
|
|
76
|
+
expect(cloned.size).toBe(5);
|
|
77
|
+
cloned.delete('6');
|
|
78
|
+
expect(cloned.size).toBe(5);
|
|
51
79
|
});
|
|
52
80
|
});
|
|
53
81
|
describe('Deque - Complex Operations', () => {
|
|
@@ -68,8 +96,40 @@ describe('Deque - Complex Operations', () => {
|
|
|
68
96
|
deque.push(1);
|
|
69
97
|
deque.push(2);
|
|
70
98
|
deque.push(3);
|
|
71
|
-
deque.
|
|
99
|
+
expect(deque.size).toBe(3);
|
|
100
|
+
deque.cut(1, true);
|
|
101
|
+
expect(deque.size).toBe(2);
|
|
72
102
|
expect(deque.toArray()).toEqual([1, 2]);
|
|
103
|
+
|
|
104
|
+
const dq1 = new Deque([1, 2, 3, 4, 5, 6, 7]);
|
|
105
|
+
expect(dq1.size).toBe(7);
|
|
106
|
+
expect([...dq1.cut(3, true)]).toEqual([1, 2, 3, 4]);
|
|
107
|
+
expect(dq1.size).toBe(4);
|
|
108
|
+
expect([...dq1]).toEqual([1, 2, 3, 4]);
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
test('cutRest should remove elements after the specified position', () => {
|
|
112
|
+
deque.push(1);
|
|
113
|
+
deque.push(2);
|
|
114
|
+
deque.push(3);
|
|
115
|
+
deque.cutRest(1, true);
|
|
116
|
+
expect(deque.toArray()).toEqual([2, 3]);
|
|
117
|
+
|
|
118
|
+
const dq = new Deque([1, 2, 3, 4, 5, 6, 7]);
|
|
119
|
+
expect([...dq.cutRest(3, true)]).toEqual([4, 5, 6, 7]);
|
|
120
|
+
expect([...dq]).toEqual([4, 5, 6, 7]);
|
|
121
|
+
|
|
122
|
+
const deque1 = new Deque<number>();
|
|
123
|
+
|
|
124
|
+
deque1.push(1);
|
|
125
|
+
deque1.push(2);
|
|
126
|
+
deque1.push(3);
|
|
127
|
+
expect(deque1.toArray()).toEqual([1, 2, 3]);
|
|
128
|
+
expect(deque1.cutRest(1).toArray()).toEqual([2, 3]);
|
|
129
|
+
|
|
130
|
+
const dq1 = new Deque([1, 2, 3, 4, 5, 6, 7]);
|
|
131
|
+
expect([...dq1.cutRest(3)]).toEqual([4, 5, 6, 7]);
|
|
132
|
+
expect([...dq1]).toEqual([1, 2, 3, 4, 5, 6, 7]);
|
|
73
133
|
});
|
|
74
134
|
|
|
75
135
|
test('deleteAt should remove the element at the specified position', () => {
|
|
@@ -89,6 +89,25 @@ describe('Queue', () => {
|
|
|
89
89
|
}
|
|
90
90
|
expect(queue.isEmpty()).toBeTruthy();
|
|
91
91
|
});
|
|
92
|
+
|
|
93
|
+
it('should clone', function () {
|
|
94
|
+
const queue = new Queue<string>();
|
|
95
|
+
queue.push('1');
|
|
96
|
+
queue.push('6');
|
|
97
|
+
queue.push('2');
|
|
98
|
+
queue.push('0');
|
|
99
|
+
queue.push('5');
|
|
100
|
+
queue.push('9');
|
|
101
|
+
queue.delete('2');
|
|
102
|
+
expect([...queue]).toEqual(['1', '6', '0', '5', '9']);
|
|
103
|
+
const cloned = queue.clone();
|
|
104
|
+
expect([...cloned]).toEqual(['1', '6', '0', '5', '9']);
|
|
105
|
+
queue.delete('5');
|
|
106
|
+
expect([...queue]).toEqual(['1', '6', '0', '9']);
|
|
107
|
+
queue.deleteAt(2);
|
|
108
|
+
expect([...queue]).toEqual(['1', '6', '9']);
|
|
109
|
+
expect([...cloned]).toEqual(['1', '6', '0', '5', '9']);
|
|
110
|
+
});
|
|
92
111
|
});
|
|
93
112
|
|
|
94
113
|
describe('Queue - Advanced Methods', () => {
|
|
@@ -156,17 +175,17 @@ describe('Queue - Additional Methods', () => {
|
|
|
156
175
|
expect(queue.peekLast()).toBeUndefined();
|
|
157
176
|
});
|
|
158
177
|
|
|
159
|
-
test('
|
|
178
|
+
test('at should return the element at the specified index', () => {
|
|
160
179
|
queue.push(1);
|
|
161
180
|
queue.push(2);
|
|
162
181
|
queue.push(3);
|
|
163
|
-
expect(queue.
|
|
182
|
+
expect(queue.at(1)).toBe(2);
|
|
164
183
|
});
|
|
165
184
|
|
|
166
|
-
test('
|
|
185
|
+
test('at should return undefined for an invalid index', () => {
|
|
167
186
|
queue.push(1);
|
|
168
|
-
expect(queue.
|
|
169
|
-
expect(queue.
|
|
187
|
+
expect(queue.at(3)).toBeUndefined();
|
|
188
|
+
expect(queue.at(-1)).toBeUndefined();
|
|
170
189
|
});
|
|
171
190
|
|
|
172
191
|
test('print should not throw any errors', () => {
|
|
@@ -35,6 +35,23 @@ describe('Stack', () => {
|
|
|
35
35
|
expect(stack.size).toBe(2);
|
|
36
36
|
});
|
|
37
37
|
|
|
38
|
+
it('should clone', function () {
|
|
39
|
+
const stack = new Stack<string>();
|
|
40
|
+
stack.push('1');
|
|
41
|
+
stack.push('6');
|
|
42
|
+
stack.push('2');
|
|
43
|
+
stack.push('0');
|
|
44
|
+
stack.push('5');
|
|
45
|
+
stack.push('9');
|
|
46
|
+
stack.delete('2');
|
|
47
|
+
expect([...stack]).toEqual(['1', '6', '0', '5', '9']);
|
|
48
|
+
const cloned = stack.clone();
|
|
49
|
+
expect([...cloned]).toEqual(['1', '6', '0', '5', '9']);
|
|
50
|
+
stack.delete('5');
|
|
51
|
+
expect([...stack]).toEqual(['1', '6', '0', '9']);
|
|
52
|
+
expect([...cloned]).toEqual(['1', '6', '0', '5', '9']);
|
|
53
|
+
});
|
|
54
|
+
|
|
38
55
|
it('should return undefined when popping from an empty stack', () => {
|
|
39
56
|
const poppedElement = stack.pop();
|
|
40
57
|
expect(poppedElement).toBe(undefined);
|
|
@@ -56,6 +56,23 @@ describe('Trie', () => {
|
|
|
56
56
|
expect(trie.hasPrefix('banana')).toBe(false);
|
|
57
57
|
});
|
|
58
58
|
|
|
59
|
+
it('should clone', function () {
|
|
60
|
+
const trie = new Trie();
|
|
61
|
+
trie.add('1');
|
|
62
|
+
trie.add('6');
|
|
63
|
+
trie.add('2');
|
|
64
|
+
trie.add('0');
|
|
65
|
+
trie.add('5');
|
|
66
|
+
trie.add('9');
|
|
67
|
+
trie.delete('2');
|
|
68
|
+
expect([...trie]).toEqual(['1', '6', '0', '5', '9']);
|
|
69
|
+
const cloned = trie.clone();
|
|
70
|
+
expect([...cloned]).toEqual(['1', '6', '0', '5', '9']);
|
|
71
|
+
trie.delete('5');
|
|
72
|
+
expect([...trie]).toEqual(['1', '6', '0', '9']);
|
|
73
|
+
expect([...cloned]).toEqual(['1', '6', '0', '5', '9']);
|
|
74
|
+
});
|
|
75
|
+
|
|
59
76
|
it('should check if a string is a common prefix', () => {
|
|
60
77
|
const trie = new Trie();
|
|
61
78
|
trie.add('apple');
|