data-structure-typed 1.50.3 → 1.50.5

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 (119) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -13
  2. package/CHANGELOG.md +1 -1
  3. package/README.md +122 -61
  4. package/README_zh-CN.md +6 -6
  5. package/SPECIFICATION.md +2 -2
  6. package/SPECIFICATION_zh-CN.md +81 -0
  7. package/{SPONSOR-zh-CN.md → SPONSOR_zh-CN.md} +1 -1
  8. package/benchmark/report.html +24 -24
  9. package/benchmark/report.json +242 -242
  10. package/dist/cjs/data-structures/base/iterable-base.d.ts +10 -8
  11. package/dist/cjs/data-structures/base/iterable-base.js +8 -12
  12. package/dist/cjs/data-structures/base/iterable-base.js.map +1 -1
  13. package/dist/{mjs/data-structures/binary-tree/tree-multimap.d.ts → cjs/data-structures/binary-tree/avl-tree-multi-map.d.ts} +11 -11
  14. package/dist/cjs/data-structures/binary-tree/{tree-multimap.js → avl-tree-multi-map.js} +15 -15
  15. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -0
  16. package/dist/cjs/data-structures/binary-tree/bst.js +5 -7
  17. package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
  18. package/dist/cjs/data-structures/binary-tree/index.d.ts +2 -1
  19. package/dist/cjs/data-structures/binary-tree/index.js +2 -1
  20. package/dist/cjs/data-structures/binary-tree/index.js.map +1 -1
  21. package/dist/cjs/data-structures/binary-tree/rb-tree.js +17 -9
  22. package/dist/cjs/data-structures/binary-tree/rb-tree.js.map +1 -1
  23. package/dist/cjs/data-structures/binary-tree/tree-multi-map.d.ts +200 -0
  24. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js +400 -0
  25. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js.map +1 -0
  26. package/dist/cjs/data-structures/graph/abstract-graph.d.ts +1 -0
  27. package/dist/cjs/data-structures/graph/abstract-graph.js +3 -0
  28. package/dist/cjs/data-structures/graph/abstract-graph.js.map +1 -1
  29. package/dist/cjs/data-structures/heap/heap.js.map +1 -1
  30. package/dist/cjs/data-structures/linked-list/doubly-linked-list.d.ts +14 -76
  31. package/dist/cjs/data-structures/linked-list/doubly-linked-list.js +16 -86
  32. package/dist/cjs/data-structures/linked-list/doubly-linked-list.js.map +1 -1
  33. package/dist/cjs/data-structures/linked-list/singly-linked-list.d.ts +27 -69
  34. package/dist/cjs/data-structures/linked-list/singly-linked-list.js +35 -79
  35. package/dist/cjs/data-structures/linked-list/singly-linked-list.js.map +1 -1
  36. package/dist/cjs/data-structures/queue/deque.d.ts +0 -53
  37. package/dist/cjs/data-structures/queue/deque.js +0 -61
  38. package/dist/cjs/data-structures/queue/deque.js.map +1 -1
  39. package/dist/cjs/data-structures/queue/queue.d.ts +0 -70
  40. package/dist/cjs/data-structures/queue/queue.js +0 -87
  41. package/dist/cjs/data-structures/queue/queue.js.map +1 -1
  42. package/dist/cjs/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +5 -0
  43. package/dist/cjs/types/data-structures/binary-tree/avl-tree-multi-map.js +3 -0
  44. package/dist/cjs/types/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -0
  45. package/dist/cjs/types/data-structures/binary-tree/index.d.ts +2 -1
  46. package/dist/cjs/types/data-structures/binary-tree/index.js +2 -1
  47. package/dist/cjs/types/data-structures/binary-tree/index.js.map +1 -1
  48. package/dist/cjs/types/data-structures/binary-tree/tree-multi-map.d.ts +5 -0
  49. package/dist/cjs/types/data-structures/binary-tree/{tree-multimap.js → tree-multi-map.js} +1 -1
  50. package/dist/cjs/types/data-structures/binary-tree/tree-multi-map.js.map +1 -0
  51. package/dist/mjs/data-structures/base/iterable-base.d.ts +10 -8
  52. package/dist/mjs/data-structures/base/iterable-base.js +8 -12
  53. package/dist/{cjs/data-structures/binary-tree/tree-multimap.d.ts → mjs/data-structures/binary-tree/avl-tree-multi-map.d.ts} +11 -11
  54. package/dist/mjs/data-structures/binary-tree/{tree-multimap.js → avl-tree-multi-map.js} +11 -11
  55. package/dist/mjs/data-structures/binary-tree/bst.js +5 -7
  56. package/dist/mjs/data-structures/binary-tree/index.d.ts +2 -1
  57. package/dist/mjs/data-structures/binary-tree/index.js +2 -1
  58. package/dist/mjs/data-structures/binary-tree/rb-tree.js +17 -9
  59. package/dist/mjs/data-structures/binary-tree/tree-multi-map.d.ts +200 -0
  60. package/dist/mjs/data-structures/binary-tree/tree-multi-map.js +397 -0
  61. package/dist/mjs/data-structures/graph/abstract-graph.d.ts +1 -0
  62. package/dist/mjs/data-structures/graph/abstract-graph.js +3 -0
  63. package/dist/mjs/data-structures/linked-list/doubly-linked-list.d.ts +14 -76
  64. package/dist/mjs/data-structures/linked-list/doubly-linked-list.js +16 -86
  65. package/dist/mjs/data-structures/linked-list/singly-linked-list.d.ts +27 -69
  66. package/dist/mjs/data-structures/linked-list/singly-linked-list.js +33 -79
  67. package/dist/mjs/data-structures/queue/deque.d.ts +0 -53
  68. package/dist/mjs/data-structures/queue/deque.js +0 -61
  69. package/dist/mjs/data-structures/queue/queue.d.ts +0 -70
  70. package/dist/mjs/data-structures/queue/queue.js +0 -86
  71. package/dist/mjs/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +5 -0
  72. package/dist/mjs/types/data-structures/binary-tree/index.d.ts +2 -1
  73. package/dist/mjs/types/data-structures/binary-tree/index.js +2 -1
  74. package/dist/mjs/types/data-structures/binary-tree/tree-multi-map.d.ts +5 -0
  75. package/dist/mjs/types/data-structures/binary-tree/tree-multi-map.js +1 -0
  76. package/dist/umd/data-structure-typed.js +461 -354
  77. package/dist/umd/data-structure-typed.min.js +2 -2
  78. package/dist/umd/data-structure-typed.min.js.map +1 -1
  79. package/package.json +1 -1
  80. package/src/data-structures/base/iterable-base.ts +14 -10
  81. package/src/data-structures/binary-tree/{tree-multimap.ts → avl-tree-multi-map.ts} +20 -20
  82. package/src/data-structures/binary-tree/bst.ts +5 -6
  83. package/src/data-structures/binary-tree/index.ts +2 -1
  84. package/src/data-structures/binary-tree/rb-tree.ts +20 -10
  85. package/src/data-structures/binary-tree/tree-multi-map.ts +463 -0
  86. package/src/data-structures/graph/abstract-graph.ts +4 -0
  87. package/src/data-structures/heap/heap.ts +1 -1
  88. package/src/data-structures/linked-list/doubly-linked-list.ts +16 -94
  89. package/src/data-structures/linked-list/singly-linked-list.ts +35 -87
  90. package/src/data-structures/queue/deque.ts +0 -67
  91. package/src/data-structures/queue/queue.ts +0 -98
  92. package/src/types/data-structures/binary-tree/avl-tree-multi-map.ts +8 -0
  93. package/src/types/data-structures/binary-tree/index.ts +2 -1
  94. package/src/types/data-structures/binary-tree/tree-multi-map.ts +8 -0
  95. package/test/integration/index.html +2 -2
  96. package/test/performance/data-structures/binary-tree/avl-tree.test.ts +3 -3
  97. package/test/performance/data-structures/binary-tree/binary-tree-overall.test.ts +3 -3
  98. package/test/performance/data-structures/hash/hash-map.test.ts +6 -6
  99. package/test/performance/data-structures/heap/heap.test.ts +14 -14
  100. package/test/performance/data-structures/priority-queue/priority-queue.test.ts +11 -6
  101. package/test/performance/data-structures/queue/deque.test.ts +8 -8
  102. package/test/performance/data-structures/queue/queue.test.ts +5 -12
  103. package/test/performance/reportor.ts +43 -1
  104. package/test/unit/data-structures/binary-tree/{tree-multimap.test.ts → avl-tree-multi-map.test.ts} +55 -55
  105. package/test/unit/data-structures/binary-tree/overall.test.ts +24 -25
  106. package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +706 -0
  107. package/test/unit/data-structures/graph/undirected-graph.test.ts +4 -4
  108. package/test/unit/data-structures/linked-list/doubly-linked-list.test.ts +6 -6
  109. package/test/unit/data-structures/linked-list/singly-linked-list.test.ts +10 -10
  110. package/test/unit/data-structures/linked-list/skip-list.test.ts +4 -4
  111. package/test/unit/data-structures/queue/deque.test.ts +26 -26
  112. package/test/unit/data-structures/queue/queue.test.ts +20 -20
  113. package/test/unit/unrestricted-interconversion.test.ts +3 -3
  114. package/dist/cjs/data-structures/binary-tree/tree-multimap.js.map +0 -1
  115. package/dist/cjs/types/data-structures/binary-tree/tree-multimap.d.ts +0 -5
  116. package/dist/cjs/types/data-structures/binary-tree/tree-multimap.js.map +0 -1
  117. package/dist/mjs/types/data-structures/binary-tree/tree-multimap.d.ts +0 -5
  118. package/src/types/data-structures/binary-tree/tree-multimap.ts +0 -8
  119. /package/dist/mjs/types/data-structures/binary-tree/{tree-multimap.js → avl-tree-multi-map.js} +0 -0
