data-structure-typed 1.52.5 → 1.52.7

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 (181) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +33 -30
  3. package/benchmark/report.html +13 -13
  4. package/benchmark/report.json +156 -156
  5. package/dist/cjs/constants/index.d.ts +4 -0
  6. package/dist/cjs/constants/index.js +9 -0
  7. package/dist/cjs/constants/index.js.map +1 -0
  8. package/dist/cjs/data-structures/base/iterable-element-base.d.ts +8 -1
  9. package/dist/cjs/data-structures/base/iterable-element-base.js +10 -1
  10. package/dist/cjs/data-structures/base/iterable-element-base.js.map +1 -1
  11. package/dist/cjs/data-structures/base/iterable-entry-base.d.ts +8 -1
  12. package/dist/cjs/data-structures/base/iterable-entry-base.js +10 -10
  13. package/dist/cjs/data-structures/base/iterable-entry-base.js.map +1 -1
  14. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +31 -32
  15. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js +43 -44
  16. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
  17. package/dist/cjs/data-structures/binary-tree/avl-tree.d.ts +23 -24
  18. package/dist/cjs/data-structures/binary-tree/avl-tree.js +71 -64
  19. package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
  20. package/dist/cjs/data-structures/binary-tree/binary-indexed-tree.js +2 -2
  21. package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +534 -402
  22. package/dist/cjs/data-structures/binary-tree/binary-tree.js +669 -598
  23. package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
  24. package/dist/cjs/data-structures/binary-tree/bst.d.ts +72 -65
  25. package/dist/cjs/data-structures/binary-tree/bst.js +115 -113
  26. package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
  27. package/dist/cjs/data-structures/binary-tree/rb-tree.d.ts +21 -24
  28. package/dist/cjs/data-structures/binary-tree/rb-tree.js +40 -39
  29. package/dist/cjs/data-structures/binary-tree/rb-tree.js.map +1 -1
  30. package/dist/cjs/data-structures/binary-tree/segment-tree.d.ts +2 -2
  31. package/dist/cjs/data-structures/binary-tree/segment-tree.js +2 -2
  32. package/dist/cjs/data-structures/binary-tree/tree-multi-map.d.ts +28 -31
  33. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js +44 -43
  34. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js.map +1 -1
  35. package/dist/cjs/data-structures/graph/abstract-graph.d.ts +2 -2
  36. package/dist/cjs/data-structures/graph/abstract-graph.js +7 -4
  37. package/dist/cjs/data-structures/graph/abstract-graph.js.map +1 -1
  38. package/dist/cjs/data-structures/graph/directed-graph.d.ts +2 -2
  39. package/dist/cjs/data-structures/graph/directed-graph.js +4 -2
  40. package/dist/cjs/data-structures/graph/directed-graph.js.map +1 -1
  41. package/dist/cjs/data-structures/graph/undirected-graph.d.ts +2 -2
  42. package/dist/cjs/data-structures/hash/hash-map.d.ts +2 -2
  43. package/dist/cjs/data-structures/hash/hash-map.js +1 -1
  44. package/dist/cjs/data-structures/hash/hash-map.js.map +1 -1
  45. package/dist/cjs/data-structures/heap/heap.js +3 -3
  46. package/dist/cjs/data-structures/heap/heap.js.map +1 -1
  47. package/dist/cjs/data-structures/linked-list/doubly-linked-list.d.ts +2 -2
  48. package/dist/cjs/data-structures/linked-list/doubly-linked-list.js +7 -7
  49. package/dist/cjs/data-structures/linked-list/doubly-linked-list.js.map +1 -1
  50. package/dist/cjs/data-structures/linked-list/singly-linked-list.d.ts +2 -2
  51. package/dist/cjs/data-structures/linked-list/singly-linked-list.js +6 -6
  52. package/dist/cjs/data-structures/linked-list/singly-linked-list.js.map +1 -1
  53. package/dist/cjs/data-structures/linked-list/skip-linked-list.d.ts +2 -2
  54. package/dist/cjs/data-structures/matrix/matrix.d.ts +2 -2
  55. package/dist/cjs/data-structures/matrix/navigator.d.ts +2 -2
  56. package/dist/cjs/data-structures/matrix/navigator.js +4 -2
  57. package/dist/cjs/data-structures/matrix/navigator.js.map +1 -1
  58. package/dist/cjs/data-structures/queue/deque.d.ts +3 -3
  59. package/dist/cjs/data-structures/queue/deque.js +29 -29
  60. package/dist/cjs/data-structures/queue/deque.js.map +1 -1
  61. package/dist/cjs/data-structures/queue/queue.d.ts +1 -1
  62. package/dist/cjs/data-structures/stack/stack.d.ts +2 -2
  63. package/dist/cjs/data-structures/tree/tree.js +2 -0
  64. package/dist/cjs/data-structures/tree/tree.js.map +1 -1
  65. package/dist/cjs/data-structures/trie/trie.d.ts +2 -2
  66. package/dist/cjs/data-structures/trie/trie.js +1 -1
  67. package/dist/cjs/data-structures/trie/trie.js.map +1 -1
  68. package/dist/cjs/index.d.ts +1 -0
  69. package/dist/cjs/index.js +1 -0
  70. package/dist/cjs/index.js.map +1 -1
  71. package/dist/cjs/interfaces/binary-tree.d.ts +2 -2
  72. package/dist/cjs/types/data-structures/binary-tree/binary-tree.d.ts +2 -4
  73. package/dist/cjs/types/data-structures/binary-tree/binary-tree.js +0 -6
  74. package/dist/cjs/types/data-structures/binary-tree/binary-tree.js.map +1 -1
  75. package/dist/mjs/constants/index.d.ts +4 -0
  76. package/dist/mjs/constants/index.js +5 -0
  77. package/dist/mjs/data-structures/base/iterable-element-base.d.ts +8 -1
  78. package/dist/mjs/data-structures/base/iterable-element-base.js +10 -1
  79. package/dist/mjs/data-structures/base/iterable-entry-base.d.ts +8 -1
  80. package/dist/mjs/data-structures/base/iterable-entry-base.js +10 -10
  81. package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +31 -32
  82. package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.js +44 -44
  83. package/dist/mjs/data-structures/binary-tree/avl-tree.d.ts +23 -24
  84. package/dist/mjs/data-structures/binary-tree/avl-tree.js +72 -64
  85. package/dist/mjs/data-structures/binary-tree/binary-indexed-tree.js +2 -2
  86. package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +534 -402
  87. package/dist/mjs/data-structures/binary-tree/binary-tree.js +668 -592
  88. package/dist/mjs/data-structures/binary-tree/bst.d.ts +72 -65
  89. package/dist/mjs/data-structures/binary-tree/bst.js +116 -112
  90. package/dist/mjs/data-structures/binary-tree/rb-tree.d.ts +21 -24
  91. package/dist/mjs/data-structures/binary-tree/rb-tree.js +41 -38
  92. package/dist/mjs/data-structures/binary-tree/segment-tree.d.ts +2 -2
  93. package/dist/mjs/data-structures/binary-tree/segment-tree.js +2 -2
  94. package/dist/mjs/data-structures/binary-tree/tree-multi-map.d.ts +28 -31
  95. package/dist/mjs/data-structures/binary-tree/tree-multi-map.js +45 -42
  96. package/dist/mjs/data-structures/graph/abstract-graph.d.ts +2 -2
  97. package/dist/mjs/data-structures/graph/abstract-graph.js +7 -4
  98. package/dist/mjs/data-structures/graph/directed-graph.d.ts +2 -2
  99. package/dist/mjs/data-structures/graph/directed-graph.js +4 -2
  100. package/dist/mjs/data-structures/graph/undirected-graph.d.ts +2 -2
  101. package/dist/mjs/data-structures/hash/hash-map.d.ts +2 -2
  102. package/dist/mjs/data-structures/hash/hash-map.js +1 -1
  103. package/dist/mjs/data-structures/heap/heap.js +3 -3
  104. package/dist/mjs/data-structures/linked-list/doubly-linked-list.d.ts +2 -2
  105. package/dist/mjs/data-structures/linked-list/doubly-linked-list.js +7 -7
  106. package/dist/mjs/data-structures/linked-list/singly-linked-list.d.ts +2 -2
  107. package/dist/mjs/data-structures/linked-list/singly-linked-list.js +6 -6
  108. package/dist/mjs/data-structures/linked-list/skip-linked-list.d.ts +2 -2
  109. package/dist/mjs/data-structures/matrix/matrix.d.ts +2 -2
  110. package/dist/mjs/data-structures/matrix/navigator.d.ts +2 -2
  111. package/dist/mjs/data-structures/matrix/navigator.js +4 -2
  112. package/dist/mjs/data-structures/queue/deque.d.ts +3 -3
  113. package/dist/mjs/data-structures/queue/deque.js +29 -29
  114. package/dist/mjs/data-structures/queue/queue.d.ts +1 -1
  115. package/dist/mjs/data-structures/stack/stack.d.ts +2 -2
  116. package/dist/mjs/data-structures/tree/tree.js +2 -0
  117. package/dist/mjs/data-structures/trie/trie.d.ts +2 -2
  118. package/dist/mjs/data-structures/trie/trie.js +1 -1
  119. package/dist/mjs/index.d.ts +1 -0
  120. package/dist/mjs/index.js +1 -0
  121. package/dist/mjs/interfaces/binary-tree.d.ts +2 -2
  122. package/dist/mjs/types/data-structures/binary-tree/binary-tree.d.ts +2 -4
  123. package/dist/mjs/types/data-structures/binary-tree/binary-tree.js +1 -5
  124. package/dist/umd/data-structure-typed.js +1344 -1614
  125. package/dist/umd/data-structure-typed.min.js +10 -3
  126. package/dist/umd/data-structure-typed.min.js.map +1 -1
  127. package/eslint.config.mjs +69 -0
  128. package/package.json +30 -28
  129. package/src/constants/index.ts +4 -0
  130. package/src/data-structures/base/iterable-element-base.ts +11 -1
  131. package/src/data-structures/base/iterable-entry-base.ts +11 -19
  132. package/src/data-structures/binary-tree/avl-tree-multi-map.ts +47 -50
  133. package/src/data-structures/binary-tree/avl-tree.ts +69 -71
  134. package/src/data-structures/binary-tree/binary-indexed-tree.ts +2 -2
  135. package/src/data-structures/binary-tree/binary-tree.ts +698 -726
  136. package/src/data-structures/binary-tree/bst.ts +123 -129
  137. package/src/data-structures/binary-tree/rb-tree.ts +44 -46
  138. package/src/data-structures/binary-tree/segment-tree.ts +2 -2
  139. package/src/data-structures/binary-tree/tree-multi-map.ts +48 -49
  140. package/src/data-structures/graph/abstract-graph.ts +6 -6
  141. package/src/data-structures/graph/directed-graph.ts +4 -4
  142. package/src/data-structures/graph/undirected-graph.ts +2 -2
  143. package/src/data-structures/hash/hash-map.ts +3 -3
  144. package/src/data-structures/heap/heap.ts +3 -3
  145. package/src/data-structures/linked-list/doubly-linked-list.ts +9 -9
  146. package/src/data-structures/linked-list/singly-linked-list.ts +8 -8
  147. package/src/data-structures/linked-list/skip-linked-list.ts +2 -2
  148. package/src/data-structures/matrix/matrix.ts +2 -2
  149. package/src/data-structures/matrix/navigator.ts +4 -4
  150. package/src/data-structures/queue/deque.ts +31 -31
  151. package/src/data-structures/queue/queue.ts +1 -1
  152. package/src/data-structures/stack/stack.ts +2 -2
  153. package/src/data-structures/trie/trie.ts +3 -3
  154. package/src/index.ts +1 -0
  155. package/src/interfaces/binary-tree.ts +3 -3
  156. package/src/types/data-structures/binary-tree/binary-tree.ts +3 -5
  157. package/test/config.ts +1 -7
  158. package/test/integration/all-in-one.test.ts +2 -2
  159. package/test/integration/avl-tree.test.ts +3 -3
  160. package/test/integration/bst.test.ts +19 -18
  161. package/test/integration/heap.test.js +6 -1
  162. package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +39 -39
  163. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +2 -2
  164. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +140 -112
  165. package/test/unit/data-structures/binary-tree/bst.test.ts +41 -13
  166. package/test/unit/data-structures/binary-tree/overall.test.ts +0 -6
  167. package/test/unit/data-structures/binary-tree/rb-tree.test.ts +6 -6
  168. package/test/unit/data-structures/binary-tree/segment-tree.test.ts +88 -34
  169. package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +42 -42
  170. package/test/unit/data-structures/graph/abstract-graph.test.ts +1 -1
  171. package/test/unit/data-structures/graph/directed-graph.test.ts +4 -4
  172. package/test/unit/data-structures/graph/undirected-graph.test.ts +14 -2
  173. package/test/unit/data-structures/hash/hash-map.test.ts +1 -1
  174. package/test/unit/data-structures/linked-list/doubly-linked-list.test.ts +1 -1
  175. package/test/unit/data-structures/matrix/navigator.test.ts +2 -2
  176. package/test/unit/data-structures/priority-queue/min-priority-queue.test.ts +1 -1
  177. package/test/unit/data-structures/priority-queue/priority-queue.test.ts +4 -4
  178. package/test/unit/data-structures/stack/stack.test.ts +6 -0
  179. package/test/unit/unrestricted-interconversion.test.ts +24 -24
  180. package/test/utils/big-o.ts +5 -4
  181. package/.eslintrc.js +0 -64
