data-structure-typed 1.49.4 → 1.49.6

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 (186) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +15 -26
  3. package/README_zh-CN.md +1 -1
  4. package/benchmark/report.html +14 -23
  5. package/benchmark/report.json +163 -256
  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.d.ts +53 -48
  9. package/dist/cjs/data-structures/binary-tree/avl-tree.js +55 -49
  10. package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
  11. package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +154 -143
  12. package/dist/cjs/data-structures/binary-tree/binary-tree.js +211 -198
  13. package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
  14. package/dist/cjs/data-structures/binary-tree/bst.d.ts +83 -71
  15. package/dist/cjs/data-structures/binary-tree/bst.js +113 -89
  16. package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
  17. package/dist/cjs/data-structures/binary-tree/rb-tree.d.ts +37 -35
  18. package/dist/cjs/data-structures/binary-tree/rb-tree.js +62 -59
  19. package/dist/cjs/data-structures/binary-tree/rb-tree.js.map +1 -1
  20. package/dist/cjs/data-structures/binary-tree/tree-multimap.d.ts +46 -55
  21. package/dist/cjs/data-structures/binary-tree/tree-multimap.js +59 -94
  22. package/dist/cjs/data-structures/binary-tree/tree-multimap.js.map +1 -1
  23. package/dist/cjs/data-structures/graph/abstract-graph.d.ts +1 -1
  24. package/dist/cjs/data-structures/graph/abstract-graph.js +3 -2
  25. package/dist/cjs/data-structures/graph/abstract-graph.js.map +1 -1
  26. package/dist/cjs/data-structures/graph/directed-graph.js.map +1 -1
  27. package/dist/cjs/data-structures/graph/map-graph.js.map +1 -1
  28. package/dist/cjs/data-structures/graph/undirected-graph.js.map +1 -1
  29. package/dist/cjs/data-structures/hash/hash-map.d.ts +1 -1
  30. package/dist/cjs/data-structures/hash/hash-map.js +2 -2
  31. package/dist/cjs/data-structures/hash/hash-map.js.map +1 -1
  32. package/dist/cjs/data-structures/heap/heap.js +2 -3
  33. package/dist/cjs/data-structures/heap/heap.js.map +1 -1
  34. package/dist/cjs/data-structures/heap/max-heap.js.map +1 -1
  35. package/dist/cjs/data-structures/heap/min-heap.js.map +1 -1
  36. package/dist/cjs/data-structures/linked-list/singly-linked-list.d.ts +2 -2
  37. package/dist/cjs/data-structures/linked-list/singly-linked-list.js.map +1 -1
  38. package/dist/cjs/data-structures/matrix/index.d.ts +0 -2
  39. package/dist/cjs/data-structures/matrix/index.js +0 -2
  40. package/dist/cjs/data-structures/matrix/index.js.map +1 -1
  41. package/dist/cjs/data-structures/matrix/matrix.d.ts +128 -10
  42. package/dist/cjs/data-structures/matrix/matrix.js +400 -15
  43. package/dist/cjs/data-structures/matrix/matrix.js.map +1 -1
  44. package/dist/cjs/data-structures/priority-queue/min-priority-queue.js.map +1 -1
  45. package/dist/cjs/data-structures/queue/deque.d.ts +2 -2
  46. package/dist/cjs/data-structures/queue/deque.js +5 -7
  47. package/dist/cjs/data-structures/queue/deque.js.map +1 -1
  48. package/dist/cjs/data-structures/queue/queue.d.ts +1 -1
  49. package/dist/cjs/interfaces/binary-tree.d.ts +3 -3
  50. package/dist/cjs/types/common.d.ts +3 -3
  51. package/dist/cjs/types/common.js +2 -2
  52. package/dist/cjs/types/common.js.map +1 -1
  53. package/dist/cjs/types/data-structures/base/base.d.ts +1 -1
  54. package/dist/cjs/types/data-structures/heap/heap.d.ts +1 -1
  55. package/dist/cjs/types/data-structures/priority-queue/priority-queue.d.ts +1 -1
  56. package/dist/cjs/utils/utils.d.ts +1 -0
  57. package/dist/cjs/utils/utils.js +6 -1
  58. package/dist/cjs/utils/utils.js.map +1 -1
  59. package/dist/mjs/data-structures/base/iterable-base.d.ts +1 -1
  60. package/dist/mjs/data-structures/binary-tree/avl-tree.d.ts +53 -48
  61. package/dist/mjs/data-structures/binary-tree/avl-tree.js +57 -50
  62. package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +154 -143
  63. package/dist/mjs/data-structures/binary-tree/binary-tree.js +212 -199
  64. package/dist/mjs/data-structures/binary-tree/bst.d.ts +83 -71
  65. package/dist/mjs/data-structures/binary-tree/bst.js +115 -90
  66. package/dist/mjs/data-structures/binary-tree/rb-tree.d.ts +37 -35
  67. package/dist/mjs/data-structures/binary-tree/rb-tree.js +64 -60
  68. package/dist/mjs/data-structures/binary-tree/tree-multimap.d.ts +46 -55
  69. package/dist/mjs/data-structures/binary-tree/tree-multimap.js +61 -95
  70. package/dist/mjs/data-structures/graph/abstract-graph.d.ts +1 -1
  71. package/dist/mjs/data-structures/graph/abstract-graph.js +4 -3
  72. package/dist/mjs/data-structures/hash/hash-map.d.ts +1 -1
  73. package/dist/mjs/data-structures/hash/hash-map.js +2 -2
  74. package/dist/mjs/data-structures/heap/heap.js +2 -3
  75. package/dist/mjs/data-structures/linked-list/singly-linked-list.d.ts +2 -2
  76. package/dist/mjs/data-structures/linked-list/singly-linked-list.js +1 -1
  77. package/dist/mjs/data-structures/matrix/index.d.ts +0 -2
  78. package/dist/mjs/data-structures/matrix/index.js +0 -2
  79. package/dist/mjs/data-structures/matrix/matrix.d.ts +128 -10
  80. package/dist/mjs/data-structures/matrix/matrix.js +399 -16
  81. package/dist/mjs/data-structures/queue/deque.d.ts +2 -2
  82. package/dist/mjs/data-structures/queue/deque.js +7 -9
  83. package/dist/mjs/data-structures/queue/queue.d.ts +1 -1
  84. package/dist/mjs/data-structures/queue/queue.js +1 -1
  85. package/dist/mjs/interfaces/binary-tree.d.ts +3 -3
  86. package/dist/mjs/types/common.d.ts +3 -3
  87. package/dist/mjs/types/common.js +2 -2
  88. package/dist/mjs/types/data-structures/base/base.d.ts +1 -1
  89. package/dist/mjs/types/data-structures/heap/heap.d.ts +1 -1
  90. package/dist/mjs/types/data-structures/priority-queue/priority-queue.d.ts +1 -1
  91. package/dist/mjs/utils/utils.d.ts +1 -0
  92. package/dist/mjs/utils/utils.js +4 -0
  93. package/dist/umd/data-structure-typed.js +853 -943
  94. package/dist/umd/data-structure-typed.min.js +2 -2
  95. package/dist/umd/data-structure-typed.min.js.map +1 -1
  96. package/package.json +4 -3
  97. package/src/data-structures/base/index.ts +1 -1
  98. package/src/data-structures/base/iterable-base.ts +7 -10
  99. package/src/data-structures/binary-tree/avl-tree.ts +73 -61
  100. package/src/data-structures/binary-tree/binary-tree.ts +301 -270
  101. package/src/data-structures/binary-tree/bst.ts +139 -115
  102. package/src/data-structures/binary-tree/rb-tree.ts +81 -73
  103. package/src/data-structures/binary-tree/tree-multimap.ts +72 -103
  104. package/src/data-structures/graph/abstract-graph.ts +13 -11
  105. package/src/data-structures/graph/directed-graph.ts +1 -3
  106. package/src/data-structures/graph/map-graph.ts +6 -1
  107. package/src/data-structures/graph/undirected-graph.ts +3 -6
  108. package/src/data-structures/hash/hash-map.ts +18 -16
  109. package/src/data-structures/heap/heap.ts +7 -10
  110. package/src/data-structures/heap/max-heap.ts +2 -1
  111. package/src/data-structures/heap/min-heap.ts +2 -1
  112. package/src/data-structures/linked-list/singly-linked-list.ts +2 -3
  113. package/src/data-structures/matrix/index.ts +0 -2
  114. package/src/data-structures/matrix/matrix.ts +442 -13
  115. package/src/data-structures/priority-queue/min-priority-queue.ts +11 -10
  116. package/src/data-structures/queue/deque.ts +18 -39
  117. package/src/data-structures/queue/queue.ts +1 -1
  118. package/src/interfaces/binary-tree.ts +9 -4
  119. package/src/types/common.ts +5 -5
  120. package/src/types/data-structures/base/base.ts +14 -3
  121. package/src/types/data-structures/base/index.ts +1 -1
  122. package/src/types/data-structures/graph/abstract-graph.ts +4 -2
  123. package/src/types/data-structures/hash/hash-map.ts +3 -3
  124. package/src/types/data-structures/heap/heap.ts +2 -2
  125. package/src/types/data-structures/priority-queue/priority-queue.ts +2 -2
  126. package/src/utils/utils.ts +7 -1
  127. package/test/integration/avl-tree.test.ts +18 -1
  128. package/test/integration/bst.test.ts +2 -2
  129. package/test/performance/data-structures/binary-tree/avl-tree.test.ts +4 -12
  130. package/test/performance/data-structures/binary-tree/binary-tree-overall.test.ts +37 -0
  131. package/test/performance/data-structures/binary-tree/binary-tree.test.ts +6 -16
  132. package/test/performance/data-structures/binary-tree/bst.test.ts +5 -13
  133. package/test/performance/data-structures/binary-tree/rb-tree.test.ts +6 -16
  134. package/test/performance/data-structures/comparison/comparison.test.ts +19 -47
  135. package/test/performance/data-structures/graph/directed-graph.test.ts +3 -14
  136. package/test/performance/data-structures/hash/hash-map.test.ts +14 -38
  137. package/test/performance/data-structures/heap/heap.test.ts +5 -18
  138. package/test/performance/data-structures/linked-list/doubly-linked-list.test.ts +0 -2
  139. package/test/performance/data-structures/linked-list/singly-linked-list.test.ts +0 -2
  140. package/test/performance/data-structures/priority-queue/max-priority-queue.test.ts +2 -4
  141. package/test/performance/data-structures/priority-queue/priority-queue.test.ts +4 -14
  142. package/test/performance/data-structures/queue/deque.test.ts +6 -7
  143. package/test/performance/data-structures/queue/queue.test.ts +13 -29
  144. package/test/performance/data-structures/stack/stack.test.ts +6 -18
  145. package/test/performance/data-structures/trie/trie.test.ts +2 -6
  146. package/test/performance/reportor.ts +14 -15
  147. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +14 -3
  148. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +65 -29
  149. package/test/unit/data-structures/binary-tree/bst.test.ts +69 -27
  150. package/test/unit/data-structures/binary-tree/overall.test.ts +16 -18
  151. package/test/unit/data-structures/binary-tree/rb-tree.test.ts +17 -6
  152. package/test/unit/data-structures/binary-tree/tree-multimap.test.ts +37 -21
  153. package/test/unit/data-structures/graph/directed-graph.test.ts +104 -45
  154. package/test/unit/data-structures/graph/undirected-graph.test.ts +57 -40
  155. package/test/unit/data-structures/hash/hash-map.test.ts +48 -28
  156. package/test/unit/data-structures/hash/hash-table.test.ts +0 -4
  157. package/test/unit/data-structures/heap/heap.test.ts +0 -1
  158. package/test/unit/data-structures/heap/min-heap.test.ts +6 -5
  159. package/test/unit/data-structures/linked-list/doubly-linked-list.test.ts +10 -11
  160. package/test/unit/data-structures/linked-list/singly-linked-list.test.ts +3 -4
  161. package/test/unit/data-structures/matrix/matrix.test.ts +345 -52
  162. package/test/unit/data-structures/priority-queue/max-priority-queue.test.ts +1 -1
  163. package/test/unit/data-structures/priority-queue/priority-queue.test.ts +0 -1
  164. package/test/unit/data-structures/queue/deque.test.ts +0 -6
  165. package/test/unit/data-structures/queue/queue.test.ts +1 -1
  166. package/test/unit/data-structures/stack/stack.test.ts +3 -4
  167. package/test/unit/unrestricted-interconversion.test.ts +50 -44
  168. package/test/utils/performanc.ts +1 -1
  169. package/typedoc.json +30 -0
  170. package/dist/cjs/data-structures/matrix/matrix2d.d.ts +0 -107
  171. package/dist/cjs/data-structures/matrix/matrix2d.js +0 -200
  172. package/dist/cjs/data-structures/matrix/matrix2d.js.map +0 -1
  173. package/dist/cjs/data-structures/matrix/vector2d.d.ts +0 -200
  174. package/dist/cjs/data-structures/matrix/vector2d.js +0 -291
  175. package/dist/cjs/data-structures/matrix/vector2d.js.map +0 -1
  176. package/dist/mjs/data-structures/matrix/matrix2d.d.ts +0 -107
  177. package/dist/mjs/data-structures/matrix/matrix2d.js +0 -196
  178. package/dist/mjs/data-structures/matrix/vector2d.d.ts +0 -200
  179. package/dist/mjs/data-structures/matrix/vector2d.js +0 -289
  180. package/src/data-structures/matrix/matrix2d.ts +0 -211
  181. package/src/data-structures/matrix/vector2d.ts +0 -315
  182. package/test/performance/data-structures/binary-tree/overall.test.ts +0 -0
  183. package/test/performance/data-structures/matrix/matrix2d.test.ts +0 -0
  184. package/test/performance/data-structures/matrix/vector2d.test.ts +0 -0
  185. package/test/unit/data-structures/matrix/matrix2d.test.ts +0 -345
  186. package/test/unit/data-structures/matrix/vector2d.test.ts +0 -171
