data-structure-typed 1.49.3 → 1.49.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 (162) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +70 -69
  3. package/README_zh-CN.md +44 -49
  4. package/benchmark/report.html +16 -16
  5. package/benchmark/report.json +187 -187
  6. package/dist/cjs/data-structures/base/iterable-base.d.ts +1 -1
  7. package/dist/cjs/data-structures/base/iterable-base.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 +2 -14
  10. package/dist/cjs/data-structures/binary-tree/binary-tree.js +19 -49
  11. package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
  12. package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
  13. package/dist/cjs/data-structures/binary-tree/rb-tree.js.map +1 -1
  14. package/dist/cjs/data-structures/binary-tree/tree-multimap.d.ts +0 -16
  15. package/dist/cjs/data-structures/binary-tree/tree-multimap.js +1 -43
  16. package/dist/cjs/data-structures/binary-tree/tree-multimap.js.map +1 -1
  17. package/dist/cjs/data-structures/graph/abstract-graph.d.ts +2 -11
  18. package/dist/cjs/data-structures/graph/abstract-graph.js +3 -19
  19. package/dist/cjs/data-structures/graph/abstract-graph.js.map +1 -1
  20. package/dist/cjs/data-structures/graph/directed-graph.js +4 -0
  21. package/dist/cjs/data-structures/graph/directed-graph.js.map +1 -1
  22. package/dist/cjs/data-structures/graph/map-graph.js.map +1 -1
  23. package/dist/cjs/data-structures/graph/undirected-graph.js.map +1 -1
  24. package/dist/cjs/data-structures/hash/hash-map.d.ts +1 -1
  25. package/dist/cjs/data-structures/hash/hash-map.js +2 -2
  26. package/dist/cjs/data-structures/hash/hash-map.js.map +1 -1
  27. package/dist/cjs/data-structures/heap/heap.js +2 -3
  28. package/dist/cjs/data-structures/heap/heap.js.map +1 -1
  29. package/dist/cjs/data-structures/heap/max-heap.js.map +1 -1
  30. package/dist/cjs/data-structures/heap/min-heap.js.map +1 -1
  31. package/dist/cjs/data-structures/linked-list/singly-linked-list.d.ts +2 -2
  32. package/dist/cjs/data-structures/linked-list/singly-linked-list.js.map +1 -1
  33. package/dist/cjs/data-structures/matrix/index.d.ts +0 -2
  34. package/dist/cjs/data-structures/matrix/index.js +0 -2
  35. package/dist/cjs/data-structures/matrix/index.js.map +1 -1
  36. package/dist/cjs/data-structures/matrix/matrix.d.ts +128 -10
  37. package/dist/cjs/data-structures/matrix/matrix.js +400 -15
  38. package/dist/cjs/data-structures/matrix/matrix.js.map +1 -1
  39. package/dist/cjs/data-structures/priority-queue/min-priority-queue.js.map +1 -1
  40. package/dist/cjs/data-structures/queue/deque.d.ts +2 -2
  41. package/dist/cjs/data-structures/queue/deque.js +5 -7
  42. package/dist/cjs/data-structures/queue/deque.js.map +1 -1
  43. package/dist/cjs/data-structures/queue/queue.d.ts +1 -1
  44. package/dist/cjs/types/data-structures/base/base.d.ts +1 -1
  45. package/dist/cjs/types/data-structures/heap/heap.d.ts +1 -1
  46. package/dist/cjs/types/data-structures/priority-queue/priority-queue.d.ts +1 -1
  47. package/dist/cjs/utils/utils.d.ts +1 -0
  48. package/dist/cjs/utils/utils.js +6 -1
  49. package/dist/cjs/utils/utils.js.map +1 -1
  50. package/dist/mjs/data-structures/base/iterable-base.d.ts +1 -1
  51. package/dist/mjs/data-structures/binary-tree/avl-tree.js +2 -1
  52. package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +2 -14
  53. package/dist/mjs/data-structures/binary-tree/binary-tree.js +20 -50
  54. package/dist/mjs/data-structures/binary-tree/bst.js +2 -1
  55. package/dist/mjs/data-structures/binary-tree/rb-tree.js +2 -1
  56. package/dist/mjs/data-structures/binary-tree/tree-multimap.d.ts +0 -16
  57. package/dist/mjs/data-structures/binary-tree/tree-multimap.js +3 -44
  58. package/dist/mjs/data-structures/graph/abstract-graph.d.ts +2 -11
  59. package/dist/mjs/data-structures/graph/abstract-graph.js +4 -20
  60. package/dist/mjs/data-structures/graph/directed-graph.js +4 -0
  61. package/dist/mjs/data-structures/hash/hash-map.d.ts +1 -1
  62. package/dist/mjs/data-structures/hash/hash-map.js +2 -2
  63. package/dist/mjs/data-structures/heap/heap.js +2 -3
  64. package/dist/mjs/data-structures/linked-list/singly-linked-list.d.ts +2 -2
  65. package/dist/mjs/data-structures/linked-list/singly-linked-list.js +1 -1
  66. package/dist/mjs/data-structures/matrix/index.d.ts +0 -2
  67. package/dist/mjs/data-structures/matrix/index.js +0 -2
  68. package/dist/mjs/data-structures/matrix/matrix.d.ts +128 -10
  69. package/dist/mjs/data-structures/matrix/matrix.js +399 -16
  70. package/dist/mjs/data-structures/queue/deque.d.ts +2 -2
  71. package/dist/mjs/data-structures/queue/deque.js +7 -9
  72. package/dist/mjs/data-structures/queue/queue.d.ts +1 -1
  73. package/dist/mjs/data-structures/queue/queue.js +1 -1
  74. package/dist/mjs/types/data-structures/base/base.d.ts +1 -1
  75. package/dist/mjs/types/data-structures/heap/heap.d.ts +1 -1
  76. package/dist/mjs/types/data-structures/priority-queue/priority-queue.d.ts +1 -1
  77. package/dist/mjs/utils/utils.d.ts +1 -0
  78. package/dist/mjs/utils/utils.js +4 -0
  79. package/dist/umd/data-structure-typed.js +361 -542
  80. package/dist/umd/data-structure-typed.min.js +2 -2
  81. package/dist/umd/data-structure-typed.min.js.map +1 -1
  82. package/package.json +4 -3
  83. package/src/data-structures/base/index.ts +1 -1
  84. package/src/data-structures/base/iterable-base.ts +7 -10
  85. package/src/data-structures/binary-tree/avl-tree.ts +15 -8
  86. package/src/data-structures/binary-tree/binary-tree.ts +57 -74
  87. package/src/data-structures/binary-tree/bst.ts +16 -13
  88. package/src/data-structures/binary-tree/rb-tree.ts +16 -10
  89. package/src/data-structures/binary-tree/tree-multimap.ts +11 -48
  90. package/src/data-structures/graph/abstract-graph.ts +14 -24
  91. package/src/data-structures/graph/directed-graph.ts +8 -6
  92. package/src/data-structures/graph/map-graph.ts +6 -1
  93. package/src/data-structures/graph/undirected-graph.ts +4 -7
  94. package/src/data-structures/hash/hash-map.ts +18 -16
  95. package/src/data-structures/heap/heap.ts +7 -10
  96. package/src/data-structures/heap/max-heap.ts +2 -1
  97. package/src/data-structures/heap/min-heap.ts +2 -1
  98. package/src/data-structures/linked-list/singly-linked-list.ts +3 -5
  99. package/src/data-structures/matrix/index.ts +0 -2
  100. package/src/data-structures/matrix/matrix.ts +442 -13
  101. package/src/data-structures/priority-queue/min-priority-queue.ts +11 -10
  102. package/src/data-structures/queue/deque.ts +18 -39
  103. package/src/data-structures/queue/queue.ts +1 -1
  104. package/src/interfaces/binary-tree.ts +7 -2
  105. package/src/types/common.ts +4 -4
  106. package/src/types/data-structures/base/base.ts +14 -3
  107. package/src/types/data-structures/base/index.ts +1 -1
  108. package/src/types/data-structures/graph/abstract-graph.ts +4 -2
  109. package/src/types/data-structures/hash/hash-map.ts +3 -3
  110. package/src/types/data-structures/heap/heap.ts +2 -2
  111. package/src/types/data-structures/priority-queue/priority-queue.ts +2 -2
  112. package/src/utils/utils.ts +7 -1
  113. package/test/integration/avl-tree.test.ts +18 -1
  114. package/test/integration/bst.test.ts +2 -2
  115. package/test/performance/data-structures/binary-tree/rb-tree.test.ts +1 -1
  116. package/test/performance/data-structures/comparison/comparison.test.ts +18 -23
  117. package/test/performance/data-structures/hash/hash-map.test.ts +3 -4
  118. package/test/performance/data-structures/linked-list/doubly-linked-list.test.ts +16 -28
  119. package/test/performance/data-structures/linked-list/singly-linked-list.test.ts +4 -12
  120. package/test/performance/data-structures/queue/deque.test.ts +11 -12
  121. package/test/performance/data-structures/queue/queue.test.ts +15 -14
  122. package/test/performance/data-structures/stack/stack.test.ts +11 -11
  123. package/test/performance/reportor.ts +14 -15
  124. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +14 -3
  125. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +65 -15
  126. package/test/unit/data-structures/binary-tree/bst.test.ts +52 -26
  127. package/test/unit/data-structures/binary-tree/overall.test.ts +16 -18
  128. package/test/unit/data-structures/binary-tree/rb-tree.test.ts +17 -6
  129. package/test/unit/data-structures/binary-tree/tree-multimap.test.ts +37 -21
  130. package/test/unit/data-structures/graph/abstract-graph.test.ts +11 -0
  131. package/test/unit/data-structures/graph/directed-graph.test.ts +112 -40
  132. package/test/unit/data-structures/graph/undirected-graph.test.ts +63 -33
  133. package/test/unit/data-structures/hash/hash-map.test.ts +64 -23
  134. package/test/unit/data-structures/hash/hash-table.test.ts +0 -4
  135. package/test/unit/data-structures/heap/heap.test.ts +0 -1
  136. package/test/unit/data-structures/heap/min-heap.test.ts +6 -5
  137. package/test/unit/data-structures/linked-list/doubly-linked-list.test.ts +30 -4
  138. package/test/unit/data-structures/linked-list/singly-linked-list.test.ts +3 -4
  139. package/test/unit/data-structures/matrix/matrix.test.ts +345 -52
  140. package/test/unit/data-structures/priority-queue/max-priority-queue.test.ts +1 -1
  141. package/test/unit/data-structures/priority-queue/priority-queue.test.ts +0 -1
  142. package/test/unit/data-structures/queue/deque.test.ts +0 -6
  143. package/test/unit/data-structures/queue/queue.test.ts +1 -1
  144. package/test/unit/data-structures/stack/stack.test.ts +3 -4
  145. package/test/unit/unrestricted-interconversion.test.ts +50 -44
  146. package/test/utils/big-o.ts +14 -14
  147. package/test/utils/performanc.ts +1 -1
  148. package/typedoc.json +30 -0
  149. package/dist/cjs/data-structures/matrix/matrix2d.d.ts +0 -107
  150. package/dist/cjs/data-structures/matrix/matrix2d.js +0 -200
  151. package/dist/cjs/data-structures/matrix/matrix2d.js.map +0 -1
  152. package/dist/cjs/data-structures/matrix/vector2d.d.ts +0 -200
  153. package/dist/cjs/data-structures/matrix/vector2d.js +0 -291
  154. package/dist/cjs/data-structures/matrix/vector2d.js.map +0 -1
  155. package/dist/mjs/data-structures/matrix/matrix2d.d.ts +0 -107
  156. package/dist/mjs/data-structures/matrix/matrix2d.js +0 -196
  157. package/dist/mjs/data-structures/matrix/vector2d.d.ts +0 -200
  158. package/dist/mjs/data-structures/matrix/vector2d.js +0 -289
  159. package/src/data-structures/matrix/matrix2d.ts +0 -211
  160. package/src/data-structures/matrix/vector2d.ts +0 -315
  161. package/test/unit/data-structures/matrix/matrix2d.test.ts +0 -345
  162. package/test/unit/data-structures/matrix/vector2d.test.ts +0 -171