@@ -87,7 +87,7 @@ describe('TreeMultiMap operations test1', () => {
87
87
  tmm.delete(11);
88
88
  expect(tmm.count).toBe(17);
89
89
  expect(tmm.getComputedCount()).toBe(17);
90
- tmm.delete(3, undefined, true);
90
+ tmm.delete(3, true);
91
91
  expect(tmm.count).toBe(15);
92
92
  expect(tmm.getComputedCount()).toBe(15);
93
93
  });
@@ -127,19 +127,19 @@ describe('TreeMultiMap operations test1', () => {
127
127
  expect(tmm.getComputedCount()).toBe(18);
128
128
 
129
129
  expect(tmm.has(6));
130
- isDebug && tmm.print();
130
+ if (isDebug) tmm.print();
131
131
  expect(tmm.getHeight(6)).toBe(1);
132
132
  expect(tmm.getDepth(6)).toBe(3);
133
133
  const nodeId10 = tmm.getNode(10);
134
134
  expect(nodeId10?.key).toBe(10);
135
135
 
136
- const nodeVal9 = tmm.getNode(9, node => node.value);
136
+ const nodeVal9 = tmm.getNode(node => node.value === 9);
137
137
  expect(nodeVal9?.key).toBe(9);
138
138
 
139
- const nodesByCount1 = tmm.getNodes(1, node => node.count);
139
+ const nodesByCount1 = tmm.getNodes(node => node.count === 1);
140
140
  expect(nodesByCount1.length).toBe(14);
141
141
 
142
- const nodesByCount2 = tmm.getNodes(2, node => node.count);
142
+ const nodesByCount2 = tmm.getNodes(node => node.count === 2);
143
143
  expect(nodesByCount2.length).toBe(2);
144
144
  const leftMost = tmm.getLeftMost();
145
145
  expect(leftMost).toBe(1);
@@ -149,7 +149,7 @@ describe('TreeMultiMap operations test1', () => {
149
149
  expect(minNodeBySpecificNode?.key).toBe(14);
150
150
 
151
151
  let subTreeSum = 0;
152
- node15 && tmm.dfs(node => (subTreeSum += node.key), 'PRE', 15);
152
+ if (node15) tmm.dfs(node => (subTreeSum += node.key), 'PRE', 15);
153
153
  expect(subTreeSum).toBe(45);
154
154
  let lesserSum = 0;
155
155
  tmm.lesserOrGreaterTraverse(node => (lesserSum += node.key), -1, 10);
@@ -180,7 +180,7 @@ describe('TreeMultiMap operations test1', () => {
180
180
  expect(bfsNodesAfterBalanced[0].key).toBe(6);
181
181
  expect(bfsNodesAfterBalanced[bfsNodesAfterBalanced.length - 1].key).toBe(16);
182
182
 
183
- const removed11 = tmm.delete(11, undefined, true);
183
+ const removed11 = tmm.delete(11, true);
184
184
  expect(removed11 instanceof Array);
185
185
  expect(removed11[0]);
186
186
  expect(removed11[0].deleted);
@@ -191,7 +191,7 @@ describe('TreeMultiMap operations test1', () => {
191
191
 
192
192
  expect(tmm.getHeight(15)).toBe(1);
193
193
 
194
- const removed1 = tmm.delete(1, undefined, true);
194
+ const removed1 = tmm.delete(1, true);
195
195
  expect(removed1 instanceof Array);
196
196
  expect(removed1[0]);
197
197
  expect(removed1[0].deleted);
@@ -201,7 +201,7 @@ describe('TreeMultiMap operations test1', () => {
201
201
 
202
202
  expect(tmm.getHeight()).toBe(5);
203
203
 
204
- const removed4 = tmm.delete(4, undefined, true);
204
+ const removed4 = tmm.delete(4, true);
205
205
  expect(removed4 instanceof Array);
206
206
  expect(removed4[0]);
207
207
  expect(removed4[0].deleted);
@@ -210,7 +210,7 @@ describe('TreeMultiMap operations test1', () => {
210
210
  expect(tmm.isAVLBalanced()).toBe(false);
211
211
  expect(tmm.getHeight()).toBe(5);
212
212
 
213
- const removed10 = tmm.delete(10, undefined, true);
213
+ const removed10 = tmm.delete(10, true);
214
214
  expect(removed10 instanceof Array);
215
215
  expect(removed10[0]);
216
216
  expect(removed10[0].deleted);
@@ -219,7 +219,7 @@ describe('TreeMultiMap operations test1', () => {
219
219
 
220
220
  expect(tmm.getHeight()).toBe(4);
221
221
 
222
- const removed15 = tmm.delete(15, undefined, true);
222
+ const removed15 = tmm.delete(15, true);
223
223
  expect(removed15 instanceof Array);
224
224
  expect(removed15[0]);
225
225
  expect(removed15[0].deleted);
@@ -228,7 +228,7 @@ describe('TreeMultiMap operations test1', () => {
228
228
  expect(tmm.isAVLBalanced()).toBe(false);
229
229
  expect(tmm.getHeight()).toBe(3);
230
230
 
231
- const removed5 = tmm.delete(5, undefined, true);
231
+ const removed5 = tmm.delete(5, true);
232
232
  expect(removed5 instanceof Array);
233
233
  expect(removed5[0]);
234
234
  expect(removed5[0].deleted);
@@ -237,7 +237,7 @@ describe('TreeMultiMap operations test1', () => {
237
237
  expect(tmm.isAVLBalanced()).toBe(true);
238
238
  expect(tmm.getHeight()).toBe(3);
239
239
 
240
- const removed13 = tmm.delete(13, undefined, true);
240
+ const removed13 = tmm.delete(13, true);
241
241
  expect(removed13 instanceof Array);
242
242
  expect(removed13[0]);
243
243
  expect(removed13[0].deleted);
@@ -245,7 +245,7 @@ describe('TreeMultiMap operations test1', () => {
245
245
  expect(tmm.isAVLBalanced()).toBe(true);
246
246
  expect(tmm.getHeight()).toBe(3);
247
247
 
248
- const removed3 = tmm.delete(3, undefined, true);
248
+ const removed3 = tmm.delete(3, true);
249
249
  expect(removed3 instanceof Array);
250
250
  expect(removed3[0]);
251
251
  expect(removed3[0].deleted);
@@ -253,7 +253,7 @@ describe('TreeMultiMap operations test1', () => {
253
253
  expect(tmm.isAVLBalanced()).toBe(false);
254
254
  expect(tmm.getHeight()).toBe(3);
255
255
 
256
- const removed8 = tmm.delete(8, undefined, true);
256
+ const removed8 = tmm.delete(8, true);
257
257
  expect(removed8 instanceof Array);
258
258
  expect(removed8[0]);
259
259
  expect(removed8[0].deleted);
@@ -261,17 +261,17 @@ describe('TreeMultiMap operations test1', () => {
261
261
  expect(tmm.isAVLBalanced()).toBe(false);
262
262
  expect(tmm.getHeight()).toBe(3);
263
263
 
264
- const removed6 = tmm.delete(6, undefined, true);
264
+ const removed6 = tmm.delete(6, true);
265
265
  expect(removed6 instanceof Array);
266
266
  expect(removed6[0]);
267
267
  expect(removed6[0].deleted);
268
268
  if (removed6[0].deleted) expect(removed6[0].deleted.key).toBe(6);
269
- expect(tmm.delete(6, undefined, true).length).toBe(0);
269
+ expect(tmm.delete(6, true).length).toBe(0);
270
270
  expect(tmm.isAVLBalanced()).toBe(false);
271
271
 
272
272
  expect(tmm.getHeight()).toBe(3);
273
273
 
274
- const removed7 = tmm.delete(7, undefined, true);
274
+ const removed7 = tmm.delete(7, true);
275
275
  expect(removed7 instanceof Array);
276
276
  expect(removed7[0]);
277
277
  expect(removed7[0].deleted);
@@ -279,7 +279,7 @@ describe('TreeMultiMap operations test1', () => {
279
279
  expect(tmm.isAVLBalanced()).toBe(false);
280
280
  expect(tmm.getHeight()).toBe(3);
281
281
 
282
- const removed9 = tmm.delete(9, undefined, true);
282
+ const removed9 = tmm.delete(9, true);
283
283
  expect(removed9 instanceof Array);
284
284
  expect(removed9[0]);
285
285
  expect(removed9[0].deleted);
@@ -287,7 +287,7 @@ describe('TreeMultiMap operations test1', () => {
287
287
  expect(tmm.isAVLBalanced()).toBe(true);
288
288
  expect(tmm.getHeight()).toBe(2);
289
289
 
290
- const removed14 = tmm.delete(14, undefined, true);
290
+ const removed14 = tmm.delete(14, true);
291
291
  expect(removed14 instanceof Array);
292
292
  expect(removed14[0]);
293
293
  expect(removed14[0].deleted);
@@ -391,13 +391,13 @@ describe('TreeMultiMap operations test recursively1', () => {
391
391
  const nodeId10 = tmm.getNode(10);
392
392
  expect(nodeId10?.key).toBe(10);
393
393
 
394
- const nodeVal9 = tmm.getNode(9, node => node.value);
394
+ const nodeVal9 = tmm.getNode(node => node.value === 9);
395
395
  expect(nodeVal9?.key).toBe(9);
396
396
 
397
- const nodesByCount1 = tmm.getNodes(1, node => node.count);
397
+ const nodesByCount1 = tmm.getNodes(node => node.count === 1);
398
398
  expect(nodesByCount1.length).toBe(14);
399
399
 
400
- const nodesByCount2 = tmm.getNodes(2, node => node.count);
400
+ const nodesByCount2 = tmm.getNodes(node => node.count === 2);
401
401
  expect(nodesByCount2.length).toBe(2);
402
402
  const leftMost = tmm.getLeftMost();
403
403
  expect(leftMost).toBe(1);
@@ -407,7 +407,7 @@ describe('TreeMultiMap operations test recursively1', () => {
407
407
  expect(minNodeBySpecificNode?.key).toBe(14);
408
408
 
409
409
  let subTreeSum = 0;
410
- node15 && tmm.dfs(node => (subTreeSum += node.key), 'PRE', 15);
410
+ if (node15) tmm.dfs(node => (subTreeSum += node.key), 'PRE', 15);
411
411
  expect(subTreeSum).toBe(45);
412
412
  let lesserSum = 0;
413
413
  expect(tmm.has(9)).toBe(true);
@@ -447,7 +447,7 @@ describe('TreeMultiMap operations test recursively1', () => {
447
447
  expect(bfsNodesAfterBalanced[0].key).toBe(6);
448
448
  expect(bfsNodesAfterBalanced[bfsNodesAfterBalanced.length - 1].key).toBe(16);
449
449
 
450
- const removed11 = tmm.delete(11, undefined, true);
450
+ const removed11 = tmm.delete(11, true);
451
451
  expect(removed11 instanceof Array);
452
452
  expect(removed11[0]);
453
453
  expect(removed11[0].deleted);
@@ -458,7 +458,7 @@ describe('TreeMultiMap operations test recursively1', () => {
458
458
 
459
459
  expect(tmm.getHeight(15)).toBe(1);
460
460
 
461
- const removed1 = tmm.delete(1, undefined, true);
461
+ const removed1 = tmm.delete(1, true);
462
462
  expect(removed1 instanceof Array);
463
463
  expect(removed1[0]);
464
464
  expect(removed1[0].deleted);
@@ -468,7 +468,7 @@ describe('TreeMultiMap operations test recursively1', () => {
468
468
 
469
469
  expect(tmm.getHeight()).toBe(5);
470
470
 
471
- const removed4 = tmm.delete(4, undefined, true);
471
+ const removed4 = tmm.delete(4, true);
472
472
  expect(removed4 instanceof Array);
473
473
  expect(removed4[0]);
474
474
  expect(removed4[0].deleted);
@@ -477,7 +477,7 @@ describe('TreeMultiMap operations test recursively1', () => {
477
477
  expect(tmm.isAVLBalanced()).toBe(false);
478
478
  expect(tmm.getHeight()).toBe(5);
479
479
 
480
- const removed10 = tmm.delete(10, undefined, true);
480
+ const removed10 = tmm.delete(10, true);
481
481
  expect(removed10 instanceof Array);
482
482
  expect(removed10[0]);
483
483
  expect(removed10[0].deleted);
@@ -486,7 +486,7 @@ describe('TreeMultiMap operations test recursively1', () => {
486
486
 
487
487
  expect(tmm.getHeight()).toBe(4);
488
488
 
489
- const removed15 = tmm.delete(15, undefined, true);
489
+ const removed15 = tmm.delete(15, true);
490
490
  expect(removed15 instanceof Array);
491
491
  expect(removed15[0]);
492
492
  expect(removed15[0].deleted);
@@ -495,7 +495,7 @@ describe('TreeMultiMap operations test recursively1', () => {
495
495
  expect(tmm.isAVLBalanced()).toBe(false);
496
496
  expect(tmm.getHeight()).toBe(3);
497
497
 
498
- const removed5 = tmm.delete(5, undefined, true);
498
+ const removed5 = tmm.delete(5, true);
499
499
  expect(removed5 instanceof Array);
500
500
  expect(removed5[0]);
501
501
  expect(removed5[0].deleted);
@@ -504,7 +504,7 @@ describe('TreeMultiMap operations test recursively1', () => {
504
504
  expect(tmm.isAVLBalanced()).toBe(true);
505
505
  expect(tmm.getHeight()).toBe(3);
506
506
 
507
- const removed13 = tmm.delete(13, undefined, true);
507
+ const removed13 = tmm.delete(13, true);
508
508
  expect(removed13 instanceof Array);
509
509
  expect(removed13[0]);
510
510
  expect(removed13[0].deleted);
@@ -512,7 +512,7 @@ describe('TreeMultiMap operations test recursively1', () => {
512
512
  expect(tmm.isAVLBalanced()).toBe(true);
513
513
  expect(tmm.getHeight()).toBe(3);
514
514
 
515
- const removed3 = tmm.delete(3, undefined, true);
515
+ const removed3 = tmm.delete(3, true);
516
516
  expect(removed3 instanceof Array);
517
517
  expect(removed3[0]);
518
518
  expect(removed3[0].deleted);
@@ -520,7 +520,7 @@ describe('TreeMultiMap operations test recursively1', () => {
520
520
  expect(tmm.isAVLBalanced()).toBe(false);
521
521
  expect(tmm.getHeight()).toBe(3);
522
522
 
523
- const removed8 = tmm.delete(8, undefined, true);
523
+ const removed8 = tmm.delete(8, true);
524
524
  expect(removed8 instanceof Array);
525
525
  expect(removed8[0]);
526
526
  expect(removed8[0].deleted);
@@ -528,17 +528,17 @@ describe('TreeMultiMap operations test recursively1', () => {
528
528
  expect(tmm.isAVLBalanced()).toBe(false);
529
529
  expect(tmm.getHeight()).toBe(3);
530
530
 
531
- const removed6 = tmm.delete(6, undefined, true);
531
+ const removed6 = tmm.delete(6, true);
532
532
  expect(removed6 instanceof Array);
533
533
  expect(removed6[0]);
534
534
  expect(removed6[0].deleted);
535
535
  if (removed6[0].deleted) expect(removed6[0].deleted.key).toBe(6);
536
- expect(tmm.delete(6, undefined, true).length).toBe(0);
536
+ expect(tmm.delete(6, true).length).toBe(0);
537
537
  expect(tmm.isAVLBalanced()).toBe(false);
538
538
 
539
539
  expect(tmm.getHeight()).toBe(3);
540
540
 
541
- const removed7 = tmm.delete(7, undefined, true);
541
+ const removed7 = tmm.delete(7, true);
542
542
  expect(removed7 instanceof Array);
543
543
  expect(removed7[0]);
544
544
  expect(removed7[0].deleted);
@@ -546,7 +546,7 @@ describe('TreeMultiMap operations test recursively1', () => {
546
546
  expect(tmm.isAVLBalanced()).toBe(false);
547
547
  expect(tmm.getHeight()).toBe(3);
548
548
 
549
- const removed9 = tmm.delete(9, undefined, true);
549
+ const removed9 = tmm.delete(9, true);
550
550
  expect(removed9 instanceof Array);
551
551
  expect(removed9[0]);
552
552
  expect(removed9[0].deleted);
@@ -554,7 +554,7 @@ describe('TreeMultiMap operations test recursively1', () => {
554
554
  expect(tmm.isAVLBalanced()).toBe(true);
555
555
  expect(tmm.getHeight()).toBe(2);
556
556
 
557
- const removed14 = tmm.delete(14, undefined, true);
557
+ const removed14 = tmm.delete(14, true);
558
558
  expect(removed14 instanceof Array);
559
559
  expect(removed14[0]);
560
560
  expect(removed14[0].deleted);
@@ -626,7 +626,7 @@ describe('TreeMultiMap delete test', function () {
626
626
  it(`Observe the time consumption of TreeMultiMap.dfs be good`, function () {
627
627
  const startDFS = performance.now();
628
628
  const dfs = tmm.dfs(node => node);
629
- isDebug && console.log('---bfs', performance.now() - startDFS, dfs.length);
629
+ if (isDebug) console.log('---bfs', performance.now() - startDFS, dfs.length);
630
630
  });
631
631
 
632
632
  it('The structure remains normal after random deletion', function () {
@@ -664,7 +664,7 @@ describe('TreeMultiMap delete test', function () {
664
664
  }
665
665
 
666
666
  for (let i = 0; i < inputSize; i++) {
667
- tmm.delete(i, undefined, true);
667
+ tmm.delete(i, true);
668
668
  }
669
669
 
670
670
  let nilCount = 0;
@@ -679,7 +679,7 @@ describe('TreeMultiMap delete test', function () {
679
679
  expect(tmm.getHeight()).toBe(-1);
680
680
  expect(nilCount).toBe(tmm.size + 1);
681
681
 
682
- isDebug && tmm.print();
682
+ if (isDebug) tmm.print();
683
683
  });
684
684
 
685
685
  it(`Random additions, count deletions of structures are normal`, function () {
@@ -705,7 +705,7 @@ describe('TreeMultiMap delete test', function () {
705
705
  expect(tmm.getHeight()).toBeGreaterThanOrEqual(0);
706
706
  expect(nanCount).toBeLessThanOrEqual(inputSize);
707
707
 
708
- isDebug && tmm.print();
708
+ if (isDebug) tmm.print();
709
709
  });
710
710
 
711
711
  it('should the clone method', () => {
@@ -45,7 +45,7 @@ class MyGraph<
45
45
  }
46
46
 
47
47
  degreeOf(vertexOrKey: VO | VertexKey): number {
48
- return 1 ?? Number(vertexOrKey);
48
+ return Number(vertexOrKey);
49
49
  }
50
50
 
51
51
  edgeSet(): EO[] {
@@ -209,8 +209,8 @@ describe('Inherit from DirectedGraph and perform operations', () => {
209
209
 
210
210
  expect(removedEdge).toBeInstanceOf(MyEdge);
211
211
  if (removedEdge) {
212
- removedEdge && expect(removedEdge.value).toBe('edge-data1-2');
213
- removedEdge && expect(removedEdge.src).toBe(1);
212
+ if (removedEdge) expect(removedEdge.value).toBe('edge-data1-2');
213
+ if (removedEdge) expect(removedEdge.src).toBe(1);
214
214
  }
215
215
  expect(edgeAfterRemoval).toBe(undefined);
216
216
  });
@@ -241,8 +241,8 @@ describe('Inherit from DirectedGraph and perform operations', () => {
241
241
  if (sorted && sorted.length > 0) {
242
242
  expect(sorted.length).toBe(9);
243
243
  if (sorted[0] instanceof MyVertex) expect(sorted[0].data).toBe('data9');
244
- sorted[3] instanceof MyVertex && expect(sorted[3].data).toBe('data6');
245
- sorted[8] instanceof MyVertex && expect(sorted[8].key).toBe(1);
244
+ if (sorted[3] instanceof MyVertex) expect(sorted[3].data).toBe('data6');
245
+ if (sorted[8] instanceof MyVertex) expect(sorted[8].key).toBe(1);
246
246
  }
247
247
  });
248
248
 
@@ -18,14 +18,19 @@ describe('UndirectedGraph Operation Test', () => {
18
18
  });
19
19
 
20
20
  it('should add vertices', () => {
21
+ expect(graph.isEmpty()).toBe(true);
21
22
  const vertex1 = new UndirectedVertex('A');
22
23
  const vertex2 = new UndirectedVertex('B');
23
24
 
24
25
  graph.addVertex(vertex1);
26
+ expect(graph.isEmpty()).toBe(false);
25
27
  graph.addVertex(vertex2);
26
28
 
27
29
  expect(graph.hasVertex(vertex1)).toBe(true);
28
30
  expect(graph.hasVertex(vertex2)).toBe(true);
31
+ expect(graph.isEmpty()).toBe(false);
32
+ graph.clear();
33
+ expect(graph.isEmpty()).toBe(true);
29
34
  });
30
35
 
31
36
  it('should add edges', () => {
@@ -39,6 +44,8 @@ describe('UndirectedGraph Operation Test', () => {
39
44
 
40
45
  expect(graph.hasEdge('A', 'B')).toBe(true);
41
46
  expect(graph.hasEdge('B', 'A')).toBe(true);
47
+ expect(graph.has('A')).toBe(true);
48
+ expect(graph.get('A')).toBe(undefined);
42
49
  });
43
50
 
44
51
  it('should delete edges', () => {
@@ -577,7 +584,7 @@ describe('UndirectedGraph tarjan', () => {
577
584
  const graph = createExampleGraph5();
578
585
  const cycles = graph.getCycles();
579
586
  expect(cycles.length).toBe(13);
580
- expect(cycles).toEqual([
587
+ const expectedCycles = [
581
588
  ['A', 'B', 'C', 'D', 'I', 'H', 'F', 'E'],
582
589
  ['A', 'B', 'C', 'D', 'I', 'H', 'F', 'G', 'E'],
583
590
  ['A', 'B', 'C', 'H', 'F', 'E'],
@@ -591,7 +598,12 @@ describe('UndirectedGraph tarjan', () => {
591
598
  ['C', 'D', 'I', 'H'],
592
599
  ['E', 'F', 'G'],
593
600
  ['H', 'J', 'K']
594
- ]);
601
+ ];
602
+ expect(cycles).toEqual(expectedCycles);
603
+ const cloned = graph.clone();
604
+ const clonedCycles = cloned.getCycles();
605
+ expect(clonedCycles.length).toBe(13);
606
+ expect(clonedCycles).toEqual(expectedCycles);
595
607
  });
596
608
 
597
609
  // it('should uncuttable graph tarjan SCCs return correct result', () => {
@@ -303,7 +303,7 @@ describe('HashMap', () => {
303
303
  });
304
304
 
305
305
  it('print', () => {
306
- expect(hm.print()).toEqual([
306
+ expect(hm.toVisual()).toEqual([
307
307
  [2, 2],
308
308
  [3, 3],
309
309
  [4, 4],
@@ -65,7 +65,7 @@ describe('DoublyLinkedList Operation Test', () => {
65
65
  dList.delete('5');
66
66
  expect([...dList]).toEqual(['1', '6', '0', '9']);
67
67
  expect([...cloned]).toEqual(['1', '6', '0', '5', '9']);
68
- expect(cloned.print()).toEqual(['1', '6', '0', '5', '9']);
68
+ expect(cloned.toVisual()).toEqual(['1', '6', '0', '5', '9']);
69
69
  });
70
70
 
71
71
  it('should find undefined', () => {
@@ -176,7 +176,7 @@ describe('Navigator', () => {
176
176
  navigator.start();
177
177
 
178
178
  // The character should not move
179
- isDebug && console.log(visitedCells);
179
+ if (isDebug) console.log(visitedCells);
180
180
  expect(visitedCells).toEqual([
181
181
  [0, 1],
182
182
  [1, 1],
@@ -226,7 +226,7 @@ describe('Navigator', () => {
226
226
  navigator.start();
227
227
 
228
228
  // The character should have navigated the grid, handled turns, and edge cases
229
- isDebug && console.log(visitedCells);
229
+ if (isDebug) console.log(visitedCells);
230
230
  expect(visitedCells).toEqual([
231
231
  [0, 1],
232
232
  [0, 2],
@@ -76,6 +76,6 @@ describe('MinPriorityQueue Operation Test', () => {
76
76
  );
77
77
  expect(mapped instanceof MinPriorityQueue).toBe(true);
78
78
  expect([...mapped]).toEqual([{ key: 1 }, { key: 5 }, { key: 7 }]);
79
- expect(mapped.print()).toEqual([{ key: 1 }, { key: 5 }, { key: 7 }]);
79
+ expect(mapped.toVisual()).toEqual([{ key: 1 }, { key: 5 }, { key: 7 }]);
80
80
  });
81
81
  });
@@ -86,8 +86,8 @@ describe('Priority Queue Performance Test', () => {
86
86
  // for (let i = 0; i < 10000; i++) {
87
87
  // pq.pop();
88
88
  // }
89
- isDebug && console.log(performance.now() - tS);
90
- isDebug && console.log(pq.size);
89
+ if (isDebug) console.log(performance.now() - tS);
90
+ if (isDebug) console.log(pq.size);
91
91
  const cS = performance.now();
92
92
  const cpq = new CPriorityQueue();
93
93
 
@@ -98,7 +98,7 @@ describe('Priority Queue Performance Test', () => {
98
98
  // for (let i = 0; i < 10000; i++) {
99
99
  // cpq.pop();
100
100
  // }
101
- isDebug && console.log(performance.now() - cS);
102
- isDebug && console.log(cpq.size());
101
+ if (isDebug) console.log(performance.now() - cS);
102
+ if (isDebug) console.log(cpq.size());
103
103
  });
104
104
  });
@@ -18,6 +18,12 @@ describe('Stack', () => {
18
18
  expect(stack.size).toBe(3);
19
19
  });
20
20
 
21
+ it('should has and get', () => {
22
+ const stack = new Stack<number, { id: number; name: string }>([], { toElementFn: rawElement => rawElement.id });
23
+ expect(stack.has(1)).toBe(false);
24
+ expect(stack.size).toBe(0);
25
+ });
26
+
21
27
  it('should peek at the top element without removing it', () => {
22
28
  expect(stack.peek()).toBe(undefined);
23
29
  stack.push(1);
@@ -48,61 +48,61 @@ const entries: [number, string][] = [
48
48
  describe('conversions', () => {
49
49
  it('Array to Queue', () => {
50
50
  const q = new Queue<number>(orgArr);
51
- isDebug && q.print();
51
+ if (isDebug) q.print();
52
52
  expect([...q]).toEqual([6, 1, 2, 7, 5, 3, 4, 9, 8]);
53
53
  });
54
54
 
55
55
  it('Array to Deque', () => {
56
56
  const dq = new Deque<number>(orgArr);
57
- isDebug && dq.print();
57
+ if (isDebug) dq.print();
58
58
  expect([...dq]).toEqual([6, 1, 2, 7, 5, 3, 4, 9, 8]);
59
59
  });
60
60
 
61
61
  it('Array to SinglyLinkedList', () => {
62
62
  const sl = new SinglyLinkedList<number>(orgArr);
63
- isDebug && sl.print();
63
+ if (isDebug) sl.print();
64
64
  expect([...sl]).toEqual([6, 1, 2, 7, 5, 3, 4, 9, 8]);
65
65
  });
66
66
 
67
67
  it('Array to DoublyLinkedList', () => {
68
68
  const dl = new DoublyLinkedList<number>(orgArr);
69
- isDebug && dl.print();
69
+ if (isDebug) dl.print();
70
70
  expect([...dl]).toEqual([6, 1, 2, 7, 5, 3, 4, 9, 8]);
71
71
  });
72
72
 
73
73
  it('Array to Stack', () => {
74
74
  const stack = new Stack<number>(orgArr);
75
- isDebug && stack.print();
75
+ if (isDebug) stack.print();
76
76
  expect([...stack]).toEqual([6, 1, 2, 7, 5, 3, 4, 9, 8]);
77
77
  });
78
78
 
79
79
  it('Array to MinHeap', () => {
80
80
  const minHeap = new MinHeap<number>(orgArr);
81
- isDebug && minHeap.print();
81
+ if (isDebug) minHeap.print();
82
82
  expect([...minHeap]).toEqual([1, 5, 2, 7, 6, 3, 4, 9, 8]);
83
83
  });
84
84
 
85
85
  it('Array to MaxHeap', () => {
86
86
  const maxHeap = new MaxHeap<number>(orgArr);
87
- isDebug && maxHeap.print();
87
+ if (isDebug) maxHeap.print();
88
88
  expect([...maxHeap]).toEqual([9, 8, 4, 7, 5, 2, 3, 1, 6]);
89
89
  });
90
90
 
91
91
  it('Array to MinPriorityQueue', () => {
92
92
  const minPQ = new MinPriorityQueue<number>(orgArr);
93
- isDebug && minPQ.print();
93
+ if (isDebug) minPQ.print();
94
94
  expect([...minPQ]).toEqual([1, 5, 2, 7, 6, 3, 4, 9, 8]);
95
95
  });
96
96
 
97
97
  it('Array to MaxPriorityQueue', () => {
98
98
  const maxPQ = new MaxPriorityQueue<number>(orgArr);
99
- isDebug && maxPQ.print();
99
+ if (isDebug) maxPQ.print();
100
100
  expect([...maxPQ]).toEqual([9, 8, 4, 7, 5, 2, 3, 1, 6]);
101
101
  });
102
102
 
103
103
  it('Entry Array to BinaryTree', () => {
104
104
  const biTree = new BinaryTree<number>(entries);
105
- isDebug && biTree.print();
105
+ if (isDebug) biTree.print();
106
106
  expect([...biTree]).toEqual([
107
107
  [9, '9'],
108
108
  [7, '7'],
@@ -119,7 +119,7 @@ describe('conversions', () => {
119
119
  it('Entry Array to BST', () => {
120
120
  const bst = new BST<number>(entries);
121
121
  expect(bst.size).toBe(9);
122
- isDebug && bst.print();
122
+ if (isDebug) bst.print();
123
123
  expect([...bst]).toEqual([
124
124
  [1, '1'],
125
125
  [2, '2'],
@@ -136,7 +136,7 @@ describe('conversions', () => {
136
136
  it('Entry Array to RedBlackTree', () => {
137
137
  const rbTree = new RedBlackTree<number>(entries);
138
138
  expect(rbTree.size).toBe(9);
139
- isDebug && rbTree.print();
139
+ if (isDebug) rbTree.print();
140
140
  expect([...rbTree]).toEqual([
141
141
  [1, '1'],
142
142
  [2, '2'],
@@ -153,7 +153,7 @@ describe('conversions', () => {
153
153
  it('Entry Array to AVLTree', () => {
154
154
  const avl = new AVLTree<number>(entries);
155
155
  expect(avl.size).toBe(9);
156
- isDebug && avl.print();
156
+ if (isDebug) avl.print();
157
157
  expect([...avl]).toEqual([
158
158
  [1, '1'],
159
159
  [2, '2'],
@@ -170,7 +170,7 @@ describe('conversions', () => {
170
170
  it('Entry Array to TreeMultiMap', () => {
171
171
  const treeMulti = new TreeMultiMap<number>(entries);
172
172
  expect(treeMulti.size).toBe(9);
173
- isDebug && treeMulti.print();
173
+ if (isDebug) treeMulti.print();
174
174
  expect([...treeMulti]).toEqual([
175
175
  [1, '1'],
176
176
  [2, '2'],
@@ -186,10 +186,10 @@ describe('conversions', () => {
186
186
 
187
187
  it('HashMap to RedBlackTree', () => {
188
188
  const hm = new HashMap(entries);
189
- isDebug && hm.print();
189
+ if (isDebug) hm.print();
190
190
  const rbTree = new RedBlackTree<number>(hm);
191
191
  expect(rbTree.size).toBe(9);
192
- isDebug && rbTree.print();
192
+ if (isDebug) rbTree.print();
193
193
  expect([...rbTree]).toEqual([
194
194
  [1, '1'],
195
195
  [2, '2'],
@@ -205,10 +205,10 @@ describe('conversions', () => {
205
205
 
206
206
  it('PriorityQueue to BST', () => {
207
207
  const pq = new MinPriorityQueue(orgArr);
208
- isDebug && pq.print();
208
+ if (isDebug) pq.print();
209
209
  const bst = new BST<number>(pq);
210
210
  expect(bst.size).toBe(9);
211
- isDebug && bst.print();
211
+ if (isDebug) bst.print();
212
212
  expect([...bst]).toEqual([
213
213
  [1, undefined],
214
214
  [2, undefined],
@@ -224,10 +224,10 @@ describe('conversions', () => {
224
224
 
225
225
  it('Deque to RedBlackTree', () => {
226
226
  const dq = new Deque(orgArr);
227
- isDebug && dq.print();
227
+ if (isDebug) dq.print();
228
228
  const rbTree = new RedBlackTree<number>(dq);
229
229
  expect(rbTree.size).toBe(9);
230
- isDebug && rbTree.print();
230
+ if (isDebug) rbTree.print();
231
231
  expect([...rbTree]).toEqual([
232
232
  [1, undefined],
233
233
  [2, undefined],
@@ -244,12 +244,12 @@ describe('conversions', () => {
244
244
  it('Trie to Heap to Deque', () => {
245
245
  const trie = new Trie(orgStrArr);
246
246
  expect(trie.size).toBe(10);
247
- isDebug && trie.print();
247
+ if (isDebug) trie.print();
248
248
  const heap = new Heap<string>(trie, {
249
249
  comparator: (a, b) => Number(a) - Number(b)
250
250
  });
251
251
  expect(heap.size).toBe(10);
252
- isDebug && heap.print();
252
+ if (isDebug) heap.print();
253
253
  expect([...heap]).toEqual([
254
254
  'transmit',
255
255
  'trace',
@@ -264,7 +264,7 @@ describe('conversions', () => {
264
264
  ]);
265
265
  const dq = new Deque<string>(heap);
266
266
  expect(dq.size).toBe(10);
267
- isDebug && dq.print();
267
+ if (isDebug) dq.print();
268
268
  expect([...dq]).toEqual([
269
269
  'transmit',
270
270
  'trace',
@@ -280,7 +280,7 @@ describe('conversions', () => {
280
280
  const entries = dq.map((el, i) => <[number, string]>[i, el]);
281
281
  const avl = new AVLTree<number, string>(entries);
282
282
  expect(avl.size).toBe(10);
283
- isDebug && avl.print();
283
+ if (isDebug) avl.print();
284
284
  expect([...avl]).toEqual([
285
285
  [0, 'transmit'],
286
286
  [1, 'trace'],