@@ -1,4 +1,4 @@
1
- import { BinaryTreeNode, BST, BSTNode, CP, IterationType } from '../../../../src';
1
+ import { BinaryTreeNode, BST, BSTNode, BSTVariant, CP, IterationType } from '../../../../src';
2
2
  import { isDebugTest } from '../../../config';
3
3
 
4
4
  const isDebug = isDebugTest;
@@ -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
 
@@ -32,6 +47,8 @@ describe('BST operations test', () => {
32
47
  const leftMost = bst.getLeftMost();
33
48
  expect(leftMost?.key).toBe(1);
34
49
 
50
+ expect(bst.isBST()).toBe(true);
51
+
35
52
  const node15 = bst.getNode(15);
36
53
  const minNodeBySpecificNode = node15 && bst.getLeftMost(node15);
37
54
  expect(minNodeBySpecificNode?.key).toBe(12);
@@ -194,22 +211,26 @@ describe('BST operations test', () => {
194
211
  objBST.add([11, { name: '11', age: 11 }]);
195
212
  objBST.add([3, { name: '3', age: 3 }]);
196
213
 
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);
214
+ objBST.addMany(
215
+ [15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5],
216
+ [
217
+ { name: 'Alice', age: 15 },
218
+ { name: 'Bob', age: 1 },
219
+ { name: 'Charlie', age: 8 },
220
+ { name: 'David', age: 13 },
221
+ { name: 'Emma', age: 16 },
222
+ { name: 'Frank', age: 2 },
223
+ { name: 'Grace', age: 6 },
224
+ { name: 'Hannah', age: 9 },
225
+ { name: 'Isaac', age: 12 },
226
+ { name: 'Jack', age: 14 },
227
+ { name: 'Katie', age: 4 },
228
+ { name: 'Liam', age: 7 },
229
+ { name: 'Mia', age: 10 },
230
+ { name: 'Noah', age: 5 }
231
+ ],
232
+ false
233
+ );
213
234
 
214
235
  expect(objBST.root).toBeInstanceOf(BSTNode);
215
236
 
@@ -596,11 +617,7 @@ describe('BST operations test recursively', () => {
596
617
  [5, { key: 5, keyA: 5 }]
597
618
  ];
598
619
 
599
- objBST.addMany(
600
- entries,
601
- undefined,
602
- false
603
- );
620
+ objBST.addMany(entries, undefined, false);
604
621
 
605
622
  expect(objBST.root).toBeInstanceOf(BSTNode);
606
623
 
@@ -780,6 +797,20 @@ describe('BST operations test recursively', () => {
780
797
  });
781
798
  });
782
799
 
800
+ describe('BST isBST', function () {
801
+ test('isBST', () => {
802
+ const bst = new BST<number, number>();
803
+ bst.addMany([1, 2, 3, 9, 8, 5, 6, 7, 4]);
804
+ expect(bst.isBST()).toBe(true);
805
+ });
806
+
807
+ test('isBST when variant is Max', () => {
808
+ const bst = new BST<number, number>([1, 2, 3, 9, 8, 5, 6, 7, 4], { variant: BSTVariant.INVERSE });
809
+ bst.addMany([1, 2, 3, 9, 8, 5, 6, 7, 4]);
810
+ expect(bst.isBST()).toBe(true);
811
+ });
812
+ });
813
+
783
814
  describe('BST Performance test', function () {
784
815
  const bst = new BST<number, number>();
785
816
  const inputSize = 10000; // Adjust input sizes as needed
@@ -878,13 +909,20 @@ describe('BST iterative methods test', () => {
878
909
  test('filter should return a new tree with filtered elements', () => {
879
910
  const filteredTree = bst.filter((value, key) => key > 1);
880
911
  expect(filteredTree.size).toBe(2);
881
- expect([...filteredTree]).toEqual([[2, 'b'], [3, 'c']]);
912
+ expect([...filteredTree]).toEqual([
913
+ [2, 'b'],
914
+ [3, 'c']
915
+ ]);
882
916
  });
883
917
 
884
918
  test('map should return a new tree with modified elements', () => {
885
919
  const mappedTree = bst.map((value, key) => (key * 2).toString());
886
920
  expect(mappedTree.size).toBe(3);
887
- expect([...mappedTree]).toEqual([[1, '2'], [2, '4'], [3, '6']]);
921
+ expect([...mappedTree]).toEqual([
922
+ [1, '2'],
923
+ [2, '4'],
924
+ [3, '6']
925
+ ]);
888
926
  });
889
927
 
890
928
  test('reduce should accumulate values', () => {
@@ -899,7 +937,11 @@ describe('BST iterative methods test', () => {
899
937
  }
900
938
 
901
939
  expect(entries.length).toBe(3);
902
- expect(entries).toEqual([[1, 'a'], [2, 'b'], [3, 'c']]);
940
+ expect(entries).toEqual([
941
+ [1, 'a'],
942
+ [2, 'b'],
943
+ [3, 'c']
944
+ ]);
903
945
  });
904
946
 
905
947
  test('should clone work well', () => {
@@ -917,4 +959,4 @@ describe('BST iterative methods test', () => {
917
959
  const values = bst.values();
918
960
  expect([...values]).toEqual(['a', 'b', 'c']);
919
961
  });
920
- });
962
+ });
@@ -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');
@@ -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', () => {
@@ -637,53 +690,53 @@ describe('DirectedGraph iterative Methods', () => {
637
690
 
638
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)
652
- expect(dg.incomingEdgesOf("Hi")).toEqual([])
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([]);
653
706
  });
654
707
 
655
708
  test('Removing a vertex of a DirectedGraph should delete additional edges', () => {
656
709
  const graph = new DirectedGraph();
657
710
 
658
- graph.addVertex("Hello");
659
- graph.addVertex("Hi");
711
+ graph.addVertex('Hello');
712
+ graph.addVertex('Hi');
660
713
 
661
- graph.addEdge("Hello", "Hi");
662
- graph.deleteVertex("Hello");
714
+ graph.addEdge('Hello', 'Hi');
715
+ graph.deleteVertex('Hello');
663
716
 
664
- expect(graph.incomingEdgesOf("Hi")).toEqual([]);
665
- })
717
+ expect(graph.incomingEdgesOf('Hi')).toEqual([]);
718
+ });
666
719
 
667
720
  test('Removing a vertex from a DirectedGraph should remove its edges', () => {
668
721
  const dg = new DirectedGraph();
669
- dg.addVertex('hello')
670
- dg.addVertex('world')
671
- dg.addVertex('earth')
722
+ dg.addVertex('hello');
723
+ dg.addVertex('world');
724
+ dg.addVertex('earth');
672
725
 
673
- dg.addEdge('hello', 'world')
674
- dg.addEdge('hello', 'earth')
675
- dg.addEdge('world', 'earth')
726
+ dg.addEdge('hello', 'world');
727
+ dg.addEdge('hello', 'earth');
728
+ dg.addEdge('world', 'earth');
676
729
 
677
730
  expect(dg.getEdge('hello', 'world')?.src).toBe('hello');
678
- expect(dg.edgeSet().length).toBe(3)
679
- expect(dg.edgeSet()[0].dest).toBe('world')
731
+ expect(dg.edgeSet().length).toBe(3);
732
+ expect(dg.edgeSet()[0].dest).toBe('world');
680
733
 
681
- dg.deleteVertex('hello')
682
- expect(dg.edgeSet().length).toBe(1)
683
- 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');
684
737
 
685
738
  expect(dg.getEdge('hello', 'world')).toBe(undefined);
686
- })
739
+ });
687
740
  });
