data-structure-typed 1.50.6 → 1.50.8

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 (57) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +27 -24
  3. package/benchmark/report.html +1 -37
  4. package/benchmark/report.json +17 -395
  5. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +2 -2
  6. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js +6 -4
  7. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
  8. package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
  9. package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +3 -3
  10. package/dist/cjs/data-structures/binary-tree/binary-tree.js +36 -33
  11. package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
  12. package/dist/cjs/data-structures/binary-tree/bst.d.ts +7 -5
  13. package/dist/cjs/data-structures/binary-tree/bst.js +68 -47
  14. package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
  15. package/dist/cjs/data-structures/binary-tree/rb-tree.d.ts +2 -8
  16. package/dist/cjs/data-structures/binary-tree/rb-tree.js +7 -17
  17. package/dist/cjs/data-structures/binary-tree/rb-tree.js.map +1 -1
  18. package/dist/cjs/data-structures/binary-tree/tree-multi-map.d.ts +1 -2
  19. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js +1 -1
  20. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js.map +1 -1
  21. package/dist/cjs/types/common.d.ts +5 -22
  22. package/dist/cjs/types/common.js +0 -33
  23. package/dist/cjs/types/common.js.map +1 -1
  24. package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +2 -2
  25. package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.js +6 -4
  26. package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +3 -3
  27. package/dist/mjs/data-structures/binary-tree/binary-tree.js +36 -33
  28. package/dist/mjs/data-structures/binary-tree/bst.d.ts +7 -5
  29. package/dist/mjs/data-structures/binary-tree/bst.js +68 -47
  30. package/dist/mjs/data-structures/binary-tree/rb-tree.d.ts +2 -8
  31. package/dist/mjs/data-structures/binary-tree/rb-tree.js +7 -17
  32. package/dist/mjs/data-structures/binary-tree/tree-multi-map.d.ts +1 -2
  33. package/dist/mjs/data-structures/binary-tree/tree-multi-map.js +2 -2
  34. package/dist/mjs/types/common.d.ts +5 -22
  35. package/dist/mjs/types/common.js +1 -32
  36. package/dist/umd/data-structure-typed.js +112 -138
  37. package/dist/umd/data-structure-typed.min.js +2 -2
  38. package/dist/umd/data-structure-typed.min.js.map +1 -1
  39. package/package.json +6 -6
  40. package/src/data-structures/binary-tree/avl-tree-multi-map.ts +8 -5
  41. package/src/data-structures/binary-tree/avl-tree.ts +1 -1
  42. package/src/data-structures/binary-tree/binary-tree.ts +35 -36
  43. package/src/data-structures/binary-tree/bst.ts +67 -44
  44. package/src/data-structures/binary-tree/rb-tree.ts +11 -22
  45. package/src/data-structures/binary-tree/tree-multi-map.ts +2 -2
  46. package/src/types/common.ts +6 -23
  47. package/test/integration/all-in-one.test.ts +2 -2
  48. package/test/integration/avl-tree.test.ts +1 -1
  49. package/test/integration/bst.test.ts +2 -2
  50. package/test/performance/data-structures/binary-tree/rb-tree.test.ts +13 -22
  51. package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +12 -17
  52. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +4 -4
  53. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +118 -65
  54. package/test/unit/data-structures/binary-tree/bst.test.ts +12 -12
  55. package/test/unit/data-structures/binary-tree/overall.test.ts +7 -7
  56. package/test/unit/data-structures/binary-tree/rb-tree.test.ts +272 -267
  57. package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +249 -245
@@ -1,12 +1,4 @@
1
- import {
2
- BinaryTreeNode,
3
- BSTNode,
4
- CP,
5
- IterationType,
6
- RedBlackTreeNode,
7
- TreeMultiMap,
8
- TreeMultiMapNode
9
- } from '../../../../src';
1
+ import { BinaryTreeNode, BSTNode, RedBlackTreeNode, TreeMultiMap, TreeMultiMapNode } from '../../../../src';
10
2
  import { isDebugTest } from '../../../config';
11
3
  import { getRandomInt } from '../../../utils';
12
4
 
@@ -14,12 +6,13 @@ const isDebug = isDebugTest;
14
6
  // const isDebug = true;
15
7
 