@@ -4,6 +4,7 @@ import * as fs from 'fs';
4
4
  import * as fastGlob from 'fast-glob';
5
5
  import { Color, numberFix, render } from '../utils';
6
6
  import { PerformanceTest } from './types';
7
+ import * as console from 'console';
7
8
 
8
9
  const args = process.argv.slice(2);
9
10
 
@@ -171,7 +172,48 @@ function replaceMarkdownContent(startMarker: string, endMarker: string, newText:
171
172
  });
172
173
  }
173
174
 
174
- performanceTests.forEach(item => {
175
+ const order = [
176
+ 'heap',
177
+ 'rb-tree',
178
+ 'queue',
179
+ 'deque',
180
+ 'hash-map',
181
+ 'trie',
182
+ 'avl-tree',
183
+ 'binary-tree-overall',
184
+ 'directed-graph',
185
+ 'doubly-linked-list',
186
+ 'singly-linked-list',
187
+ 'priority-queue',
188
+ 'stack'
189
+ ];
190
+
191
+ const sortedPerformanceTests = [...performanceTests].sort((a, b) => {
192
+ const indexA = order.indexOf(a.testName);
193
+ const indexB = order.indexOf(b.testName);
194
+
195
+ // If both a and b are in the order, sort them according to their indices in the order.
196
+ if (indexA !== -1 && indexB !== -1) {
197
+ return indexA - indexB;
198
+ }
199
+
200
+ // If there is only 'a' in the order, then place 'b' in front.
201
+ if (indexA !== -1) {
202
+ return 1;
203
+ }
204
+
205
+ // If only b is in the order, then a should be placed before it.
206
+ if (indexB !== -1) {
207
+ return -1;
208
+ }
209
+
210
+ // If neither a nor b are in order, keep their original order
211
+ return 0;
212
+ });
213
+
214
+ console.log(`${GREEN} Found tests${END}: ${sortedPerformanceTests.map(test => test.testName)}`);
215
+
216
+ sortedPerformanceTests.forEach(item => {
175
217
  const { suite, testName, file } = item;
176
218
 
177
219
  console.log(coloredLabeled('Running', file));
@@ -1,20 +1,20 @@
1
1
  import {
2
+ AVLTreeMultiMap,
3
+ AVLTreeMultiMapNode,
2
4
  AVLTreeNode,
3
5
  BinaryTreeNode,
4
6
  BSTNode,
5
7
  CP,
6
- IterationType,
7
- TreeMultimap,
8
- TreeMultimapNode
8
+ IterationType
9
9
  } from '../../../../src';
10
10
  import { isDebugTest } from '../../../config';
11
11
 
12
12
  const isDebug = isDebugTest;
13
13
 
14
- describe('TreeMultimap count', () => {
15
- let tm: TreeMultimap<number>;
14
+ describe('AVLTreeMultiMap count', () => {
15
+ let tm: AVLTreeMultiMap<number>;
16
16
  beforeEach(() => {
17
- tm = new TreeMultimap<number>();
17
+ tm = new AVLTreeMultiMap<number>();
18
18
  });
19
19
  it('Should added isolated node count ', () => {
20
20
  tm.addMany([
@@ -24,7 +24,7 @@ describe('TreeMultimap count', () => {
24
24
  [4, 4],
25
25
  [5, 5]
26
26
  ]);
27
- const newNode = new TreeMultimapNode(3, 33, 10);
27
+ const newNode = new AVLTreeMultiMapNode(3, 33, 10);
28
28
  tm.add(newNode);
29
29
  expect(tm.count).toBe(15);
30
30
  });
@@ -40,11 +40,11 @@ describe('TreeMultimap count', () => {
40
40
  });
41
41
  });
42
42
 
43
- describe('TreeMultimap operations test1', () => {
43
+ describe('AVLTreeMultiMap operations test1', () => {
44
44
  it('should perform various operations on a Binary Search Tree with numeric values1', () => {
45
- const treeMultimap = new TreeMultimap();
45
+ const treeMultimap = new AVLTreeMultiMap();
46
46
 
47
- expect(treeMultimap instanceof TreeMultimap);
47
+ expect(treeMultimap instanceof AVLTreeMultiMap);
48
48
  treeMultimap.add([11, 11]);
49
49
  treeMultimap.add([3, 3]);
50
50
  const idAndValues: [number, number][] = [
@@ -66,7 +66,7 @@ describe('TreeMultimap operations test1', () => {
66
66
  [5, 5]
67
67
  ];
68
68
  treeMultimap.addMany(idAndValues);
69
- expect(treeMultimap.root instanceof TreeMultimapNode);
69
+ expect(treeMultimap.root instanceof AVLTreeMultiMapNode);
70
70
 
71
71
  if (treeMultimap.root) expect(treeMultimap.root.key == 11);
72
72
 
@@ -99,17 +99,17 @@ describe('TreeMultimap operations test1', () => {
99
99
  node15 && treeMultimap.dfs(node => (subTreeSum += node.key), 'pre', 15);
100
100
  expect(subTreeSum).toBe(31);
101
101
  let lesserSum = 0;
102
- treeMultimap.lesserOrGreaterTraverse((node: TreeMultimapNode<number>) => (lesserSum += node.key), CP.lt, 10);
103
- expect(lesserSum).toBe(21);
102
+ treeMultimap.lesserOrGreaterTraverse((node: AVLTreeMultiMapNode<number>) => (lesserSum += node.key), CP.lt, 10);
103
+ expect(lesserSum).toBe(45);
104
104
 
105
- expect(node15 instanceof TreeMultimapNode);
106
- if (node15 instanceof TreeMultimapNode) {
105
+ expect(node15 instanceof AVLTreeMultiMapNode);
106
+ if (node15 instanceof AVLTreeMultiMapNode) {
107
107
  const subTreeAdd = treeMultimap.dfs(node => (node.count += 1), 'pre', 15);
108
108
  expect(subTreeAdd);
109
109
  }
110
110
  const node11 = treeMultimap.getNode(11);
111
- expect(node11 instanceof TreeMultimapNode);
112
- if (node11 instanceof TreeMultimapNode) {
111
+ expect(node11 instanceof AVLTreeMultiMapNode);
112
+ if (node11 instanceof AVLTreeMultiMapNode) {
113
113
  const allGreaterNodesAdded = treeMultimap.lesserOrGreaterTraverse(node => (node.count += 2), CP.gt, 11);
114
114
  expect(allGreaterNodesAdded);
115
115
  }
@@ -257,14 +257,14 @@ describe('TreeMultimap operations test1', () => {
257
257
  expect(bfsNodes[1].key).toBe(2);
258
258
  expect(bfsNodes[2].key).toBe(16);
259
259
 
260
- expect(treeMultimap.count).toBe(4);
260
+ expect(treeMultimap.count).toBe(8);
261
261
  });
262
262
 
263
263
  it('should perform various operations on a Binary Search Tree with object values', () => {
264
- const objTreeMultimap = new TreeMultimap<number, { key: number; keyA: number }>();
265
- expect(objTreeMultimap).toBeInstanceOf(TreeMultimap);
266
- objTreeMultimap.add([11, { key: 11, keyA: 11 }]);
267
- objTreeMultimap.add([3, { key: 3, keyA: 3 }]);
264
+ const objAVLTreeMultiMap = new AVLTreeMultiMap<number, { key: number; keyA: number }>();
265
+ expect(objAVLTreeMultiMap).toBeInstanceOf(AVLTreeMultiMap);
266
+ objAVLTreeMultiMap.add([11, { key: 11, keyA: 11 }]);
267
+ objAVLTreeMultiMap.add([3, { key: 3, keyA: 3 }]);
268
268
  const values: [number, { key: number; keyA: number }][] = [
269
269
  [15, { key: 15, keyA: 15 }],
270
270
  [1, { key: 1, keyA: 1 }],
@@ -282,23 +282,23 @@ describe('TreeMultimap operations test1', () => {
282
282
  [5, { key: 5, keyA: 5 }]
283
283
  ];
284
284
 
285
- objTreeMultimap.addMany(values);
285
+ objAVLTreeMultiMap.addMany(values);
286
286
 
287
- expect(objTreeMultimap.root).toBeInstanceOf(TreeMultimapNode);
287
+ expect(objAVLTreeMultiMap.root).toBeInstanceOf(AVLTreeMultiMapNode);
288
288
 
289
- if (objTreeMultimap.root) expect(objTreeMultimap.root.key).toBe(6);
289
+ if (objAVLTreeMultiMap.root) expect(objAVLTreeMultiMap.root.key).toBe(6);
290
290
 
291
- expect(objTreeMultimap.count).toBe(16);
291
+ expect(objAVLTreeMultiMap.count).toBe(16);
292
292
 
293
- expect(objTreeMultimap.has(6)).toBe(true);
293
+ expect(objAVLTreeMultiMap.has(6)).toBe(true);
294
294
  });
295
295
  });
296
296
 
297
- describe('TreeMultimap operations test recursively1', () => {
297
+ describe('AVLTreeMultiMap operations test recursively1', () => {
298
298
  it('should perform various operations on a Binary Search Tree with numeric values1', () => {
299
- const treeMultimap = new TreeMultimap<number>([], { iterationType: IterationType.RECURSIVE });
299
+ const treeMultimap = new AVLTreeMultiMap<number>([], { iterationType: IterationType.RECURSIVE });
300
300
 
301
- expect(treeMultimap instanceof TreeMultimap);
301
+ expect(treeMultimap instanceof AVLTreeMultiMap);
302
302
  treeMultimap.add([11, 11]);
303
303
  treeMultimap.add([3, 3]);
304
304
  const idAndValues: [number, number][] = [
@@ -320,7 +320,7 @@ describe('TreeMultimap operations test recursively1', () => {
320
320
  [5, 5]
321
321
  ];
322
322
  treeMultimap.addMany(idAndValues);
323
- expect(treeMultimap.root).toBeInstanceOf(TreeMultimapNode);
323
+ expect(treeMultimap.root).toBeInstanceOf(AVLTreeMultiMapNode);
324
324
 
325
325
  if (treeMultimap.root) expect(treeMultimap.root.key).toBe(6);
326
326
 
@@ -353,17 +353,17 @@ describe('TreeMultimap operations test recursively1', () => {
353
353
  node15 && treeMultimap.dfs(node => (subTreeSum += node.key), 'pre', 15);
354
354
  expect(subTreeSum).toBe(31);
355
355
  let lesserSum = 0;
356
- treeMultimap.lesserOrGreaterTraverse((node: TreeMultimapNode<number>) => (lesserSum += node.key), CP.lt, 10);
357
- expect(lesserSum).toBe(21);
356
+ treeMultimap.lesserOrGreaterTraverse((node: AVLTreeMultiMapNode<number>) => (lesserSum += node.key), CP.lt, 10);
357
+ expect(lesserSum).toBe(45);
358
358
 
359
- expect(node15 instanceof TreeMultimapNode);
360
- if (node15 instanceof TreeMultimapNode) {
359
+ expect(node15 instanceof AVLTreeMultiMapNode);
360
+ if (node15 instanceof AVLTreeMultiMapNode) {
361
361
  const subTreeAdd = treeMultimap.dfs(node => (node.count += 1), 'pre', 15);
362
362
  expect(subTreeAdd);
363
363
  }
364
364
  const node11 = treeMultimap.getNode(11);
365
- expect(node11 instanceof TreeMultimapNode);
366
- if (node11 instanceof TreeMultimapNode) {
365
+ expect(node11 instanceof AVLTreeMultiMapNode);
366
+ if (node11 instanceof AVLTreeMultiMapNode) {
367
367
  const allGreaterNodesAdded = treeMultimap.lesserOrGreaterTraverse(node => (node.count += 2), CP.gt, 11);
368
368
  expect(allGreaterNodesAdded);
369
369
  }
@@ -511,14 +511,14 @@ describe('TreeMultimap operations test recursively1', () => {
511
511
  expect(bfsNodes[1].key).toBe(2);
512
512
  expect(bfsNodes[2].key).toBe(16);
513
513
 
514
- expect(treeMultimap.count).toBe(4);
514
+ expect(treeMultimap.count).toBe(8);
515
515
  });
516
516
 
517
517
  it('should perform various operations on a Binary Search Tree with object values', () => {
518
- const objTreeMultimap = new TreeMultimap<number, { key: number; keyA: number }>();
519
- expect(objTreeMultimap).toBeInstanceOf(TreeMultimap);
520
- objTreeMultimap.add([11, { key: 11, keyA: 11 }]);
521
- objTreeMultimap.add([3, { key: 3, keyA: 3 }]);
518
+ const objAVLTreeMultiMap = new AVLTreeMultiMap<number, { key: number; keyA: number }>();
519
+ expect(objAVLTreeMultiMap).toBeInstanceOf(AVLTreeMultiMap);
520
+ objAVLTreeMultiMap.add([11, { key: 11, keyA: 11 }]);
521
+ objAVLTreeMultiMap.add([3, { key: 3, keyA: 3 }]);
522
522
  const values: [number, { key: number; keyA: number }][] = [
523
523
  [15, { key: 15, keyA: 15 }],
524
524
  [1, { key: 1, keyA: 1 }],
@@ -536,27 +536,27 @@ describe('TreeMultimap operations test recursively1', () => {
536
536
  [5, { key: 5, keyA: 5 }]
537
537
  ];
538
538
 
539
- objTreeMultimap.addMany(values);
539
+ objAVLTreeMultiMap.addMany(values);
540
540
 
541
- expect(objTreeMultimap.root).toBeInstanceOf(TreeMultimapNode);
541
+ expect(objAVLTreeMultiMap.root).toBeInstanceOf(AVLTreeMultiMapNode);
542
542
 
543
- if (objTreeMultimap.root) expect(objTreeMultimap.root.key).toBe(6);
543
+ if (objAVLTreeMultiMap.root) expect(objAVLTreeMultiMap.root.key).toBe(6);
544
544
 
545
- expect(objTreeMultimap.count).toBe(16);
545
+ expect(objAVLTreeMultiMap.count).toBe(16);
546
546
 
547
- expect(objTreeMultimap.has(6)).toBe(true);
547
+ expect(objAVLTreeMultiMap.has(6)).toBe(true);
548
548
  });
549
549
  });
550
550
 
551
- describe('TreeMultimap Performance test', function () {
552
- const treeMS = new TreeMultimap<number, number>();
551
+ describe('AVLTreeMultiMap Performance test', function () {
552
+ const treeMS = new AVLTreeMultiMap<number, number>();
553
553
  const inputSize = 100000; // Adjust input sizes as needed
554
554
 
555
555
  beforeEach(() => {
556
556
  treeMS.clear();
557
557
  });
558
558
 
559
- it(`Observe the time consumption of TreeMultimap.dfs be good`, function () {
559
+ it(`Observe the time consumption of AVLTreeMultiMap.dfs be good`, function () {
560
560
  const startDFS = performance.now();
561
561
  const dfs = treeMS.dfs(node => node);
562
562
  isDebug && console.log('---bfs', performance.now() - startDFS, dfs.length);
@@ -574,7 +574,7 @@ describe('TreeMultimap Performance test', function () {
574
574
  });
575
575
 
576
576
  it('should the clone method', () => {
577
- function checkTreeStructure(treeMultimap: TreeMultimap<string, number>) {
577
+ function checkTreeStructure(treeMultimap: AVLTreeMultiMap<string, number>) {
578
578
  expect(treeMultimap.size).toBe(4);
579
579
  expect(treeMultimap.root?.key).toBe('2');
580
580
  expect(treeMultimap.root?.left?.key).toBe('1');
@@ -585,7 +585,7 @@ describe('TreeMultimap Performance test', function () {
585
585
  expect(treeMultimap.root?.right?.right?.key).toBe('5');
586
586
  }
587
587
 
588
- const treeMultimap = new TreeMultimap<string, number>();
588
+ const treeMultimap = new AVLTreeMultiMap<string, number>();
589
589
  treeMultimap.addMany([
590
590
  ['2', 2],
591
591
  ['4', 4],
@@ -611,10 +611,10 @@ describe('TreeMultimap Performance test', function () {
611
611
  });
612
612
  });
613
613
 
614
- describe('TreeMultimap iterative methods test', () => {
615
- let treeMM: TreeMultimap<number, string>;
614
+ describe('AVLTreeMultiMap iterative methods test', () => {
615
+ let treeMM: AVLTreeMultiMap<number, string>;
616
616
  beforeEach(() => {
617
- treeMM = new TreeMultimap<number, string>();
617
+ treeMM = new AVLTreeMultiMap<number, string>();
618
618
  treeMM.add(1, 'a', 10);
619
619
  treeMM.add([2, 'b'], undefined, 10);
620
620
  treeMM.add([3, 'c'], undefined, 1);
@@ -1,4 +1,4 @@
1
- import { AVLTree, BST, BSTVariant, IterationType, RedBlackTree, TreeMultimap } 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', () => {
@@ -146,10 +146,9 @@ describe('Overall BinaryTree Test', () => {
146
146
  expect(clonedAVL.bfs()).toEqual([3, 5, 1, 9, 4, 2, 6]);
147
147
  });
148
148
 
149
- it('Should clone a TreeMultimap works fine', () => {
150
- const tmm = new TreeMultimap<number>([3, 6, 7, 1, 9], {
149
+ it('Should clone a TreeMultiMap works fine', () => {
150
+ const tmm = new TreeMultiMap<number>([3, 6, 7, 1, 9], {
151
151
  iterationType: IterationType.RECURSIVE,
152
- variant: BSTVariant.INVERSE,
153
152
  extractor: key => key
154
153
  });
155
154
  expect(tmm.size).toBe(5);
@@ -159,40 +158,40 @@ describe('Overall BinaryTree Test', () => {
159
158
  tmm.add(5);
160
159
  tmm.add(4);
161
160
  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);
161
+ expect(tmm.root?.key).toBe(6);
162
+ expect(tmm.root?.left?.key).toBe(1);
163
+ expect(tmm.root?.left?.left?.key).toBe(NaN);
164
+ expect(tmm.root?.right?.key).toBe(7);
165
+ expect(tmm.root?.right?.left?.key).toBe(NaN);
166
+ expect(tmm.getNodeByKey(7)?.left?.key).toBe(NaN);
167
+ expect(tmm.getHeight()).toBe(5);
169
168
  expect(tmm.has(9)).toBe(true);
170
169
  expect(tmm.has(7)).toBe(true);
171
170
  expect(tmm.delete(7)[0].deleted?.key).toBe(7);
172
171
  expect(tmm.has(7)).toBe(false);
173
172
  expect(tmm.size).toBe(7);
174
173
  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);
174
+ expect(tmm.root?.key).toBe(6);
175
+ expect(tmm.root?.left?.key).toBe(1);
176
+ expect(tmm.root?.right?.key).toBe(9);
177
+ expect(tmm.root?.right?.left?.key).toBe(NaN);
178
+ expect(tmm.getNodeByKey(6)?.left?.key).toBe(1);
179
+ expect(tmm.getHeight()).toBe(5);
181
180
  expect(tmm.has(9)).toBe(true);
182
181
  expect(tmm.has(7)).toBe(false);
183
- expect(tmm.bfs()).toEqual([3, 5, 1, 9, 4, 2, 6]);
182
+ expect(tmm.bfs()).toEqual([6, 1, 9, 3, 2, 5, 4]);
184
183
  const clonedTMM = tmm.clone();
185
184
  expect(clonedTMM.size).toBe(7);
186
185
  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);
186
+ expect(clonedTMM.root?.key).toBe(6);
187
+ expect(clonedTMM.root?.left?.key).toBe(1);
188
+ expect(clonedTMM.root?.right?.key).toBe(9);
189
+ expect(clonedTMM.root?.right?.left?.key).toBe(NaN);
190
+ expect(clonedTMM.getNodeByKey(6)?.left?.key).toBe(1);
191
+ expect(clonedTMM.getHeight()).toBe(5);
193
192
  expect(clonedTMM.has(9)).toBe(true);
194
193
  expect(clonedTMM.has(7)).toBe(false);
195
- expect(clonedTMM.bfs()).toEqual([3, 5, 1, 9, 4, 2, 6]);
194
+ expect(clonedTMM.bfs()).toEqual([6, 1, 9, 3, 2, 5, 4]);
196
195
  });
197
196
 
198
197
  it('Should clone a RedBlackTree works fine', () => {