688
741
 
689
742
  describe('DirectedGraph getCycles', () => {
@@ -702,8 +755,8 @@ describe('DirectedGraph getCycles', () => {
702
755
  graph.addEdge('E', 'B');
703
756
  const cycles = graph.getCycles();
704
757
  expect(cycles.length).toBe(1);
705
- expect(cycles[0]).toEqual(["B", "D", "E"]);
706
- })
758
+ expect(cycles[0]).toEqual(['B', 'D', 'E']);
759
+ });
707
760
 
708
761
  test('should simple cycles graph getCycles return correct result', () => {
709
762
  const graph = new DirectedGraph();
@@ -719,8 +772,11 @@ describe('DirectedGraph getCycles', () => {
719
772
  graph.addEdge('A', 'D');
720
773
  graph.addEdge('D', 'C');
721
774
  const cycles = graph.getCycles();
722
- expect(cycles.length).toBe(2)
723
- 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
+ ]);
724
780
  });
725
781
 
726
782
  test('should 3 cycles graph getCycles return correct result', () => {
@@ -746,8 +802,11 @@ describe('DirectedGraph getCycles', () => {
746
802
  graph.addEdge('G', 'A');
747
803
 
748
804
  const cycles = graph.getCycles();
749
- expect(cycles.length).toBe(3)
750
- 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
+ ]);
751
811
  });
752
- })
753
-
812
+ });