data-structure-typed 1.49.7 → 1.49.9

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.
Files changed (59) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/dist/cjs/data-structures/base/iterable-base.js.map +1 -1
  3. package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
  4. package/dist/cjs/data-structures/binary-tree/binary-tree.js +4 -4
  5. package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
  6. package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
  7. package/dist/cjs/data-structures/binary-tree/rb-tree.js +2 -2
  8. package/dist/cjs/data-structures/binary-tree/rb-tree.js.map +1 -1
  9. package/dist/cjs/data-structures/binary-tree/tree-multimap.js.map +1 -1
  10. package/dist/cjs/data-structures/graph/abstract-graph.js.map +1 -1
  11. package/dist/cjs/data-structures/graph/directed-graph.js.map +1 -1
  12. package/dist/cjs/data-structures/graph/undirected-graph.js.map +1 -1
  13. package/dist/cjs/data-structures/hash/hash-map.d.ts +16 -12
  14. package/dist/cjs/data-structures/hash/hash-map.js +36 -15
  15. package/dist/cjs/data-structures/hash/hash-map.js.map +1 -1
  16. package/dist/cjs/data-structures/heap/heap.js.map +1 -1
  17. package/dist/cjs/data-structures/linked-list/doubly-linked-list.js.map +1 -1
  18. package/dist/cjs/data-structures/linked-list/singly-linked-list.js.map +1 -1
  19. package/dist/cjs/data-structures/queue/deque.js.map +1 -1
  20. package/dist/cjs/data-structures/queue/queue.js.map +1 -1
  21. package/dist/cjs/data-structures/stack/stack.js.map +1 -1
  22. package/dist/cjs/data-structures/trie/trie.js.map +1 -1
  23. package/dist/cjs/types/data-structures/binary-tree/rb-tree.d.ts +1 -1
  24. package/dist/cjs/types/data-structures/hash/hash-map.d.ts +2 -1
  25. package/dist/mjs/data-structures/binary-tree/binary-tree.js +4 -4
  26. package/dist/mjs/data-structures/binary-tree/rb-tree.js +1 -2
  27. package/dist/mjs/data-structures/hash/hash-map.d.ts +16 -12
  28. package/dist/mjs/data-structures/hash/hash-map.js +36 -15
  29. package/dist/mjs/types/data-structures/binary-tree/rb-tree.d.ts +1 -1
  30. package/dist/mjs/types/data-structures/hash/hash-map.d.ts +2 -1
  31. package/dist/umd/data-structure-typed.js +42 -21
  32. package/dist/umd/data-structure-typed.min.js +2 -2
  33. package/dist/umd/data-structure-typed.min.js.map +1 -1
  34. package/package.json +1 -1
  35. package/src/data-structures/base/iterable-base.ts +6 -6
  36. package/src/data-structures/binary-tree/avl-tree.ts +8 -7
  37. package/src/data-structures/binary-tree/binary-tree.ts +12 -11
  38. package/src/data-structures/binary-tree/bst.ts +7 -6
  39. package/src/data-structures/binary-tree/rb-tree.ts +8 -8
  40. package/src/data-structures/binary-tree/tree-multimap.ts +7 -6
  41. package/src/data-structures/graph/abstract-graph.ts +15 -14
  42. package/src/data-structures/graph/directed-graph.ts +7 -6
  43. package/src/data-structures/graph/undirected-graph.ts +7 -6
  44. package/src/data-structures/hash/hash-map.ts +45 -20
  45. package/src/data-structures/heap/heap.ts +1 -1
  46. package/src/data-structures/linked-list/doubly-linked-list.ts +1 -1
  47. package/src/data-structures/linked-list/singly-linked-list.ts +1 -1
  48. package/src/data-structures/queue/deque.ts +3 -3
  49. package/src/data-structures/queue/queue.ts +1 -1
  50. package/src/data-structures/stack/stack.ts +1 -1
  51. package/src/data-structures/trie/trie.ts +1 -1
  52. package/src/types/data-structures/binary-tree/rb-tree.ts +1 -1
  53. package/src/types/data-structures/graph/abstract-graph.ts +8 -8
  54. package/src/types/data-structures/hash/hash-map.ts +2 -1
  55. package/test/integration/index.html +4 -4
  56. package/test/unit/data-structures/binary-tree/overall.test.ts +180 -1
  57. package/test/unit/data-structures/graph/abstract-graph.test.ts +1 -2
  58. package/test/unit/data-structures/hash/hash-map.test.ts +33 -6
  59. package/test/unit/data-structures/queue/deque.test.ts +1 -2
@@ -1,4 +1,4 @@
1
- import { AVLTree, BST } from '../../../../src';
1
+ import { AVLTree, BST, BSTVariant, IterationType, RedBlackTree, TreeMultimap } from '../../../../src';
2
2
 