@@ -265,7 +265,22 @@ describe('BinaryTree', () => {
265
265
  tree.clear();
266
266
  tree.addMany([-10, -10, -10, 9, 9, 20, null, null, 15, 7, 8, null, 2, null, 6, null, null, 8, 8, 8]);
267
267
 
268
- expect(tree.bfs(node => node ? node.key : null, undefined, undefined, true)).toEqual([-10, 9, 20, null, null, 15, 7, 8, null, 2, null, 6, null, null])
268
+ expect(tree.bfs(node => (node ? node.key : null), undefined, undefined, true)).toEqual([
269
+ -10,
270
+ 9,
271
+ 20,
272
+ null,
273
+ null,
274
+ 15,
275
+ 7,
276
+ 8,
277
+ null,
278
+ 2,
279
+ null,
280
+ 6,
281
+ null,
282
+ null
283
+ ]);
269
284
  });
270
285
  });
271
286
 
@@ -525,18 +540,12 @@ describe('BinaryTree', () => {
525
540
  tree.add([3, 'B']);
526
541
  tree.add([7, 'C']);
527
542
 
528
- const nodes = tree.getNodes('B', (node) => node.value);
543
+ const nodes = tree.getNodes('B', node => node.value);
529
544
 
530
545
  expect(nodes.length).toBe(1);
531
546
  expect(nodes[0].key).toBe(3);
532
547
 
533
- const nodesRec = tree.getNodes(
534
- 'B',
535
- (node) => node.value,
536
- false,
537
- tree.root,
538
- IterationType.RECURSIVE
539
- );
548
+ const nodesRec = tree.getNodes('B', node => node.value, false, tree.root, IterationType.RECURSIVE);
540
549
 
541
550
  expect(nodesRec.length).toBe(1);
542
551
  expect(nodesRec[0].key).toBe(3);
@@ -548,9 +557,17 @@ describe('BinaryTree', () => {
548
557
  tree.add([7, 'C']);
549
558
 
550
559
  tree.iterationType = IterationType.ITERATIVE;
551
- expect([...tree]).toEqual([[3, "B"], [5, "A"], [7, "C"]]);
560
+ expect([...tree]).toEqual([
561
+ [3, 'B'],
562
+ [5, 'A'],
563
+ [7, 'C']
564
+ ]);
552
565
  tree.iterationType = IterationType.RECURSIVE;
553
- expect([...tree]).toEqual([[3, "B"], [5, "A"], [7, "C"]]);
566
+ expect([...tree]).toEqual([
567
+ [3, 'B'],
568
+ [5, 'A'],
569
+ [7, 'C']
570
+ ]);
554
571
  tree.iterationType = IterationType.ITERATIVE;
555
572
 
556
573
  const result = tree.morris();
@@ -600,13 +617,20 @@ describe('BinaryTree iterative methods test', () => {
600
617
  test('filter should return a new tree with filtered elements', () => {
601
618
  const filteredTree = binaryTree.filter((value, key) => key > 1);
602
619
  expect(filteredTree.size).toBe(2);
603
- expect([...filteredTree]).toEqual([[3, 'c'], [2, 'b']]);
620
+ expect([...filteredTree]).toEqual([
621
+ [3, 'c'],
622
+ [2, 'b']
623
+ ]);
604
624
  });
605
625
 
606
626
  test('map should return a new tree with modified elements', () => {
607
627
  const mappedTree = binaryTree.map((value, key) => (key * 2).toString());
608
628
  expect(mappedTree.size).toBe(3);
609
- expect([...mappedTree]).toEqual([[1, '2'], [2, '4'], [3, '6']]);
629
+ expect([...mappedTree]).toEqual([
630
+ [1, '2'],
631
+ [2, '4'],
632
+ [3, '6']
633
+ ]);
610
634
  });
611
635
 
612
636
  test('reduce should accumulate values', () => {
@@ -621,7 +645,11 @@ describe('BinaryTree iterative methods test', () => {
621
645
  }
622
646
 
623
647
  expect(entries.length).toBe(3);
624
- expect(entries).toEqual([[2, 'b'], [1, 'a'], [3, 'c']]);
648
+ expect(entries).toEqual([
649
+ [2, 'b'],
650
+ [1, 'a'],
651
+ [3, 'c']
652
+ ]);
625
653
  });
626
654
 
627
655
  test('should clone work well', () => {
@@ -639,4 +667,26 @@ describe('BinaryTree iterative methods test', () => {
639
667
  const values = binaryTree.values();
640
668
  expect([...values]).toEqual(['b', 'a', 'c']);
641
669
  });
642
- });
670
+
671
+ test('should iterative method return undefined when the node is null', () => {
672
+ const tree = new BinaryTree();
673
+ tree.addMany([-10, -10, -10, 9, 9, 20, null, null, 15, 7, 8, null, 2, null, 6, null, null, 8, 8, 8]);
674
+ const bfsResult = tree.bfs(undefined, undefined, undefined, true);
675
+ expect(bfsResult).toEqual([
676
+ -10,
677
+ 9,
678
+ 20,
679
+ undefined,
680
+ undefined,
681
+ 15,
682
+ 7,
683
+ 8,
684
+ undefined,
685
+ 2,
686
+ undefined,
687
+ 6,
688
+ undefined,
689
+ undefined
690
+ ]);
691
+ });
692
+ });
@@ -9,7 +9,22 @@ describe('BST operations test', () => {
9
9
  expect(bst).toBeInstanceOf(BST);
10
10
  bst.add([11, 11]);
11
11
  bst.add([3, 3]);
12
- const idsAndValues: [number, number][] = [[15, 15], [1, 1], [8, 8], [13, 13], [16, 16], [2, 2], [6, 6], [9, 9], [12, 12], [14, 14], [4, 4], [7, 7], [10, 10], [5, 5]];
12
+ const idsAndValues: [number, number][] = [
13
+ [15, 15],
14
+ [1, 1],
15
+ [8, 8],
16
+ [13, 13],
17
+ [16, 16],
18
+ [2, 2],
19
+ [6, 6],
20
+ [9, 9],
21
+ [12, 12],
22
+ [14, 14],
23
+ [4, 4],
24
+ [7, 7],
25
+ [10, 10],
26
+ [5, 5]
27
+ ];
13
28
  bst.addMany(idsAndValues, undefined, false);
14
29
  expect(bst.root).toBeInstanceOf(BSTNode);
15
30
 
@@ -194,22 +209,26 @@ describe('BST operations test', () => {
194
209
  objBST.add([11, { name: '11', age: 11 }]);
195
210
  objBST.add([3, { name: '3', age: 3 }]);
196
211
 
197
- objBST.addMany([15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5], [
198
- { "name": "Alice", "age": 15 },
199
- { "name": "Bob", "age": 1 },
200
- { "name": "Charlie", "age": 8 },
201
- { "name": "David", "age": 13 },
202
- { "name": "Emma", "age": 16 },
203
- { "name": "Frank", "age": 2 },
204
- { "name": "Grace", "age": 6 },
205
- { "name": "Hannah", "age": 9 },
206
- { "name": "Isaac", "age": 12 },
207
- { "name": "Jack", "age": 14 },
208
- { "name": "Katie", "age": 4 },
209
- { "name": "Liam", "age": 7 },
210
- { "name": "Mia", "age": 10 },
211
- { "name": "Noah", "age": 5 }
212
- ], false);
212
+ objBST.addMany(
213
+ [15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5],
214
+ [
215
+ { name: 'Alice', age: 15 },
216
+ { name: 'Bob', age: 1 },
217
+ { name: 'Charlie', age: 8 },
218
+ { name: 'David', age: 13 },
219
+ { name: 'Emma', age: 16 },
220
+ { name: 'Frank', age: 2 },
221
+ { name: 'Grace', age: 6 },
222
+ { name: 'Hannah', age: 9 },
223
+ { name: 'Isaac', age: 12 },
224
+ { name: 'Jack', age: 14 },
225
+ { name: 'Katie', age: 4 },
226
+ { name: 'Liam', age: 7 },
227
+ { name: 'Mia', age: 10 },
228
+ { name: 'Noah', age: 5 }
229
+ ],
230
+ false
231
+ );
213
232
 
214
233
  expect(objBST.root).toBeInstanceOf(BSTNode);
215
234
 
@@ -596,11 +615,7 @@ describe('BST operations test recursively', () => {
596
615
  [5, { key: 5, keyA: 5 }]
597
616
  ];
598
617
 
599
- objBST.addMany(
600
- entries,
601
- undefined,
602
- false
603
- );
618
+ objBST.addMany(entries, undefined, false);
604
619
 
605
620
  expect(objBST.root).toBeInstanceOf(BSTNode);
606
621
 
@@ -878,13 +893,20 @@ describe('BST iterative methods test', () => {
878
893
  test('filter should return a new tree with filtered elements', () => {
879
894
  const filteredTree = bst.filter((value, key) => key > 1);
880
895
  expect(filteredTree.size).toBe(2);
881
- expect([...filteredTree]).toEqual([[2, 'b'], [3, 'c']]);
896
+ expect([...filteredTree]).toEqual([
897
+ [2, 'b'],
898
+ [3, 'c']
899
+ ]);
882
900
  });
883
901
 
884
902
  test('map should return a new tree with modified elements', () => {
885
903
  const mappedTree = bst.map((value, key) => (key * 2).toString());
886
904
  expect(mappedTree.size).toBe(3);
887
- expect([...mappedTree]).toEqual([[1, '2'], [2, '4'], [3, '6']]);
905
+ expect([...mappedTree]).toEqual([
906
+ [1, '2'],
907
+ [2, '4'],
908
+ [3, '6']
909
+ ]);
888
910
  });
889
911
 
890
912
  test('reduce should accumulate values', () => {
@@ -899,7 +921,11 @@ describe('BST iterative methods test', () => {
899
921
  }
900
922
 
901
923
  expect(entries.length).toBe(3);
902
- expect(entries).toEqual([[1, 'a'], [2, 'b'], [3, 'c']]);
924
+ expect(entries).toEqual([
925
+ [1, 'a'],
926
+ [2, 'b'],
927
+ [3, 'c']
928
+ ]);
903
929
  });
904
930
 
905
931
  test('should clone work well', () => {
@@ -917,4 +943,4 @@ describe('BST iterative methods test', () => {
917
943
  const values = bst.values();
918
944
  expect([...values]).toEqual(['a', 'b', 'c']);
919
945
  });
920
- });
946
+ });
@@ -33,24 +33,22 @@ describe('Overall BinaryTree Test', () => {
33
33
  objBST.add([11, { key: 11, keyA: 11 }]);
34
34
  objBST.add([3, { key: 3, keyA: 3 }]);
35
35
 
36
- objBST.addMany(
37
- [
38
- [15, { key: 15, keyA: 15 }],
39
- [1, { key: 1, keyA: 1 }],
40
- [8, { key: 8, keyA: 8 }],
41
- [13, { key: 13, keyA: 13 }],
42
- [16, { key: 16, keyA: 16 }],
43
- [2, { key: 2, keyA: 2 }],
44
- [6, { key: 6, keyA: 6 }],
45
- [9, { key: 9, keyA: 9 }],
46
- [12, { key: 12, keyA: 12 }],
47
- [14, { key: 14, keyA: 14 }],
48
- [4, { key: 4, keyA: 4 }],
49
- [7, { key: 7, keyA: 7 }],
50
- [10, { key: 10, keyA: 10 }],
51
- [5, { key: 5, keyA: 5 }]
52
- ]
53
- );
36
+ objBST.addMany([
37
+ [15, { key: 15, keyA: 15 }],
38
+ [1, { key: 1, keyA: 1 }],
39
+ [8, { key: 8, keyA: 8 }],
40
+ [13, { key: 13, keyA: 13 }],
41
+ [16, { key: 16, keyA: 16 }],
42
+ [2, { key: 2, keyA: 2 }],
43
+ [6, { key: 6, keyA: 6 }],
44
+ [9, { key: 9, keyA: 9 }],
45
+ [12, { key: 12, keyA: 12 }],
46
+ [14, { key: 14, keyA: 14 }],
47
+ [4, { key: 4, keyA: 4 }],
48
+ [7, { key: 7, keyA: 7 }],
49
+ [10, { key: 10, keyA: 10 }],
50
+ [5, { key: 5, keyA: 5 }]
51
+ ]);
54
52
 
55
53
  objBST.delete(11);
56
54
 
@@ -501,9 +501,9 @@ describe('RedBlackTree', () => {
501
501
  expect(tree.isAVLBalanced()).toBe(true);
502
502
 
503
503
  tree.clear();
504
- tree.addMany([10, 20, 30, 40, 50, 60])
504
+ tree.addMany([10, 20, 30, 40, 50, 60]);
505
505
  expect(tree.isAVLBalanced()).toBe(false);
506
- })
506
+ });
507
507
  });
508
508
 
509
509
  describe('RedBlackTree iterative methods test', () => {
@@ -537,13 +537,20 @@ describe('RedBlackTree iterative methods test', () => {
537
537
  test('filter should return a new tree with filtered elements', () => {
538
538
  const filteredTree = rbTree.filter((value, key) => key > 1);
539
539
  expect(filteredTree.size).toBe(2);
540
- expect([...filteredTree]).toEqual([[2, 'b'], [3, 'c']]);
540
+ expect([...filteredTree]).toEqual([
541
+ [2, 'b'],
542
+ [3, 'c']
543
+ ]);
541
544
  });
542
545
 
543
546
  test('map should return a new tree with modified elements', () => {
544
547
  const mappedTree = rbTree.map((value, key) => (key * 2).toString());
545
548
  expect(mappedTree.size).toBe(3);
546
- expect([...mappedTree]).toEqual([[1, '2'], [2, '4'], [3, '6']]);
549
+ expect([...mappedTree]).toEqual([
550
+ [1, '2'],
551
+ [2, '4'],
552
+ [3, '6']
553
+ ]);
547
554
  });
548
555
 
549
556
  test('reduce should accumulate values', () => {
@@ -558,6 +565,10 @@ describe('RedBlackTree iterative methods test', () => {
558
565
  }
559
566
 
560
567
  expect(entries.length).toBe(3);
561
- expect(entries).toEqual([[1, 'a'], [2, 'b'], [3, 'c']]);
568
+ expect(entries).toEqual([
569
+ [1, 'a'],
570
+ [2, 'b'],
571
+ [3, 'c']
572
+ ]);
562
573
  });
563
- });
574
+ });
@@ -15,21 +15,30 @@ describe('TreeMultimap count', () => {
15
15
  let tm: TreeMultimap<number>;
16
16
  beforeEach(() => {
17
17
  tm = new TreeMultimap<number>();
18
-
19
- })
18
+ });
20
19
  it('Should added isolated node count ', () => {
21
- tm.addMany([[1, 1], [2, 2], [3, 3], [4, 4], [5, 5]]);
20
+ tm.addMany([
21
+ [1, 1],
22
+ [2, 2],
23
+ [3, 3],
24
+ [4, 4],
25
+ [5, 5]
26
+ ]);
22
27
  const newNode = new TreeMultimapNode(3, 33, 10);
23
28
  tm.add(newNode);
24
- expect(tm.count).toBe(15)
25
- })
29
+ expect(tm.count).toBe(15);
30
+ });
26
31
 
27
32
  it('Should count', () => {
28
- tm.addMany([[1, 1], [2, 2], [3, 3]]);
29
- tm.lesserOrGreaterTraverse(node => node.count += 2, CP.gt, 1);
30
- expect(tm.count).toBe(7)
31
- })
32
- })
33
+ tm.addMany([
34
+ [1, 1],
35
+ [2, 2],
36
+ [3, 3]
37
+ ]);
38
+ tm.lesserOrGreaterTraverse(node => (node.count += 2), CP.gt, 1);
39
+ expect(tm.count).toBe(7);
40
+ });
41
+ });
33
42
 
34
43
  describe('TreeMultimap operations test1', () => {
35
44
  it('should perform various operations on a Binary Search Tree with numeric values1', () => {
@@ -256,7 +265,7 @@ describe('TreeMultimap operations test1', () => {
256
265
  expect(objTreeMultimap).toBeInstanceOf(TreeMultimap);
257
266
  objTreeMultimap.add([11, { key: 11, keyA: 11 }]);
258
267
  objTreeMultimap.add([3, { key: 3, keyA: 3 }]);
259
- const values: [number, { key: number, keyA: number }][] = [
268
+ const values: [number, { key: number; keyA: number }][] = [
260
269
  [15, { key: 15, keyA: 15 }],
261
270
  [1, { key: 1, keyA: 1 }],
262
271
  [8, { key: 8, keyA: 8 }],
@@ -273,9 +282,7 @@ describe('TreeMultimap operations test1', () => {
273
282
  [5, { key: 5, keyA: 5 }]
274
283
  ];
275
284
 
276
- objTreeMultimap.addMany(
277
- values
278
- );
285
+ objTreeMultimap.addMany(values);
279
286
 
280
287
  expect(objTreeMultimap.root).toBeInstanceOf(TreeMultimapNode);
281
288
 
@@ -529,9 +536,7 @@ describe('TreeMultimap operations test recursively1', () => {
529
536
  [5, { key: 5, keyA: 5 }]
530
537
  ];
531
538
 
532
- objTreeMultimap.addMany(
533
- values
534
- );
539
+ objTreeMultimap.addMany(values);
535
540
 
536
541
  expect(objTreeMultimap.root).toBeInstanceOf(TreeMultimapNode);
537
542
 
@@ -632,13 +637,20 @@ describe('TreeMultimap iterative methods test', () => {
632
637
  test('filter should return a new tree with filtered elements', () => {
633
638
  const filteredTree = treeMM.filter((value, key) => key > 1);
634
639
  expect(filteredTree.size).toBe(2);
635
- expect([...filteredTree]).toEqual([[2, 'b'], [3, 'c']]);
640
+ expect([...filteredTree]).toEqual([
641
+ [2, 'b'],
642
+ [3, 'c']
643
+ ]);
636
644
  });
637
645
 
638
646
  test('map should return a new tree with modified elements', () => {
639
647
  const mappedTree = treeMM.map((value, key) => (key * 2).toString());
640
648
  expect(mappedTree.size).toBe(3);
641
- expect([...mappedTree]).toEqual([[1, '2'], [2, '4'], [3, '6']]);
649
+ expect([...mappedTree]).toEqual([
650
+ [1, '2'],
651
+ [2, '4'],
652
+ [3, '6']
653
+ ]);
642
654
  });
643
655
 
644
656
  test('reduce should accumulate values', () => {
@@ -653,11 +665,15 @@ describe('TreeMultimap iterative methods test', () => {
653
665
  }
654
666
 
655
667
  expect(entries.length).toBe(3);
656
- expect(entries).toEqual([[1, 'a'], [2, 'b'], [3, 'c']]);
668
+ expect(entries).toEqual([
669
+ [1, 'a'],
670
+ [2, 'b'],
671
+ [3, 'c']
672
+ ]);
657
673
  });
658
674
 
659
675
  test('should clone work well', () => {
660
- expect(treeMM.count).toBe(21)
676
+ expect(treeMM.count).toBe(21);
661
677
  const cloned = treeMM.clone();
662
678
  expect(cloned.root?.left?.key).toBe(1);
663
679
  expect(cloned.root?.right?.value).toBe('c');
@@ -66,6 +66,17 @@ class MyGraph<
66
66
  return edge ? undefined : undefined;
67
67
  }
68
68
 
69
+ deleteVertex(vertexOrKey: VertexKey | VO): boolean {
70
+ let vertexKey: VertexKey;
71
+ if (this.isVertexKey(vertexOrKey)) {
72
+ vertexKey = vertexOrKey;
73
+ } else {
74
+ vertexKey = vertexOrKey.key;
75
+ }
76
+ this._vertexMap.delete(vertexKey);
77
+ return true;
78
+ }
79
+
69
80
  protected _addEdge(edge: EO): boolean {
70
81
  return edge ? true : true;
71
82
  }
@@ -378,11 +378,61 @@ describe('Inherit from DirectedGraph and perform operations test2.', () => {
378
378
 
379
379
  expect(predecessor).toBeInstanceOf(Array);
380
380
  expect(predecessor.length).toBe(9);
381
- expect(predecessor[0]).toEqual([vertex2, undefined, vertex2, undefined, vertex3, undefined, vertex4, undefined, undefined]);
382
- expect(predecessor[1]).toEqual([undefined, vertex1, undefined, vertex1, vertex3, undefined, vertex4, undefined, vertex1]);
383
- expect(predecessor[5]).toEqual([undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined]);
384
- expect(predecessor[7]).toEqual([undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined]);
385
- expect(predecessor[8]).toEqual([vertex7, vertex7, vertex7, vertex7, vertex7, undefined, undefined, undefined, vertex7]);
381
+ expect(predecessor[0]).toEqual([
382
+ vertex2,
383
+ undefined,
384
+ vertex2,
385
+ undefined,
386
+ vertex3,
387
+ undefined,
388
+ vertex4,
389
+ undefined,
390
+ undefined
391
+ ]);
392
+ expect(predecessor[1]).toEqual([
393
+ undefined,
394
+ vertex1,
395
+ undefined,
396
+ vertex1,
397
+ vertex3,
398
+ undefined,
399
+ vertex4,
400
+ undefined,
401
+ vertex1
402
+ ]);
403
+ expect(predecessor[5]).toEqual([
404
+ undefined,
405
+ undefined,
406
+ undefined,
407
+ undefined,
408
+ undefined,
409
+ undefined,
410
+ undefined,
411
+ undefined,
412
+ undefined
413
+ ]);
414
+ expect(predecessor[7]).toEqual([
415
+ undefined,
416
+ undefined,
417
+ undefined,
418
+ undefined,
419
+ undefined,
420
+ undefined,
421
+ undefined,
422
+ undefined,
423
+ undefined
424
+ ]);
425
+ expect(predecessor[8]).toEqual([
426
+ vertex7,
427
+ vertex7,
428
+ vertex7,
429
+ vertex7,
430
+ vertex7,
431
+ undefined,
432
+ undefined,
433
+ undefined,
434
+ vertex7
435
+ ]);
386
436
  }
387
437
 
388
438
  const dijkstraRes12tt = myGraph.dijkstra(1, 2, true, true);
@@ -622,7 +672,10 @@ describe('DirectedGraph iterative Methods', () => {
622
672
 
623
673
  test('filter should return vertexMap that satisfy the condition', () => {
624
674
  const filtered = graph.filter((value, vertex) => vertex === 'A' || vertex === 'B');
625
- expect(filtered).toEqual([["A", undefined], ["B", undefined]]);
675
+ expect(filtered).toEqual([
676
+ ['A', undefined],
677
+ ['B', undefined]
678
+ ]);
626
679
  });
627
680
 
628
681
  test('map should apply a function to each vertex and return a new array', () => {
@@ -635,42 +688,55 @@ describe('DirectedGraph iterative Methods', () => {
635
688
  expect(concatenated).toBe(vertexMap.join(''));
636
689
  });
637
690
 
638
- test('Removing an edge of a DirectedGraph should not delete additional edges', () => {
691
+ test('Removing an edge of a DirectedGraph should delete additional edges', () => {
639
692
  const dg = new DirectedGraph();
640
- dg.addVertex('hello')
641
- dg.addVertex('hi')
642
- dg.addVertex('hey')
643
- dg.addEdge('hello', 'hi')
644
- dg.addEdge('hello', 'hey')
645
- expect(dg.getEdge('hello', 'hi')?.src).toBe('hello')
646
- expect(dg.getEdge('hello', 'hi')?.dest).toBe('hi')
647
- expect(dg.getEdge('hello', 'hey')?.src).toBe('hello')
648
- expect(dg.getEdge('hello', 'hey')?.dest).toBe('hey')
649
- dg.deleteEdge('hello', 'hi')
650
- expect(dg.getEdge('hello', 'hi')).toBe(undefined)
651
- expect(dg.getEdge('hello', 'hey')).toBeInstanceOf(DirectedEdge)
693
+ dg.addVertex('hello');
694
+ dg.addVertex('hi');
695
+ dg.addVertex('hey');
696
+ dg.addEdge('hello', 'hi');
697
+ dg.addEdge('hello', 'hey');
698
+ expect(dg.getEdge('hello', 'hi')?.src).toBe('hello');
699
+ expect(dg.getEdge('hello', 'hi')?.dest).toBe('hi');
700
+ expect(dg.getEdge('hello', 'hey')?.src).toBe('hello');
701
+ expect(dg.getEdge('hello', 'hey')?.dest).toBe('hey');
702
+ dg.deleteEdge('hello', 'hi');
703
+ expect(dg.getEdge('hello', 'hi')).toBe(undefined);
704
+ expect(dg.getEdge('hello', 'hey')).toBeInstanceOf(DirectedEdge);
705
+ expect(dg.incomingEdgesOf('Hi')).toEqual([]);
652
706
  });
653
707
 
654
- test('Removing a vertex from a UndirectedGraph should remove its edges', () => {
708
+ test('Removing a vertex of a DirectedGraph should delete additional edges', () => {
709
+ const graph = new DirectedGraph();
710
+
711
+ graph.addVertex('Hello');
712
+ graph.addVertex('Hi');
713
+
714
+ graph.addEdge('Hello', 'Hi');
715
+ graph.deleteVertex('Hello');
716
+
717
+ expect(graph.incomingEdgesOf('Hi')).toEqual([]);
718
+ });
719
+
720
+ test('Removing a vertex from a DirectedGraph should remove its edges', () => {
655
721
  const dg = new DirectedGraph();
656
- dg.addVertex('hello')
657
- dg.addVertex('world')
658
- dg.addVertex('earth')
722
+ dg.addVertex('hello');
723
+ dg.addVertex('world');
724
+ dg.addVertex('earth');
659
725
 
660
- dg.addEdge('hello', 'world')
661
- dg.addEdge('hello', 'earth')
662
- dg.addEdge('world', 'earth')
726
+ dg.addEdge('hello', 'world');
727
+ dg.addEdge('hello', 'earth');
728
+ dg.addEdge('world', 'earth');
663
729
 
664
730
  expect(dg.getEdge('hello', 'world')?.src).toBe('hello');
665
- expect(dg.edgeSet().length).toBe(3)
666
- expect(dg.edgeSet()[0].dest).toBe('world')
731
+ expect(dg.edgeSet().length).toBe(3);
732
+ expect(dg.edgeSet()[0].dest).toBe('world');
667
733
 
668
- dg.deleteVertex('hello')
669
- expect(dg.edgeSet().length).toBe(1)
670
- expect(dg.edgeSet()?.[0].src).toBe('world')
734
+ dg.deleteVertex('hello');
735
+ expect(dg.edgeSet().length).toBe(1);
736
+ expect(dg.edgeSet()?.[0].src).toBe('world');
671
737
 
672
738
  expect(dg.getEdge('hello', 'world')).toBe(undefined);
673
- })
739
+ });
674
740
  });
675
741
 
676
742
  describe('DirectedGraph getCycles', () => {
@@ -689,8 +755,8 @@ describe('DirectedGraph getCycles', () => {
689
755
  graph.addEdge('E', 'B');
690
756
  const cycles = graph.getCycles();
691
757
  expect(cycles.length).toBe(1);
692
- expect(cycles[0]).toEqual(["B", "D", "E"]);
693
- })
758
+ expect(cycles[0]).toEqual(['B', 'D', 'E']);
759
+ });
694
760
 
695
761
  test('should simple cycles graph getCycles return correct result', () => {
696
762
  const graph = new DirectedGraph();
@@ -706,8 +772,11 @@ describe('DirectedGraph getCycles', () => {
706
772
  graph.addEdge('A', 'D');
707
773
  graph.addEdge('D', 'C');
708
774
  const cycles = graph.getCycles();
709
- expect(cycles.length).toBe(2)
710
- expect(cycles).toEqual([["A", "B", "C"], ["A", "D", "C"]])
775
+ expect(cycles.length).toBe(2);
776
+ expect(cycles).toEqual([
777
+ ['A', 'B', 'C'],
778
+ ['A', 'D', 'C']
779
+ ]);
711
780
  });
712
781
 
713
782
  test('should 3 cycles graph getCycles return correct result', () => {
@@ -733,8 +802,11 @@ describe('DirectedGraph getCycles', () => {
733
802
  graph.addEdge('G', 'A');
734
803
 
735
804
  const cycles = graph.getCycles();
736
- expect(cycles.length).toBe(3)
737
- expect(cycles).toEqual([["A", "C", "G"], ["B", "D", "E"], ["B", "F", "E"]]);
805
+ expect(cycles.length).toBe(3);
806
+ expect(cycles).toEqual([
807
+ ['A', 'C', 'G'],
808
+ ['B', 'D', 'E'],
809
+ ['B', 'F', 'E']
810
+ ]);
738
811
  });
739
- })
740
-
812
+ });