16
8
  describe('TreeMultiMap count', () => {
17
- let tm: TreeMultiMap<number>;
9
+ let tmm: TreeMultiMap<number>;
18
10
  beforeEach(() => {
19
- tm = new TreeMultiMap<number>();
11
+ tmm = new TreeMultiMap<number>();
20
12
  });
21
- it('Should added isolated node count ', () => {
22
- tm.addMany([
13
+
14
+ it('Should added node count ', () => {
15
+ tmm.addMany([
23
16
  [1, 1],
24
17
  [2, 2],
25
18
  [3, 3],
@@ -27,35 +20,45 @@ describe('TreeMultiMap count', () => {
27
20
  [5, 5]
28
21
  ]);
29
22
  const newNode = new TreeMultiMapNode(3, 33, 10);
30
- tm.add(newNode);
31
- expect(tm.count).toBe(15);
32
- expect(tm.getMutableCount()).toBe(15);
33
- expect(tm.getNode(3)?.count).toBe(11);
23
+ tmm.add(newNode);
24
+ expect(tmm.count).toBe(15);
25
+ expect(tmm.getMutableCount()).toBe(15);
26
+ expect(tmm.getNode(3)?.count).toBe(11);
34
27
  });
35
28
 
36
29
  it('Should count', () => {
37
- tm.addMany([
30
+ tmm.addMany([
38
31
  [1, 1],
39
32
  [2, 2],
40
33
  [3, 3]
41
34
  ]);
42
- tm.lesserOrGreaterTraverse(node => (node.count += 2), CP.gt, 1);
43
- expect(tm.getMutableCount()).toBe(7);
44
- expect(tm.count).toBe(3);
35
+ tmm.lesserOrGreaterTraverse(node => (node.count += 2), 'GT', 1);
36
+ expect(tmm.getMutableCount()).toBe(7);
37
+ expect(tmm.count).toBe(3);
45
38
  });
46
39
  });
47
40
 
48
41
  describe('TreeMultiMap operations test1', () => {
42
+ it('should height ', () => {
43
+ const tmm = new TreeMultiMap();
44
+ expect(tmm.getHeight()).toBe(-1);
45
+ expect(tmm.getMinHeight()).toBe(-1);
46
+
47
+ tmm.addMany([1, 6, 7, 2, 3, 4, 9, 11, 8, 5, 10, 12, 16, 14, 13, 15]);
48
+ expect(tmm.getHeight()).toBe(5);
49
+ expect(tmm.getMinHeight()).toBe(2);
50
+ });
51
+
49
52
  it('should size and count', () => {
50
- const treeMultiMap = new TreeMultiMap();
53
+ const tmm = new TreeMultiMap();
51
54
 
52
- expect(treeMultiMap instanceof TreeMultiMap);
55
+ expect(tmm instanceof TreeMultiMap);
53
56
 
54
- treeMultiMap.add([11, 11]);
55
- treeMultiMap.add([3, 3]);
56
- expect(treeMultiMap.count).toBe(2);
57
- expect(treeMultiMap.getMutableCount()).toBe(2);
58
- expect(treeMultiMap.size).toBe(2);
57
+ tmm.add([11, 11]);
58
+ tmm.add([3, 3]);
59
+ expect(tmm.count).toBe(2);
60
+ expect(tmm.getMutableCount()).toBe(2);
61
+ expect(tmm.size).toBe(2);
59
62
 
60
63
  const keyValuePairs: [number, number][] = [
61
64
  [11, 11],
@@ -76,25 +79,25 @@ describe('TreeMultiMap operations test1', () => {
76
79
  [5, 5]
77
80
  ];
78
81
 
79
- treeMultiMap.addMany(keyValuePairs);
80
- expect(treeMultiMap.size).toBe(16);
81
- expect(treeMultiMap.count).toBe(18);
82
- expect(treeMultiMap.getMutableCount()).toBe(18);
83
- treeMultiMap.delete(11);
84
- expect(treeMultiMap.count).toBe(17);
85
- expect(treeMultiMap.getMutableCount()).toBe(17);
86
- treeMultiMap.delete(3, undefined, true);
87
- expect(treeMultiMap.count).toBe(15);
88
- expect(treeMultiMap.getMutableCount()).toBe(15);
82
+ tmm.addMany(keyValuePairs);
83
+ expect(tmm.size).toBe(16);
84
+ expect(tmm.count).toBe(18);
85
+ expect(tmm.getMutableCount()).toBe(18);
86
+ tmm.delete(11);
87
+ expect(tmm.count).toBe(17);
88
+ expect(tmm.getMutableCount()).toBe(17);
89
+ tmm.delete(3, undefined, true);
90
+ expect(tmm.count).toBe(15);
91
+ expect(tmm.getMutableCount()).toBe(15);
89
92
  });
90
93
 
91
94
  it('should perform various operations on a Binary Search Tree with numeric values1', () => {
92
- const treeMultiMap = new TreeMultiMap();
95
+ const tmm = new TreeMultiMap();
93
96
 
94
- expect(treeMultiMap instanceof TreeMultiMap);
97
+ expect(tmm instanceof TreeMultiMap);
95
98
 
96
- treeMultiMap.add([11, 11]);
97
- treeMultiMap.add([3, 3]);
99
+ tmm.add([11, 11]);
100
+ tmm.add([3, 3]);
98
101
  const idAndValues: [number, number][] = [
99
102
  [11, 11],
100
103
  [3, 3],
@@ -113,201 +116,200 @@ describe('TreeMultiMap operations test1', () => {
113
116
  [10, 10],
114
117
  [5, 5]
115
118
  ];
116
- treeMultiMap.addMany(idAndValues);
117
- expect(treeMultiMap.root instanceof TreeMultiMapNode);
119
+ tmm.addMany(idAndValues);
120
+ expect(tmm.root instanceof TreeMultiMapNode);
118
121
 
119
- if (treeMultiMap.root) expect(treeMultiMap.root.key == 11);
122
+ if (tmm.root) expect(tmm.root.key == 11);
120
123
 
121
- expect(treeMultiMap.size).toBe(16);
122
- expect(treeMultiMap.count).toBe(18);
123
- expect(treeMultiMap.getMutableCount()).toBe(18);
124
+ expect(tmm.size).toBe(16);
125
+ expect(tmm.count).toBe(18);
126
+ expect(tmm.getMutableCount()).toBe(18);
124
127
 
125
- expect(treeMultiMap.has(6));
126
- isDebug && treeMultiMap.print();
127
- expect(treeMultiMap.getHeight(6)).toBe(1);
128
- expect(treeMultiMap.getDepth(6)).toBe(3);
129
- const nodeId10 = treeMultiMap.getNode(10);
128
+ expect(tmm.has(6));
129
+ isDebug && tmm.print();
130
+ expect(tmm.getHeight(6)).toBe(1);
131
+ expect(tmm.getDepth(6)).toBe(3);
132
+ const nodeId10 = tmm.getNode(10);
130
133
  expect(nodeId10?.key).toBe(10);
131
134
 
132
- const nodeVal9 = treeMultiMap.getNode(9, node => node.value);
135
+ const nodeVal9 = tmm.getNode(9, node => node.value);
133
136
  expect(nodeVal9?.key).toBe(9);
134
137
 
135
- const nodesByCount1 = treeMultiMap.getNodes(1, node => node.count);
138
+ const nodesByCount1 = tmm.getNodes(1, node => node.count);
136
139
  expect(nodesByCount1.length).toBe(14);
137
140
 
138
- const nodesByCount2 = treeMultiMap.getNodes(2, node => node.count);
141
+ const nodesByCount2 = tmm.getNodes(2, node => node.count);
139
142
  expect(nodesByCount2.length).toBe(2);
140
- const leftMost = treeMultiMap.getLeftMost();
143
+ const leftMost = tmm.getLeftMost();
141
144
  expect(leftMost?.key).toBe(1);
142
145
 
143
- const node15 = treeMultiMap.getNode(15);
144
- const minNodeBySpecificNode = node15 && treeMultiMap.getLeftMost(node15);
146
+ const node15 = tmm.getNode(15);
147
+ const minNodeBySpecificNode = node15 && tmm.getLeftMost(node15);
145
148
  expect(minNodeBySpecificNode?.key).toBe(14);
146
149
 
147
150
  let subTreeSum = 0;
148
- node15 && treeMultiMap.dfs(node => (subTreeSum += node.key), 'pre', 15);
151
+ node15 && tmm.dfs(node => (subTreeSum += node.key), 'pre', 15);
149
152
  expect(subTreeSum).toBe(45);
150
153
  let lesserSum = 0;
151
- treeMultiMap.lesserOrGreaterTraverse((node: TreeMultiMapNode<number>) => (lesserSum += node.key), CP.lt, 10);
154
+ tmm.lesserOrGreaterTraverse((node: TreeMultiMapNode<number>) => (lesserSum += node.key), 'LT', 10);
152
155
  expect(lesserSum).toBe(45);
153
156
 
154
157
  expect(node15 instanceof TreeMultiMapNode);
155
158
  if (node15 instanceof TreeMultiMapNode) {
156
- const subTreeAdd = treeMultiMap.dfs(node => (node.count += 1), 'pre', 15);
159
+ const subTreeAdd = tmm.dfs(node => (node.count += 1), 'pre', 15);
157
160
  expect(subTreeAdd);
158
161
  }
159
- const node11 = treeMultiMap.getNode(11);
162
+ const node11 = tmm.getNode(11);
160
163
  expect(node11 instanceof TreeMultiMapNode);
161
164
  if (node11 instanceof TreeMultiMapNode) {
162
- const allGreaterNodesAdded = treeMultiMap.lesserOrGreaterTraverse(node => (node.count += 2), CP.gt, 11);
165
+ const allGreaterNodesAdded = tmm.lesserOrGreaterTraverse(node => (node.count += 2), 'GT', 11);
163
166
  expect(allGreaterNodesAdded);
164
167
  }
165
168
 
166
- const dfsInorderNodes = treeMultiMap.dfs(node => node, 'in');
169
+ const dfsInorderNodes = tmm.dfs(node => node, 'in');
167
170
  expect(dfsInorderNodes[0].key).toBe(1);
168
171
  expect(dfsInorderNodes[dfsInorderNodes.length - 1].key).toBe(16);
172
+ expect(tmm.isPerfectlyBalanced()).toBe(false);
173
+ tmm.perfectlyBalance();
174
+ expect(tmm.isPerfectlyBalanced()).toBe(false);
169
175
 
170
- expect(treeMultiMap.isPerfectlyBalanced()).toBe(true);
171
- treeMultiMap.perfectlyBalance();
172
- expect(treeMultiMap.isPerfectlyBalanced()).toBe(false);
176
+ expect(tmm.isAVLBalanced()).toBe(false);
173
177
 
174
- expect(treeMultiMap.isAVLBalanced()).toBe(false);
175
-
176
- const bfsNodesAfterBalanced = treeMultiMap.bfs(node => node);
178
+ const bfsNodesAfterBalanced = tmm.bfs(node => node);
177
179
  expect(bfsNodesAfterBalanced[0].key).toBe(6);
178
180
  expect(bfsNodesAfterBalanced[bfsNodesAfterBalanced.length - 1].key).toBe(16);
179
181
 
180
- const removed11 = treeMultiMap.delete(11, undefined, true);
182
+ const removed11 = tmm.delete(11, undefined, true);
181
183
  expect(removed11 instanceof Array);
182
184
  expect(removed11[0]);
183
185
  expect(removed11[0].deleted);
184
186
 
185
187
  if (removed11[0].deleted) expect(removed11[0].deleted.key).toBe(11);
186
188
 
187
- expect(treeMultiMap.isAVLBalanced()).toBe(false);
189
+ expect(tmm.isAVLBalanced()).toBe(false);
188
190
 
189
- expect(treeMultiMap.getHeight(15)).toBe(1);
191
+ expect(tmm.getHeight(15)).toBe(1);
190
192
 
191
- const removed1 = treeMultiMap.delete(1, undefined, true);
193
+ const removed1 = tmm.delete(1, undefined, true);
192
194
  expect(removed1 instanceof Array);
193
195
  expect(removed1[0]);
194
196
  expect(removed1[0].deleted);
195
197
  if (removed1[0].deleted) expect(removed1[0].deleted.key).toBe(1);
196
198
 
197
- expect(treeMultiMap.isAVLBalanced()).toBe(false);
199
+ expect(tmm.isAVLBalanced()).toBe(false);
198
200
 
199
- expect(treeMultiMap.getHeight()).toBe(5);
201
+ expect(tmm.getHeight()).toBe(5);
200
202
 
201
- const removed4 = treeMultiMap.delete(4, undefined, true);
203
+ const removed4 = tmm.delete(4, undefined, true);
202
204
  expect(removed4 instanceof Array);
203
205
  expect(removed4[0]);
204
206
  expect(removed4[0].deleted);
205
207
  if (removed4[0].deleted) expect(removed4[0].deleted.key).toBe(4);
206
208
 
207
- expect(treeMultiMap.isAVLBalanced()).toBe(false);
208
- expect(treeMultiMap.getHeight()).toBe(5);
209
+ expect(tmm.isAVLBalanced()).toBe(false);
210
+ expect(tmm.getHeight()).toBe(5);
209
211
 
210
- const removed10 = treeMultiMap.delete(10, undefined, true);
212
+ const removed10 = tmm.delete(10, undefined, true);
211
213
  expect(removed10 instanceof Array);
212
214
  expect(removed10[0]);
213
215
  expect(removed10[0].deleted);
214
216
  if (removed10[0].deleted) expect(removed10[0].deleted.key).toBe(10);
215
- expect(treeMultiMap.isAVLBalanced()).toBe(false);
217
+ expect(tmm.isAVLBalanced()).toBe(false);
216
218
 
217
- expect(treeMultiMap.getHeight()).toBe(4);
219
+ expect(tmm.getHeight()).toBe(4);
218
220
 
219
- const removed15 = treeMultiMap.delete(15, undefined, true);
221
+ const removed15 = tmm.delete(15, undefined, true);
220
222
  expect(removed15 instanceof Array);
221
223
  expect(removed15[0]);
222
224
  expect(removed15[0].deleted);
223
225
  if (removed15[0].deleted) expect(removed15[0].deleted.key).toBe(15);
224
226
 
225
- expect(treeMultiMap.isAVLBalanced()).toBe(false);
226
- expect(treeMultiMap.getHeight()).toBe(3);
227
+ expect(tmm.isAVLBalanced()).toBe(false);
228
+ expect(tmm.getHeight()).toBe(3);
227
229
 
228
- const removed5 = treeMultiMap.delete(5, undefined, true);
230
+ const removed5 = tmm.delete(5, undefined, true);
229
231
  expect(removed5 instanceof Array);
230
232
  expect(removed5[0]);
231
233
  expect(removed5[0].deleted);
232
234
  if (removed5[0].deleted) expect(removed5[0].deleted.key).toBe(5);
233
235
 
234
- expect(treeMultiMap.isAVLBalanced()).toBe(true);
235
- expect(treeMultiMap.getHeight()).toBe(3);
236
+ expect(tmm.isAVLBalanced()).toBe(true);
237
+ expect(tmm.getHeight()).toBe(3);
236
238
 
237
- const removed13 = treeMultiMap.delete(13, undefined, true);
239
+ const removed13 = tmm.delete(13, undefined, true);
238
240
  expect(removed13 instanceof Array);
239
241
  expect(removed13[0]);
240
242
  expect(removed13[0].deleted);
241
243
  if (removed13[0].deleted) expect(removed13[0].deleted.key).toBe(13);
242
- expect(treeMultiMap.isAVLBalanced()).toBe(true);
243
- expect(treeMultiMap.getHeight()).toBe(3);
244
+ expect(tmm.isAVLBalanced()).toBe(true);
245
+ expect(tmm.getHeight()).toBe(3);
244
246
 
245
- const removed3 = treeMultiMap.delete(3, undefined, true);
247
+ const removed3 = tmm.delete(3, undefined, true);
246
248
  expect(removed3 instanceof Array);
247
249
  expect(removed3[0]);
248
250
  expect(removed3[0].deleted);
249
251
  if (removed3[0].deleted) expect(removed3[0].deleted.key).toBe(3);
250
- expect(treeMultiMap.isAVLBalanced()).toBe(false);
251
- expect(treeMultiMap.getHeight()).toBe(3);
252
+ expect(tmm.isAVLBalanced()).toBe(false);
253
+ expect(tmm.getHeight()).toBe(3);
252
254
 
253
- const removed8 = treeMultiMap.delete(8, undefined, true);
255
+ const removed8 = tmm.delete(8, undefined, true);
254
256
  expect(removed8 instanceof Array);
255
257
  expect(removed8[0]);
256
258
  expect(removed8[0].deleted);
257
259
  if (removed8[0].deleted) expect(removed8[0].deleted.key).toBe(8);
258
- expect(treeMultiMap.isAVLBalanced()).toBe(false);
259
- expect(treeMultiMap.getHeight()).toBe(3);
260
+ expect(tmm.isAVLBalanced()).toBe(false);
261
+ expect(tmm.getHeight()).toBe(3);
260
262
 
261
- const removed6 = treeMultiMap.delete(6, undefined, true);
263
+ const removed6 = tmm.delete(6, undefined, true);
262
264
  expect(removed6 instanceof Array);
263
265
  expect(removed6[0]);
264
266
  expect(removed6[0].deleted);
265
267
  if (removed6[0].deleted) expect(removed6[0].deleted.key).toBe(6);
266
- expect(treeMultiMap.delete(6, undefined, true).length).toBe(0);
267
- expect(treeMultiMap.isAVLBalanced()).toBe(false);
268
+ expect(tmm.delete(6, undefined, true).length).toBe(0);
269
+ expect(tmm.isAVLBalanced()).toBe(false);
268
270
 
269
- expect(treeMultiMap.getHeight()).toBe(3);
271
+ expect(tmm.getHeight()).toBe(3);
270
272
 
271
- const removed7 = treeMultiMap.delete(7, undefined, true);
273
+ const removed7 = tmm.delete(7, undefined, true);
272
274
  expect(removed7 instanceof Array);
273
275
  expect(removed7[0]);
274
276
  expect(removed7[0].deleted);
275
277
  if (removed7[0].deleted) expect(removed7[0].deleted.key).toBe(7);
276
- expect(treeMultiMap.isAVLBalanced()).toBe(false);
277
- expect(treeMultiMap.getHeight()).toBe(3);
278
+ expect(tmm.isAVLBalanced()).toBe(false);
279
+ expect(tmm.getHeight()).toBe(3);
278
280
 
279
- const removed9 = treeMultiMap.delete(9, undefined, true);
281
+ const removed9 = tmm.delete(9, undefined, true);
280
282
  expect(removed9 instanceof Array);
281
283
  expect(removed9[0]);
282
284
  expect(removed9[0].deleted);
283
285
  if (removed9[0].deleted) expect(removed9[0].deleted.key).toBe(9);
284
- expect(treeMultiMap.isAVLBalanced()).toBe(true);
285
- expect(treeMultiMap.getHeight()).toBe(2);
286
+ expect(tmm.isAVLBalanced()).toBe(true);
287
+ expect(tmm.getHeight()).toBe(2);
286
288
 
287
- const removed14 = treeMultiMap.delete(14, undefined, true);
289
+ const removed14 = tmm.delete(14, undefined, true);
288
290
  expect(removed14 instanceof Array);
289
291
  expect(removed14[0]);
290
292
  expect(removed14[0].deleted);
291
293
  if (removed14[0].deleted) expect(removed14[0].deleted.key).toBe(14);
292
- expect(treeMultiMap.isAVLBalanced()).toBe(true);
293
- expect(treeMultiMap.getHeight()).toBe(1);
294
+ expect(tmm.isAVLBalanced()).toBe(true);
295
+ expect(tmm.getHeight()).toBe(1);
294
296
 
295
- expect(treeMultiMap.isAVLBalanced()).toBe(true);
297
+ expect(tmm.isAVLBalanced()).toBe(true);
296
298
 
297
- const bfsIDs = treeMultiMap.bfs(node => node.key);
299
+ const bfsIDs = tmm.bfs(node => node.key);
298
300
 
299
301
  expect(bfsIDs[0]).toBe(12);
300
302
  expect(bfsIDs[1]).toBe(2);
301
303
  expect(bfsIDs[2]).toBe(16);
302
304
 
303
- const bfsNodes = treeMultiMap.bfs(node => node);
305
+ const bfsNodes = tmm.bfs(node => node);
304
306
 
305
307
  expect(bfsNodes[0].key).toBe(12);
306
308
  expect(bfsNodes[1].key).toBe(2);
307
309
  expect(bfsNodes[2].key).toBe(16);
308
310
 
309
- expect(treeMultiMap.count).toBe(6);
310
- expect(treeMultiMap.getMutableCount()).toBe(8);
311
+ expect(tmm.count).toBe(6);
312
+ expect(tmm.getMutableCount()).toBe(8);
311
313
  });
312
314
 
313
315
  it('should perform various operations on a Binary Search Tree with object values', () => {
@@ -347,11 +349,11 @@ describe('TreeMultiMap operations test1', () => {
347
349
 
348
350
  describe('TreeMultiMap operations test recursively1', () => {
349
351
  it('should perform various operations on a Binary Search Tree with numeric values1', () => {
350
- const treeMultiMap = new TreeMultiMap<number>([], { iterationType: IterationType.RECURSIVE });
352
+ const tmm = new TreeMultiMap<number>([], { iterationType: 'RECURSIVE' });
351
353
 
352
- expect(treeMultiMap instanceof TreeMultiMap);
353
- treeMultiMap.add([11, 11]);
354
- treeMultiMap.add([3, 3]);
354
+ expect(tmm instanceof TreeMultiMap);
355
+ tmm.add([11, 11]);
356
+ tmm.add([3, 3]);
355
357
  const idAndValues: [number, number][] = [
356
358
  [11, 11],
357
359
  [3, 3],
@@ -370,209 +372,209 @@ describe('TreeMultiMap operations test recursively1', () => {
370
372
  [10, 10],
371
373
  [5, 5]
372
374
  ];
373
- treeMultiMap.addMany(idAndValues);
374
- expect(treeMultiMap.root).toBeInstanceOf(TreeMultiMapNode);
375
+ tmm.addMany(idAndValues);
376
+ expect(tmm.root).toBeInstanceOf(TreeMultiMapNode);
375
377
 
376
- if (treeMultiMap.root) expect(treeMultiMap.root.key).toBe(5);
378
+ if (tmm.root) expect(tmm.root.key).toBe(5);
377
379
 
378
- expect(treeMultiMap.size).toBe(16);
379
- expect(treeMultiMap.count).toBe(18);
380
- expect(treeMultiMap.getMutableCount()).toBe(18);
380
+ expect(tmm.size).toBe(16);
381
+ expect(tmm.count).toBe(18);
382
+ expect(tmm.getMutableCount()).toBe(18);
381
383
 
382
- expect(treeMultiMap.has(6));
384
+ expect(tmm.has(6));
383
385
 
384
- expect(treeMultiMap.getHeight(6)).toBe(1);
385
- expect(treeMultiMap.getDepth(6)).toBe(3);
386
- const nodeId10 = treeMultiMap.getNode(10);
386
+ expect(tmm.getHeight(6)).toBe(1);
387
+ expect(tmm.getDepth(6)).toBe(3);
388
+ const nodeId10 = tmm.getNode(10);
387
389
  expect(nodeId10?.key).toBe(10);
388
390
 
389
- const nodeVal9 = treeMultiMap.getNode(9, node => node.value);
391
+ const nodeVal9 = tmm.getNode(9, node => node.value);
390
392
  expect(nodeVal9?.key).toBe(9);
391
393
 
392
- const nodesByCount1 = treeMultiMap.getNodes(1, node => node.count);
394
+ const nodesByCount1 = tmm.getNodes(1, node => node.count);
393
395
  expect(nodesByCount1.length).toBe(14);
394
396
 
395
- const nodesByCount2 = treeMultiMap.getNodes(2, node => node.count);
397
+ const nodesByCount2 = tmm.getNodes(2, node => node.count);
396
398
  expect(nodesByCount2.length).toBe(2);
397
- const leftMost = treeMultiMap.getLeftMost();
399
+ const leftMost = tmm.getLeftMost();
398
400
  expect(leftMost?.key).toBe(1);
399
401
 
400
- const node15 = treeMultiMap.getNode(15);
401
- const minNodeBySpecificNode = node15 && treeMultiMap.getLeftMost(node15);
402
+ const node15 = tmm.getNode(15);
403
+ const minNodeBySpecificNode = node15 && tmm.getLeftMost(node15);
402
404
  expect(minNodeBySpecificNode?.key).toBe(14);
403
405
 
404
406
  let subTreeSum = 0;
405
- node15 && treeMultiMap.dfs(node => (subTreeSum += node.key), 'pre', 15);
407
+ node15 && tmm.dfs(node => (subTreeSum += node.key), 'pre', 15);
406
408
  expect(subTreeSum).toBe(45);
407
409
  let lesserSum = 0;
408
- expect(treeMultiMap.has(9)).toBe(true);
409
- treeMultiMap.lesserOrGreaterTraverse(
410
+ expect(tmm.has(9)).toBe(true);
411
+ tmm.lesserOrGreaterTraverse(
410
412
  node => {
411
413
  lesserSum += node.key;
412
414
  return node.key;
413
415
  },
414
- CP.lt,
416
+ 'LT',
415
417
  10
416
418
  );
417
419
  expect(lesserSum).toBe(45);
418
420
 
419
421
  expect(node15 instanceof TreeMultiMapNode);
420
422
  if (node15 instanceof TreeMultiMapNode) {
421
- const subTreeAdd = treeMultiMap.dfs(node => (node.count += 1), 'pre', 15);
423
+ const subTreeAdd = tmm.dfs(node => (node.count += 1), 'pre', 15);
422
424
  expect(subTreeAdd);
423
425
  }
424
- const node11 = treeMultiMap.getNode(11);
426
+ const node11 = tmm.getNode(11);
425
427
  expect(node11 instanceof TreeMultiMapNode);
426
428
  if (node11 instanceof TreeMultiMapNode) {
427
- const allGreaterNodesAdded = treeMultiMap.lesserOrGreaterTraverse(node => (node.count += 2), CP.gt, 11);
429
+ const allGreaterNodesAdded = tmm.lesserOrGreaterTraverse(node => (node.count += 2), 'GT', 11);
428
430
  expect(allGreaterNodesAdded);
429
431
  }
430
432
 
431
- const dfsInorderNodes = treeMultiMap.dfs(node => node, 'in');
433
+ const dfsInorderNodes = tmm.dfs(node => node, 'in');
432
434
  expect(dfsInorderNodes[0].key).toBe(1);
433
435
  expect(dfsInorderNodes[dfsInorderNodes.length - 1].key).toBe(16);
434
- expect(treeMultiMap.isPerfectlyBalanced()).toBe(true);
436
+ expect(tmm.isPerfectlyBalanced()).toBe(false);
435
437
 
436
- treeMultiMap.perfectlyBalance();
438
+ tmm.perfectlyBalance();
437
439
 
438
- expect(treeMultiMap.isPerfectlyBalanced()).toBe(false);
439
- expect(treeMultiMap.isAVLBalanced()).toBe(false);
440
+ expect(tmm.isPerfectlyBalanced()).toBe(false);
441
+ expect(tmm.isAVLBalanced()).toBe(false);
440
442
 
441
- const bfsNodesAfterBalanced = treeMultiMap.bfs(node => node);
443
+ const bfsNodesAfterBalanced = tmm.bfs(node => node);
442
444
  expect(bfsNodesAfterBalanced[0].key).toBe(6);
443
445
  expect(bfsNodesAfterBalanced[bfsNodesAfterBalanced.length - 1].key).toBe(16);
444
446
 
445
- const removed11 = treeMultiMap.delete(11, undefined, true);
447
+ const removed11 = tmm.delete(11, undefined, true);
446
448
  expect(removed11 instanceof Array);
447
449
  expect(removed11[0]);
448
450
  expect(removed11[0].deleted);
449
451
 
450
452
  if (removed11[0].deleted) expect(removed11[0].deleted.key).toBe(11);
451
453
 
452
- expect(treeMultiMap.isAVLBalanced()).toBe(false);
454
+ expect(tmm.isAVLBalanced()).toBe(false);
453
455
 
454
- expect(treeMultiMap.getHeight(15)).toBe(1);
456
+ expect(tmm.getHeight(15)).toBe(1);
455
457
 
456
- const removed1 = treeMultiMap.delete(1, undefined, true);
458
+ const removed1 = tmm.delete(1, undefined, true);
457
459
  expect(removed1 instanceof Array);
458
460
  expect(removed1[0]);
459
461
  expect(removed1[0].deleted);
460
462
  if (removed1[0].deleted) expect(removed1[0].deleted.key).toBe(1);
461
463
 
462
- expect(treeMultiMap.isAVLBalanced()).toBe(false);
464
+ expect(tmm.isAVLBalanced()).toBe(false);
463
465
 
464
- expect(treeMultiMap.getHeight()).toBe(5);
466
+ expect(tmm.getHeight()).toBe(5);
465
467
 
466
- const removed4 = treeMultiMap.delete(4, undefined, true);
468
+ const removed4 = tmm.delete(4, undefined, true);
467
469
  expect(removed4 instanceof Array);
468
470
  expect(removed4[0]);
469
471
  expect(removed4[0].deleted);
470
472
  if (removed4[0].deleted) expect(removed4[0].deleted.key).toBe(4);
471
473
 
472
- expect(treeMultiMap.isAVLBalanced()).toBe(false);
473
- expect(treeMultiMap.getHeight()).toBe(5);
474
+ expect(tmm.isAVLBalanced()).toBe(false);
475
+ expect(tmm.getHeight()).toBe(5);
474
476
 
475
- const removed10 = treeMultiMap.delete(10, undefined, true);
477
+ const removed10 = tmm.delete(10, undefined, true);
476
478
  expect(removed10 instanceof Array);
477
479
  expect(removed10[0]);
478
480
  expect(removed10[0].deleted);
479
481
  if (removed10[0].deleted) expect(removed10[0].deleted.key).toBe(10);
480
- expect(treeMultiMap.isAVLBalanced()).toBe(false);
482
+ expect(tmm.isAVLBalanced()).toBe(false);
481
483
 
482
- expect(treeMultiMap.getHeight()).toBe(4);
484
+ expect(tmm.getHeight()).toBe(4);
483
485
 
484
- const removed15 = treeMultiMap.delete(15, undefined, true);
486
+ const removed15 = tmm.delete(15, undefined, true);
485
487
  expect(removed15 instanceof Array);
486
488
  expect(removed15[0]);
487
489
  expect(removed15[0].deleted);
488
490
  if (removed15[0].deleted) expect(removed15[0].deleted.key).toBe(15);
489
491
 
490
- expect(treeMultiMap.isAVLBalanced()).toBe(false);
491
- expect(treeMultiMap.getHeight()).toBe(3);
492
+ expect(tmm.isAVLBalanced()).toBe(false);
493
+ expect(tmm.getHeight()).toBe(3);
492
494
 
493
- const removed5 = treeMultiMap.delete(5, undefined, true);
495
+ const removed5 = tmm.delete(5, undefined, true);
494
496
  expect(removed5 instanceof Array);
495
497
  expect(removed5[0]);
496
498
  expect(removed5[0].deleted);
497
499
  if (removed5[0].deleted) expect(removed5[0].deleted.key).toBe(5);
498
500
 
499
- expect(treeMultiMap.isAVLBalanced()).toBe(true);
500
- expect(treeMultiMap.getHeight()).toBe(3);
501
+ expect(tmm.isAVLBalanced()).toBe(true);
502
+ expect(tmm.getHeight()).toBe(3);
501
503
 
502
- const removed13 = treeMultiMap.delete(13, undefined, true);
504
+ const removed13 = tmm.delete(13, undefined, true);
503
505
  expect(removed13 instanceof Array);
504
506
  expect(removed13[0]);
505
507
  expect(removed13[0].deleted);
506
508
  if (removed13[0].deleted) expect(removed13[0].deleted.key).toBe(13);
507
- expect(treeMultiMap.isAVLBalanced()).toBe(true);
508
- expect(treeMultiMap.getHeight()).toBe(3);
509
+ expect(tmm.isAVLBalanced()).toBe(true);
510
+ expect(tmm.getHeight()).toBe(3);
509
511
 
510
- const removed3 = treeMultiMap.delete(3, undefined, true);
512
+ const removed3 = tmm.delete(3, undefined, true);
511
513
  expect(removed3 instanceof Array);
512
514
  expect(removed3[0]);
513
515
  expect(removed3[0].deleted);
514
516
  if (removed3[0].deleted) expect(removed3[0].deleted.key).toBe(3);
515
- expect(treeMultiMap.isAVLBalanced()).toBe(false);
516
- expect(treeMultiMap.getHeight()).toBe(3);
517
+ expect(tmm.isAVLBalanced()).toBe(false);
518
+ expect(tmm.getHeight()).toBe(3);
517
519
 
518
- const removed8 = treeMultiMap.delete(8, undefined, true);
520
+ const removed8 = tmm.delete(8, undefined, true);
519
521
  expect(removed8 instanceof Array);
520
522
  expect(removed8[0]);
521
523
  expect(removed8[0].deleted);
522
524
  if (removed8[0].deleted) expect(removed8[0].deleted.key).toBe(8);
523
- expect(treeMultiMap.isAVLBalanced()).toBe(false);
524
- expect(treeMultiMap.getHeight()).toBe(3);
525
+ expect(tmm.isAVLBalanced()).toBe(false);
526
+ expect(tmm.getHeight()).toBe(3);
525
527
 
526
- const removed6 = treeMultiMap.delete(6, undefined, true);
528
+ const removed6 = tmm.delete(6, undefined, true);
527
529
  expect(removed6 instanceof Array);
528
530
  expect(removed6[0]);
529
531
  expect(removed6[0].deleted);
530
532
  if (removed6[0].deleted) expect(removed6[0].deleted.key).toBe(6);
531
- expect(treeMultiMap.delete(6, undefined, true).length).toBe(0);
532
- expect(treeMultiMap.isAVLBalanced()).toBe(false);
533
+ expect(tmm.delete(6, undefined, true).length).toBe(0);
534
+ expect(tmm.isAVLBalanced()).toBe(false);
533
535
 
534
- expect(treeMultiMap.getHeight()).toBe(3);
536
+ expect(tmm.getHeight()).toBe(3);
535
537
 
536
- const removed7 = treeMultiMap.delete(7, undefined, true);
538
+ const removed7 = tmm.delete(7, undefined, true);
537
539
  expect(removed7 instanceof Array);
538
540
  expect(removed7[0]);
539
541
  expect(removed7[0].deleted);
540
542
  if (removed7[0].deleted) expect(removed7[0].deleted.key).toBe(7);
541
- expect(treeMultiMap.isAVLBalanced()).toBe(false);
542
- expect(treeMultiMap.getHeight()).toBe(3);
543
+ expect(tmm.isAVLBalanced()).toBe(false);
544
+ expect(tmm.getHeight()).toBe(3);
543
545
 
544
- const removed9 = treeMultiMap.delete(9, undefined, true);
546
+ const removed9 = tmm.delete(9, undefined, true);
545
547
  expect(removed9 instanceof Array);
546
548
  expect(removed9[0]);
547
549
  expect(removed9[0].deleted);
548
550
  if (removed9[0].deleted) expect(removed9[0].deleted.key).toBe(9);
549
- expect(treeMultiMap.isAVLBalanced()).toBe(true);
550
- expect(treeMultiMap.getHeight()).toBe(2);
551
+ expect(tmm.isAVLBalanced()).toBe(true);
552
+ expect(tmm.getHeight()).toBe(2);
551
553
 
552
- const removed14 = treeMultiMap.delete(14, undefined, true);
554
+ const removed14 = tmm.delete(14, undefined, true);
553
555
  expect(removed14 instanceof Array);
554
556
  expect(removed14[0]);
555
557
  expect(removed14[0].deleted);
556
558
  if (removed14[0].deleted) expect(removed14[0].deleted.key).toBe(14);
557
- expect(treeMultiMap.isAVLBalanced()).toBe(true);
558
- expect(treeMultiMap.getHeight()).toBe(1);
559
+ expect(tmm.isAVLBalanced()).toBe(true);
560
+ expect(tmm.getHeight()).toBe(1);
559
561
 
560
- expect(treeMultiMap.isAVLBalanced()).toBe(true);
562
+ expect(tmm.isAVLBalanced()).toBe(true);
561
563
 
562
- const bfsIDs = treeMultiMap.bfs(node => node.key);
564
+ const bfsIDs = tmm.bfs(node => node.key);
563
565
 
564
566
  expect(bfsIDs[0]).toBe(12);
565
567
  expect(bfsIDs[1]).toBe(2);
566
568
  expect(bfsIDs[2]).toBe(16);
567
569
 
568
- const bfsNodes = treeMultiMap.bfs(node => node);
570
+ const bfsNodes = tmm.bfs(node => node);
569
571
 
570
572
  expect(bfsNodes[0].key).toBe(12);
571
573
  expect(bfsNodes[1].key).toBe(2);
572
574
  expect(bfsNodes[2].key).toBe(16);
573
575
 
574
- expect(treeMultiMap.count).toBe(6);
575
- expect(treeMultiMap.getMutableCount()).toBe(8);
576
+ expect(tmm.count).toBe(6);
577
+ expect(tmm.getMutableCount()).toBe(8);
576
578
  });
577
579
 
578
580
  it('should perform various operations on a Binary Search Tree with object values', () => {
@@ -611,79 +613,81 @@ describe('TreeMultiMap operations test recursively1', () => {
611
613
  });
612
614
 
613
615
  describe('TreeMultiMap delete test', function () {
614
- const treeMS = new TreeMultiMap<number, number>();
615
- const inputSize = 100; // Adjust input sizes as needed
616
+ const tmm = new TreeMultiMap<number, number>();
617
+ const inputSize = 1000; // Adjust input sizes as needed
616
618
 
617
619
  beforeEach(() => {
618
- treeMS.clear();
620
+ tmm.clear();
619
621
  });
620
622
 
621
623
  it(`Observe the time consumption of TreeMultiMap.dfs be good`, function () {
622
624
  const startDFS = performance.now();
623
- const dfs = treeMS.dfs(node => node);
625
+ const dfs = tmm.dfs(node => node);
624
626
  isDebug && console.log('---bfs', performance.now() - startDFS, dfs.length);
625
627
  });
626
628
 
627
629
  it('The structure remains normal after random deletion', function () {
628
630
  for (let i = 0; i < inputSize; i++) {
629
- treeMS.add(i);
631
+ tmm.add(i);
630
632
  }
631
633
 
634
+ expect(tmm.size).toBe(inputSize);
635
+
632
636
  for (let i = 0; i < inputSize; i++) {
633
637
  const num = getRandomInt(0, inputSize - 1);
634
- treeMS.delete(num);
638
+ tmm.delete(num);
635
639
  }
636
640
 
637
- let nanCount = 0;
641
+ let nilCount = 0;
638
642
  const dfs = (cur: TreeMultiMapNode<number>) => {
639
- if (isNaN(cur.key)) nanCount++;
643
+ if (isNaN(cur.key)) nilCount++;
640
644
  if (cur.left) dfs(cur.left);
641
645
  if (cur.right) dfs(cur.right);
642
646
  };
643
- if (treeMS.root) dfs(treeMS.root);
647
+ if (tmm.root) dfs(tmm.root);
644
648
 
645
- expect(treeMS.size).toBeLessThanOrEqual(inputSize);
646
- expect(treeMS.getHeight()).toBeGreaterThan(Math.log2(inputSize));
647
- expect(treeMS.getHeight()).toBeLessThan(Math.log2(inputSize) * 2);
649
+ expect(tmm.size).toBeLessThanOrEqual(inputSize);
650
+ expect(tmm.getHeight()).toBeGreaterThan(Math.log2(inputSize) - 1);
651
+ expect(tmm.getHeight()).toBeLessThan(Math.log2(inputSize) * 2);
648
652
 
649
- expect(nanCount).toBeLessThanOrEqual(inputSize);
653
+ expect(nilCount).toBe(tmm.size + 1);
650
654
  });
651
655
 
652
656
  it(`Random additions, complete deletions of structures are normal`, function () {
653
657
  for (let i = 0; i < inputSize; i++) {
654
658
  const num = getRandomInt(0, inputSize - 1);
655
659
  if (i === 0 && isDebug) console.log(`first:`, num);
656
- treeMS.add(num);
660
+ tmm.add(num);
657
661
  }
658
662
 
659
663
  for (let i = 0; i < inputSize; i++) {
660
- treeMS.delete(i, undefined, true);
664
+ tmm.delete(i, undefined, true);
661
665
  }
662
666
 
663
- let nanCount = 0;
667
+ let nilCount = 0;
664
668
  const dfs = (cur: TreeMultiMapNode<number>) => {
665
- if (isNaN(cur.key)) nanCount++;
669
+ if (isNaN(cur.key)) nilCount++;
666
670
  if (cur.left) dfs(cur.left);
667
671
  if (cur.right) dfs(cur.right);
668
672
  };
669
- if (treeMS.root) dfs(treeMS.root);
673
+ if (tmm.root) dfs(tmm.root);
670
674
 
671
- expect(treeMS.size).toBe(0);
672
- expect(treeMS.getHeight()).toBe(0);
673
- expect(nanCount).toBeLessThanOrEqual(inputSize);
675
+ expect(tmm.size).toBe(0);
676
+ expect(tmm.getHeight()).toBe(-1);
677
+ expect(nilCount).toBe(tmm.size + 1);
674
678
 
675
- isDebug && treeMS.print();
679
+ isDebug && tmm.print();
676
680
  });
677
681
 
678
682
  it(`Random additions, count deletions of structures are normal`, function () {
679
683
  for (let i = 0; i < inputSize; i++) {
680
684
  const num = getRandomInt(0, inputSize - 1);
681
685
  if (i === 0 && isDebug) console.log(`first:`, num);
682
- treeMS.add(num);
686
+ tmm.add(num);
683
687
  }
684
688
 
685
689
  for (let i = 0; i < inputSize; i++) {
686
- treeMS.delete(i);
690
+ tmm.delete(i);
687
691
  }
688
692
 
689
693
  let nanCount = 0;
@@ -692,49 +696,49 @@ describe('TreeMultiMap delete test', function () {
692
696
  if (cur.left) dfs(cur.left);
693
697
  if (cur.right) dfs(cur.right);
694
698
  };
695
- if (treeMS.root) dfs(treeMS.root);
699
+ if (tmm.root) dfs(tmm.root);
696
700
 
697
- expect(treeMS.size).toBeGreaterThanOrEqual(0);
698
- expect(treeMS.getHeight()).toBeGreaterThanOrEqual(0);
701
+ expect(tmm.size).toBeGreaterThanOrEqual(0);
702
+ expect(tmm.getHeight()).toBeGreaterThanOrEqual(0);
699
703
  expect(nanCount).toBeLessThanOrEqual(inputSize);
700
704
 
701
- isDebug && treeMS.print();
705
+ isDebug && tmm.print();
702
706
  });
703
707
 
704
708
  it('should the clone method', () => {
705
- function checkTreeStructure(treeMultiMap: TreeMultiMap<string, number>) {
706
- expect(treeMultiMap.size).toBe(4);
707
- expect(treeMultiMap.root?.key).toBe('2');
708
- expect(treeMultiMap.root?.left?.key).toBe('1');
709
- expect(treeMultiMap.root?.left?.left?.key).toBe(NaN);
710
- expect(treeMultiMap.root?.left?.right?.key).toBe(NaN);
711
- expect(treeMultiMap.root?.right?.key).toBe('4');
712
- expect(treeMultiMap.root?.right?.left?.key).toBe(NaN);
713
- expect(treeMultiMap.root?.right?.right?.key).toBe('5');
709
+ function checkTreeStructure(tmm: TreeMultiMap<string, number>) {
710
+ expect(tmm.size).toBe(4);
711
+ expect(tmm.root?.key).toBe('2');
712
+ expect(tmm.root?.left?.key).toBe('1');
713
+ expect(tmm.root?.left?.left?.key).toBe(NaN);
714
+ expect(tmm.root?.left?.right?.key).toBe(NaN);
715
+ expect(tmm.root?.right?.key).toBe('4');
716
+ expect(tmm.root?.right?.left?.key).toBe(NaN);
717
+ expect(tmm.root?.right?.right?.key).toBe('5');
714
718
  }
715
719
 
716
- const treeMultiMap = new TreeMultiMap<string, number>();
717
- treeMultiMap.addMany([
720
+ const tmm = new TreeMultiMap<string, number>();
721
+ tmm.addMany([
718
722
  ['2', 2],
719
723
  ['4', 4],
720
724
  ['5', 5],
721
725
  ['3', 3],
722
726
  ['1', 1]
723
727
  ]);
724
- expect(treeMultiMap.size).toBe(5);
725
- expect(treeMultiMap.root?.key).toBe('2');
726
- expect(treeMultiMap.root?.left?.key).toBe('1');
727
- expect(treeMultiMap.root?.left?.left?.key).toBe(NaN);
728
- expect(treeMultiMap.root?.left?.right?.key).toBe(NaN);
729
- expect(treeMultiMap.root?.right?.key).toBe('4');
730
- expect(treeMultiMap.root?.right?.left?.key).toBe(`3`);
731
- expect(treeMultiMap.root?.right?.right?.key).toBe('5');
732
- treeMultiMap.delete('3');
733
- checkTreeStructure(treeMultiMap);
734
- const cloned = treeMultiMap.clone();
728
+ expect(tmm.size).toBe(5);
729
+ expect(tmm.root?.key).toBe('2');
730
+ expect(tmm.root?.left?.key).toBe('1');
731
+ expect(tmm.root?.left?.left?.key).toBe(NaN);
732
+ expect(tmm.root?.left?.right?.key).toBe(NaN);
733
+ expect(tmm.root?.right?.key).toBe('4');
734
+ expect(tmm.root?.right?.left?.key).toBe(`3`);
735
+ expect(tmm.root?.right?.right?.key).toBe('5');
736
+ tmm.delete('3');
737
+ checkTreeStructure(tmm);
738
+ const cloned = tmm.clone();
735
739
  checkTreeStructure(cloned);
736
740
  cloned.delete('1');
737
- expect(treeMultiMap.size).toBe(4);
741
+ expect(tmm.size).toBe(4);
738
742
  expect(cloned.size).toBe(3);
739
743
  });
740
744
  });