3
3
  describe('Overall BinaryTree Test', () => {
4
4
  it('should perform various operations on BinaryTree', () => {
@@ -60,4 +60,183 @@ describe('Overall BinaryTree Test', () => {
60
60
  avlTree.isAVLBalanced(); // true
61
61
  expect(avlTree.isAVLBalanced()).toBe(true); // true
62
62
  });
63
+
64
+ it('Should clone a BST works fine', () => {
65
+ const bst = new BST<number>([3, 6, 7, 1, 9], {
66
+ iterationType: IterationType.RECURSIVE,
67
+ variant: BSTVariant.INVERSE,
68
+ extractor: key => key
69
+ });
70
+ expect(bst.size).toBe(5);
71
+ expect(bst.root?.key).toBe(6);
72
+ expect(bst.root?.left?.key).toBe(7);
73
+ expect(bst.root?.left?.left?.key).toBe(9);
74
+ expect(bst.root?.right?.key).toBe(1);
75
+ expect(bst.root?.right?.left?.key).toBe(3);
76
+ expect(bst.getNodeByKey(7)?.left?.key).toBe(9);
77
+ expect(bst.getHeight()).toBe(2);
78
+ expect(bst.has(9)).toBe(true);
79
+ expect(bst.has(7)).toBe(true);
80
+ expect(bst.delete(7)[0].deleted?.key).toBe(7);
81
+ expect(bst.has(7)).toBe(false);
82
+ expect(bst.size).toBe(4);
83
+ expect(bst.root?.key).toBe(6);
84
+ expect(bst.root?.left?.key).toBe(9);
85
+ expect(bst.root?.right?.key).toBe(1);
86
+ expect(bst.root?.right?.left?.key).toBe(3);
87
+ expect(bst.getNodeByKey(6)?.left?.key).toBe(9);
88
+ expect(bst.getHeight()).toBe(2);
89
+ expect(bst.has(9)).toBe(true);
90
+ expect(bst.has(7)).toBe(false);
91
+ expect(bst.bfs()).toEqual([6, 9, 1, 3]);
92
+ const clonedBST = bst.clone();
93
+ expect(clonedBST.size).toBe(4);
94
+ expect(clonedBST.root?.key).toBe(6);
95
+ expect(clonedBST.root?.left?.key).toBe(9);
96
+ expect(clonedBST.root?.right?.key).toBe(1);
97
+ expect(clonedBST.root?.right?.left?.key).toBe(3);
98
+ expect(clonedBST.getNodeByKey(6)?.left?.key).toBe(9);
99
+ expect(clonedBST.getHeight()).toBe(2);
100
+ expect(clonedBST.has(9)).toBe(true);
101
+ expect(clonedBST.has(7)).toBe(false);
102
+ expect(clonedBST.bfs()).toEqual([6, 9, 1, 3]);
103
+ });
104
+
105
+ it('Should clone a AVLTree works fine', () => {
106
+ const avl = new AVLTree<number>([3, 6, 7, 1, 9], {
107
+ iterationType: IterationType.RECURSIVE,
108
+ variant: BSTVariant.INVERSE,
109
+ extractor: key => key
110
+ });
111
+ expect(avl.size).toBe(5);
112
+ avl.add(2);
113
+ avl.add(5);
114
+ avl.add(4);
115
+ expect(avl.root?.key).toBe(3);
116
+ expect(avl.root?.left?.key).toBe(7);
117
+ expect(avl.root?.left?.left?.key).toBe(9);
118
+ expect(avl.root?.right?.key).toBe(1);
119
+ expect(avl.root?.right?.left?.key).toBe(2);
120
+ expect(avl.getNodeByKey(7)?.left?.key).toBe(9);
121
+ expect(avl.getHeight()).toBe(3);
122
+ expect(avl.has(9)).toBe(true);
123
+ expect(avl.has(7)).toBe(true);
124
+ expect(avl.delete(7)[0].deleted?.key).toBe(7);
125
+ expect(avl.has(7)).toBe(false);
126
+ expect(avl.size).toBe(7);
127
+ expect(avl.root?.key).toBe(3);
128
+ expect(avl.root?.left?.key).toBe(5);
129
+ expect(avl.root?.right?.key).toBe(1);
130
+ expect(avl.root?.right?.left?.key).toBe(2);
131
+ expect(avl.getNodeByKey(6)?.left?.key).toBe(undefined);
132
+ expect(avl.getHeight()).toBe(3);
133
+ expect(avl.has(9)).toBe(true);
134
+ expect(avl.has(7)).toBe(false);
135
+ expect(avl.bfs()).toEqual([3, 5, 1, 9, 4, 2, 6]);
136
+ const clonedAVL = avl.clone();
137
+ expect(clonedAVL.size).toBe(7);
138
+ expect(clonedAVL.root?.key).toBe(3);
139
+ expect(clonedAVL.root?.left?.key).toBe(5);
140
+ expect(clonedAVL.root?.right?.key).toBe(1);
141
+ expect(clonedAVL.root?.right?.left?.key).toBe(2);
142
+ expect(clonedAVL.getNodeByKey(6)?.left?.key).toBe(undefined);
143
+ expect(clonedAVL.getHeight()).toBe(3);
144
+ expect(clonedAVL.has(9)).toBe(true);
145
+ expect(clonedAVL.has(7)).toBe(false);
146
+ expect(clonedAVL.bfs()).toEqual([3, 5, 1, 9, 4, 2, 6]);
147
+ });
148
+
149
+ it('Should clone a TreeMultimap works fine', () => {
150
+ const tmm = new TreeMultimap<number>([3, 6, 7, 1, 9], {
151
+ iterationType: IterationType.RECURSIVE,
152
+ variant: BSTVariant.INVERSE,
153
+ extractor: key => key
154
+ });
155
+ expect(tmm.size).toBe(5);
156
+ tmm.add(2);
157
+ tmm.add(2);
158
+ tmm.add(2);
159
+ tmm.add(5);
160
+ tmm.add(4);
161
+ expect(tmm.count).toBe(10);
162
+ expect(tmm.root?.key).toBe(3);
163
+ expect(tmm.root?.left?.key).toBe(7);
164
+ expect(tmm.root?.left?.left?.key).toBe(9);
165
+ expect(tmm.root?.right?.key).toBe(1);
166
+ expect(tmm.root?.right?.left?.key).toBe(2);
167
+ expect(tmm.getNodeByKey(7)?.left?.key).toBe(9);
168
+ expect(tmm.getHeight()).toBe(3);
169
+ expect(tmm.has(9)).toBe(true);
170
+ expect(tmm.has(7)).toBe(true);
171
+ expect(tmm.delete(7)[0].deleted?.key).toBe(7);
172
+ expect(tmm.has(7)).toBe(false);
173
+ expect(tmm.size).toBe(7);
174
+ expect(tmm.count).toBe(9);
175
+ expect(tmm.root?.key).toBe(3);
176
+ expect(tmm.root?.left?.key).toBe(5);
177
+ expect(tmm.root?.right?.key).toBe(1);
178
+ expect(tmm.root?.right?.left?.key).toBe(2);
179
+ expect(tmm.getNodeByKey(6)?.left?.key).toBe(undefined);
180
+ expect(tmm.getHeight()).toBe(3);
181
+ expect(tmm.has(9)).toBe(true);
182
+ expect(tmm.has(7)).toBe(false);
183
+ expect(tmm.bfs()).toEqual([3, 5, 1, 9, 4, 2, 6]);
184
+ const clonedTMM = tmm.clone();
185
+ expect(clonedTMM.size).toBe(7);
186
+ expect(clonedTMM.count).toBe(9);
187
+ expect(clonedTMM.root?.key).toBe(3);
188
+ expect(clonedTMM.root?.left?.key).toBe(5);
189
+ expect(clonedTMM.root?.right?.key).toBe(1);
190
+ expect(clonedTMM.root?.right?.left?.key).toBe(2);
191
+ expect(clonedTMM.getNodeByKey(6)?.left?.key).toBe(undefined);
192
+ expect(clonedTMM.getHeight()).toBe(3);
193
+ expect(clonedTMM.has(9)).toBe(true);
194
+ expect(clonedTMM.has(7)).toBe(false);
195
+ expect(clonedTMM.bfs()).toEqual([3, 5, 1, 9, 4, 2, 6]);
196
+ });
197
+
198
+ it('Should clone a RedBlackTree works fine', () => {
199
+ const rbTree = new RedBlackTree<number>([3, 6, 7, 1, 9], {
200
+ iterationType: IterationType.RECURSIVE,
201
+ extractor: key => key
202
+ });
203
+ expect(rbTree.size).toBe(5);
204
+ rbTree.add(2);
205
+ rbTree.add(2);
206
+ rbTree.add(2);
207
+ rbTree.add(5);
208
+ rbTree.add(4);
209
+ expect(rbTree.root?.key).toBe(3);
210
+ expect(rbTree.root?.left?.key).toBe(1);
211
+ expect(rbTree.root?.left?.left?.key).toBe(NaN);
212
+ expect(rbTree.root?.right?.key).toBe(7);
213
+ expect(rbTree.root?.right?.left?.key).toBe(5);
214
+ expect(rbTree.getNodeByKey(7)?.left?.key).toBe(5);
215
+ expect(rbTree.getHeight()).toBe(4);
216
+ expect(rbTree.has(9)).toBe(true);
217
+ expect(rbTree.has(7)).toBe(true);
218
+ expect(rbTree.delete(7)?.[0]?.deleted?.key).toBe(7);
219
+ expect(rbTree.has(7)).toBe(false);
220
+ expect(rbTree.size).toBe(7);
221
+ expect(rbTree.root?.key).toBe(3);
222
+ expect(rbTree.root?.left?.key).toBe(1);
223
+ expect(rbTree.root?.right?.key).toBe(5);
224
+ expect(rbTree.root?.right?.left?.key).toBe(4);
225
+ expect(rbTree.getNodeByKey(6)?.left?.key).toBe(NaN);
226
+ expect(rbTree.getHeight()).toBe(4);
227
+ expect(rbTree.has(9)).toBe(true);
228
+ expect(rbTree.has(7)).toBe(false);
229
+ expect(rbTree.bfs()).toEqual([3, 1, 5, 2, 4, 9, 6]);
230
+ const clonedRbTree = rbTree.clone();
231
+ expect(clonedRbTree.size).toBe(7);
232
+ expect(clonedRbTree.root?.key).toBe(3);
233
+ expect(clonedRbTree.root?.left?.key).toBe(1);
234
+ expect(clonedRbTree.root?.right?.key).toBe(5);
235
+ expect(clonedRbTree.root?.right?.left?.key).toBe(4);
236
+ expect(clonedRbTree.getNodeByKey(6)?.left?.key).toBe(NaN);
237
+ expect(clonedRbTree.getHeight()).toBe(4);
238
+ expect(clonedRbTree.has(9)).toBe(true);
239
+ expect(clonedRbTree.has(7)).toBe(false);
240
+ expect(clonedRbTree.bfs()).toEqual([3, 1, 5, 2, 4, 9, 6]);
241
+ });
63
242
  });
@@ -85,8 +85,7 @@ class MyGraph<
85
85
  describe('AbstractGraph Operation Test', () => {
86
86
  const myGraph: MyGraph<number, string> = new MyGraph<number, string>();
87
87
 
88
- beforeEach(() => {
89
- });
88
+ beforeEach(() => {});
90
89
  it('should edge cases', function () {
91
90
  myGraph.addVertex('A', 1);
92
91
  myGraph.addVertex('B', 2);
@@ -108,12 +108,39 @@ describe('HashMap Test2', () => {
108
108
  expect(hashMap.get(keyObj)).toBe('objectValue');
109
109
  });
110
110
 
111
- // it('should handle number keys correctly', () => {
112
- // hashMap.set(999, { a: '999Value' });
113
- // hashMap.set('999', {a: '999StrValue'})
114
- // expect(hashMap.get(999)).toEqual({ a: '999Value' });
115
- // expect(hashMap.get('999')).toEqual({ a: '999StrValue' });
116
- // });
111
+ test('Inheritability test', () => {
112
+ class ExtendedHashMap<K, V> extends HashMap<K, V> {
113
+ constructor(
114
+ elements: Iterable<[K, V]> = [],
115
+ options?: {
116
+ hashFn?: (key: K) => string;
117
+ someOtherParam: string;
118
+ }
119
+ ) {
120
+ const { someOtherParam, ...restOptions } = options || {};
121
+ // do something with someOtherParam
122
+ super(elements, restOptions);
123
+ }
124
+ }
125
+
126
+ const eHM = new ExtendedHashMap<string, number>([], { someOtherParam: 'someOtherParam' });
127
+ eHM.set('one', 1);
128
+ expect(eHM.get('one')).toBe(1);
129
+ });
130
+
131
+ test('should raw elements toEntry', () => {
132
+ const rawCollection = [
133
+ { id: 1, name: 'item 1' },
134
+ { id: 2, name: 'item 2' }
135
+ ];
136
+ const hm = new HashMap<number, string, { id: number; name: string }>(rawCollection, {
137
+ toEntryFn: rawElement => [rawElement.id, rawElement.name]
138
+ });
139
+
140
+ expect(hm.has(1)).toBe(true);
141
+ expect(hm.get(2)).toBe('item 2');
142
+ expect(hm.size).toBe(2);
143
+ });
117
144
 
118
145
  it('should update the value for an existing key', () => {
119
146
  hashMap.set('key1', 'value1');
@@ -114,8 +114,7 @@ describe('Deque - Complex Operations', () => {
114
114
  expect([...deque]).toEqual([1, 2, 3]);
115
115
  });
116
116
 
117
- test('shrinkToFit should reduce the memory footprint', () => {
118
- });
117
+ test('shrinkToFit should reduce the memory footprint', () => {});
119
118
  });
120
119
  describe('Deque - Utility Operations', () => {
121
120
  let deque: Deque<number>;