data-structure-typed 2.0.4 → 2.1.0

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 (261) hide show
  1. package/CHANGELOG.md +3 -1
  2. package/COMMANDS.md +17 -0
  3. package/README.md +11 -11
  4. package/benchmark/report.html +13 -77
  5. package/benchmark/report.json +158 -190
  6. package/dist/cjs/data-structures/base/iterable-element-base.d.ts +186 -83
  7. package/dist/cjs/data-structures/base/iterable-element-base.js +149 -107
  8. package/dist/cjs/data-structures/base/iterable-element-base.js.map +1 -1
  9. package/dist/cjs/data-structures/base/iterable-entry-base.d.ts +95 -119
  10. package/dist/cjs/data-structures/base/iterable-entry-base.js +59 -116
  11. package/dist/cjs/data-structures/base/iterable-entry-base.js.map +1 -1
  12. package/dist/cjs/data-structures/base/linear-base.d.ts +250 -192
  13. package/dist/cjs/data-structures/base/linear-base.js +137 -274
  14. package/dist/cjs/data-structures/base/linear-base.js.map +1 -1
  15. package/dist/cjs/data-structures/binary-tree/avl-tree-counter.d.ts +126 -158
  16. package/dist/cjs/data-structures/binary-tree/avl-tree-counter.js +171 -205
  17. package/dist/cjs/data-structures/binary-tree/avl-tree-counter.js.map +1 -1
  18. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +100 -69
  19. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js +135 -87
  20. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
  21. package/dist/cjs/data-structures/binary-tree/avl-tree.d.ts +138 -149
  22. package/dist/cjs/data-structures/binary-tree/avl-tree.js +208 -195
  23. package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
  24. package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +476 -632
  25. package/dist/cjs/data-structures/binary-tree/binary-tree.js +608 -875
  26. package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
  27. package/dist/cjs/data-structures/binary-tree/bst.d.ts +258 -306
  28. package/dist/cjs/data-structures/binary-tree/bst.js +505 -481
  29. package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
  30. package/dist/cjs/data-structures/binary-tree/red-black-tree.d.ts +107 -179
  31. package/dist/cjs/data-structures/binary-tree/red-black-tree.js +114 -209
  32. package/dist/cjs/data-structures/binary-tree/red-black-tree.js.map +1 -1
  33. package/dist/cjs/data-structures/binary-tree/tree-counter.d.ts +132 -154
  34. package/dist/cjs/data-structures/binary-tree/tree-counter.js +172 -203
  35. package/dist/cjs/data-structures/binary-tree/tree-counter.js.map +1 -1
  36. package/dist/cjs/data-structures/binary-tree/tree-multi-map.d.ts +72 -69
  37. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js +105 -85
  38. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js.map +1 -1
  39. package/dist/cjs/data-structures/graph/abstract-graph.d.ts +238 -233
  40. package/dist/cjs/data-structures/graph/abstract-graph.js +267 -237
  41. package/dist/cjs/data-structures/graph/abstract-graph.js.map +1 -1
  42. package/dist/cjs/data-structures/graph/directed-graph.d.ts +108 -224
  43. package/dist/cjs/data-structures/graph/directed-graph.js +146 -233
  44. package/dist/cjs/data-structures/graph/directed-graph.js.map +1 -1
  45. package/dist/cjs/data-structures/graph/map-graph.d.ts +49 -55
  46. package/dist/cjs/data-structures/graph/map-graph.js +56 -59
  47. package/dist/cjs/data-structures/graph/map-graph.js.map +1 -1
  48. package/dist/cjs/data-structures/graph/undirected-graph.d.ts +103 -146
  49. package/dist/cjs/data-structures/graph/undirected-graph.js +129 -149
  50. package/dist/cjs/data-structures/graph/undirected-graph.js.map +1 -1
  51. package/dist/cjs/data-structures/hash/hash-map.d.ts +164 -338
  52. package/dist/cjs/data-structures/hash/hash-map.js +270 -457
  53. package/dist/cjs/data-structures/hash/hash-map.js.map +1 -1
  54. package/dist/cjs/data-structures/heap/heap.d.ts +214 -289
  55. package/dist/cjs/data-structures/heap/heap.js +340 -349
  56. package/dist/cjs/data-structures/heap/heap.js.map +1 -1
  57. package/dist/cjs/data-structures/heap/max-heap.d.ts +11 -47
  58. package/dist/cjs/data-structures/heap/max-heap.js +11 -66
  59. package/dist/cjs/data-structures/heap/max-heap.js.map +1 -1
  60. package/dist/cjs/data-structures/heap/min-heap.d.ts +12 -47
  61. package/dist/cjs/data-structures/heap/min-heap.js +11 -66
  62. package/dist/cjs/data-structures/heap/min-heap.js.map +1 -1
  63. package/dist/cjs/data-structures/linked-list/doubly-linked-list.d.ts +231 -347
  64. package/dist/cjs/data-structures/linked-list/doubly-linked-list.js +368 -494
  65. package/dist/cjs/data-structures/linked-list/doubly-linked-list.js.map +1 -1
  66. package/dist/cjs/data-structures/linked-list/singly-linked-list.d.ts +261 -310
  67. package/dist/cjs/data-structures/linked-list/singly-linked-list.js +447 -466
  68. package/dist/cjs/data-structures/linked-list/singly-linked-list.js.map +1 -1
  69. package/dist/cjs/data-structures/linked-list/skip-linked-list.d.ts +0 -107
  70. package/dist/cjs/data-structures/linked-list/skip-linked-list.js +0 -100
  71. package/dist/cjs/data-structures/linked-list/skip-linked-list.js.map +1 -1
  72. package/dist/cjs/data-structures/priority-queue/max-priority-queue.d.ts +12 -56
  73. package/dist/cjs/data-structures/priority-queue/max-priority-queue.js +11 -78
  74. package/dist/cjs/data-structures/priority-queue/max-priority-queue.js.map +1 -1
  75. package/dist/cjs/data-structures/priority-queue/min-priority-queue.d.ts +11 -57
  76. package/dist/cjs/data-structures/priority-queue/min-priority-queue.js +10 -79
  77. package/dist/cjs/data-structures/priority-queue/min-priority-queue.js.map +1 -1
  78. package/dist/cjs/data-structures/priority-queue/priority-queue.d.ts +2 -61
  79. package/dist/cjs/data-structures/priority-queue/priority-queue.js +8 -83
  80. package/dist/cjs/data-structures/priority-queue/priority-queue.js.map +1 -1
  81. package/dist/cjs/data-structures/queue/deque.d.ts +227 -254
  82. package/dist/cjs/data-structures/queue/deque.js +309 -348
  83. package/dist/cjs/data-structures/queue/deque.js.map +1 -1
  84. package/dist/cjs/data-structures/queue/queue.d.ts +180 -201
  85. package/dist/cjs/data-structures/queue/queue.js +265 -248
  86. package/dist/cjs/data-structures/queue/queue.js.map +1 -1
  87. package/dist/cjs/data-structures/stack/stack.d.ts +124 -102
  88. package/dist/cjs/data-structures/stack/stack.js +181 -125
  89. package/dist/cjs/data-structures/stack/stack.js.map +1 -1
  90. package/dist/cjs/data-structures/trie/trie.d.ts +164 -165
  91. package/dist/cjs/data-structures/trie/trie.js +189 -172
  92. package/dist/cjs/data-structures/trie/trie.js.map +1 -1
  93. package/dist/cjs/interfaces/binary-tree.d.ts +56 -6
  94. package/dist/cjs/interfaces/graph.d.ts +16 -0
  95. package/dist/cjs/types/data-structures/base/base.d.ts +1 -1
  96. package/dist/cjs/types/data-structures/graph/abstract-graph.d.ts +4 -0
  97. package/dist/cjs/types/utils/utils.d.ts +6 -6
  98. package/dist/cjs/utils/utils.d.ts +110 -49
  99. package/dist/cjs/utils/utils.js +148 -73
  100. package/dist/cjs/utils/utils.js.map +1 -1
  101. package/dist/esm/data-structures/base/iterable-element-base.d.ts +186 -83
  102. package/dist/esm/data-structures/base/iterable-element-base.js +155 -107
  103. package/dist/esm/data-structures/base/iterable-element-base.js.map +1 -1
  104. package/dist/esm/data-structures/base/iterable-entry-base.d.ts +95 -119
  105. package/dist/esm/data-structures/base/iterable-entry-base.js +59 -116
  106. package/dist/esm/data-structures/base/iterable-entry-base.js.map +1 -1
  107. package/dist/esm/data-structures/base/linear-base.d.ts +250 -192
  108. package/dist/esm/data-structures/base/linear-base.js +137 -274
  109. package/dist/esm/data-structures/base/linear-base.js.map +1 -1
  110. package/dist/esm/data-structures/binary-tree/avl-tree-counter.d.ts +126 -158
  111. package/dist/esm/data-structures/binary-tree/avl-tree-counter.js +171 -212
  112. package/dist/esm/data-structures/binary-tree/avl-tree-counter.js.map +1 -1
  113. package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.d.ts +100 -69
  114. package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.js +133 -94
  115. package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
  116. package/dist/esm/data-structures/binary-tree/avl-tree.d.ts +138 -149
  117. package/dist/esm/data-structures/binary-tree/avl-tree.js +206 -200
  118. package/dist/esm/data-structures/binary-tree/avl-tree.js.map +1 -1
  119. package/dist/esm/data-structures/binary-tree/binary-tree.d.ts +476 -632
  120. package/dist/esm/data-structures/binary-tree/binary-tree.js +613 -885
  121. package/dist/esm/data-structures/binary-tree/binary-tree.js.map +1 -1
  122. package/dist/esm/data-structures/binary-tree/bst.d.ts +258 -306
  123. package/dist/esm/data-structures/binary-tree/bst.js +507 -487
  124. package/dist/esm/data-structures/binary-tree/bst.js.map +1 -1
  125. package/dist/esm/data-structures/binary-tree/red-black-tree.d.ts +107 -179
  126. package/dist/esm/data-structures/binary-tree/red-black-tree.js +114 -215
  127. package/dist/esm/data-structures/binary-tree/red-black-tree.js.map +1 -1
  128. package/dist/esm/data-structures/binary-tree/tree-counter.d.ts +132 -154
  129. package/dist/esm/data-structures/binary-tree/tree-counter.js +175 -209
  130. package/dist/esm/data-structures/binary-tree/tree-counter.js.map +1 -1
  131. package/dist/esm/data-structures/binary-tree/tree-multi-map.d.ts +72 -69
  132. package/dist/esm/data-structures/binary-tree/tree-multi-map.js +103 -92
  133. package/dist/esm/data-structures/binary-tree/tree-multi-map.js.map +1 -1
  134. package/dist/esm/data-structures/graph/abstract-graph.d.ts +238 -233
  135. package/dist/esm/data-structures/graph/abstract-graph.js +267 -237
  136. package/dist/esm/data-structures/graph/abstract-graph.js.map +1 -1
  137. package/dist/esm/data-structures/graph/directed-graph.d.ts +108 -224
  138. package/dist/esm/data-structures/graph/directed-graph.js +145 -233
  139. package/dist/esm/data-structures/graph/directed-graph.js.map +1 -1
  140. package/dist/esm/data-structures/graph/map-graph.d.ts +49 -55
  141. package/dist/esm/data-structures/graph/map-graph.js +56 -59
  142. package/dist/esm/data-structures/graph/map-graph.js.map +1 -1
  143. package/dist/esm/data-structures/graph/undirected-graph.d.ts +103 -146
  144. package/dist/esm/data-structures/graph/undirected-graph.js +128 -149
  145. package/dist/esm/data-structures/graph/undirected-graph.js.map +1 -1
  146. package/dist/esm/data-structures/hash/hash-map.d.ts +164 -338
  147. package/dist/esm/data-structures/hash/hash-map.js +270 -457
  148. package/dist/esm/data-structures/hash/hash-map.js.map +1 -1
  149. package/dist/esm/data-structures/heap/heap.d.ts +214 -289
  150. package/dist/esm/data-structures/heap/heap.js +329 -349
  151. package/dist/esm/data-structures/heap/heap.js.map +1 -1
  152. package/dist/esm/data-structures/heap/max-heap.d.ts +11 -47
  153. package/dist/esm/data-structures/heap/max-heap.js +11 -66
  154. package/dist/esm/data-structures/heap/max-heap.js.map +1 -1
  155. package/dist/esm/data-structures/heap/min-heap.d.ts +12 -47
  156. package/dist/esm/data-structures/heap/min-heap.js +11 -66
  157. package/dist/esm/data-structures/heap/min-heap.js.map +1 -1
  158. package/dist/esm/data-structures/linked-list/doubly-linked-list.d.ts +231 -347
  159. package/dist/esm/data-structures/linked-list/doubly-linked-list.js +368 -495
  160. package/dist/esm/data-structures/linked-list/doubly-linked-list.js.map +1 -1
  161. package/dist/esm/data-structures/linked-list/singly-linked-list.d.ts +261 -310
  162. package/dist/esm/data-structures/linked-list/singly-linked-list.js +448 -467
  163. package/dist/esm/data-structures/linked-list/singly-linked-list.js.map +1 -1
  164. package/dist/esm/data-structures/linked-list/skip-linked-list.d.ts +0 -107
  165. package/dist/esm/data-structures/linked-list/skip-linked-list.js +0 -100
  166. package/dist/esm/data-structures/linked-list/skip-linked-list.js.map +1 -1
  167. package/dist/esm/data-structures/priority-queue/max-priority-queue.d.ts +12 -56
  168. package/dist/esm/data-structures/priority-queue/max-priority-queue.js +11 -78
  169. package/dist/esm/data-structures/priority-queue/max-priority-queue.js.map +1 -1
  170. package/dist/esm/data-structures/priority-queue/min-priority-queue.d.ts +11 -57
  171. package/dist/esm/data-structures/priority-queue/min-priority-queue.js +10 -79
  172. package/dist/esm/data-structures/priority-queue/min-priority-queue.js.map +1 -1
  173. package/dist/esm/data-structures/priority-queue/priority-queue.d.ts +2 -61
  174. package/dist/esm/data-structures/priority-queue/priority-queue.js +8 -83
  175. package/dist/esm/data-structures/priority-queue/priority-queue.js.map +1 -1
  176. package/dist/esm/data-structures/queue/deque.d.ts +227 -254
  177. package/dist/esm/data-structures/queue/deque.js +313 -348
  178. package/dist/esm/data-structures/queue/deque.js.map +1 -1
  179. package/dist/esm/data-structures/queue/queue.d.ts +180 -201
  180. package/dist/esm/data-structures/queue/queue.js +263 -248
  181. package/dist/esm/data-structures/queue/queue.js.map +1 -1
  182. package/dist/esm/data-structures/stack/stack.d.ts +124 -102
  183. package/dist/esm/data-structures/stack/stack.js +181 -125
  184. package/dist/esm/data-structures/stack/stack.js.map +1 -1
  185. package/dist/esm/data-structures/trie/trie.d.ts +164 -165
  186. package/dist/esm/data-structures/trie/trie.js +193 -172
  187. package/dist/esm/data-structures/trie/trie.js.map +1 -1
  188. package/dist/esm/interfaces/binary-tree.d.ts +56 -6
  189. package/dist/esm/interfaces/graph.d.ts +16 -0
  190. package/dist/esm/types/data-structures/base/base.d.ts +1 -1
  191. package/dist/esm/types/data-structures/graph/abstract-graph.d.ts +4 -0
  192. package/dist/esm/types/utils/utils.d.ts +6 -6
  193. package/dist/esm/utils/utils.d.ts +110 -49
  194. package/dist/esm/utils/utils.js +139 -68
  195. package/dist/esm/utils/utils.js.map +1 -1
  196. package/dist/umd/data-structure-typed.js +4737 -6525
  197. package/dist/umd/data-structure-typed.min.js +8 -6
  198. package/dist/umd/data-structure-typed.min.js.map +1 -1
  199. package/package.json +3 -4
  200. package/src/data-structures/base/iterable-element-base.ts +238 -115
  201. package/src/data-structures/base/iterable-entry-base.ts +96 -120
  202. package/src/data-structures/base/linear-base.ts +271 -277
  203. package/src/data-structures/binary-tree/avl-tree-counter.ts +198 -216
  204. package/src/data-structures/binary-tree/avl-tree-multi-map.ts +192 -101
  205. package/src/data-structures/binary-tree/avl-tree.ts +239 -206
  206. package/src/data-structures/binary-tree/binary-tree.ts +677 -901
  207. package/src/data-structures/binary-tree/bst.ts +568 -570
  208. package/src/data-structures/binary-tree/red-black-tree.ts +161 -222
  209. package/src/data-structures/binary-tree/tree-counter.ts +199 -218
  210. package/src/data-structures/binary-tree/tree-multi-map.ts +131 -97
  211. package/src/data-structures/graph/abstract-graph.ts +339 -264
  212. package/src/data-structures/graph/directed-graph.ts +146 -236
  213. package/src/data-structures/graph/map-graph.ts +63 -60
  214. package/src/data-structures/graph/undirected-graph.ts +129 -152
  215. package/src/data-structures/hash/hash-map.ts +274 -496
  216. package/src/data-structures/heap/heap.ts +389 -402
  217. package/src/data-structures/heap/max-heap.ts +12 -76
  218. package/src/data-structures/heap/min-heap.ts +13 -76
  219. package/src/data-structures/linked-list/doubly-linked-list.ts +426 -530
  220. package/src/data-structures/linked-list/singly-linked-list.ts +495 -517
  221. package/src/data-structures/linked-list/skip-linked-list.ts +1 -108
  222. package/src/data-structures/priority-queue/max-priority-queue.ts +12 -87
  223. package/src/data-structures/priority-queue/min-priority-queue.ts +11 -88
  224. package/src/data-structures/priority-queue/priority-queue.ts +3 -92
  225. package/src/data-structures/queue/deque.ts +381 -357
  226. package/src/data-structures/queue/queue.ts +310 -264
  227. package/src/data-structures/stack/stack.ts +217 -131
  228. package/src/data-structures/trie/trie.ts +240 -175
  229. package/src/interfaces/binary-tree.ts +240 -6
  230. package/src/interfaces/graph.ts +37 -0
  231. package/src/types/data-structures/base/base.ts +5 -5
  232. package/src/types/data-structures/graph/abstract-graph.ts +5 -0
  233. package/src/types/utils/utils.ts +9 -5
  234. package/src/utils/utils.ts +152 -86
  235. package/test/integration/index.html +1 -1
  236. package/test/performance/benchmark-runner.ts +528 -0
  237. package/test/performance/reportor.mjs +43 -43
  238. package/test/performance/runner-config.json +39 -0
  239. package/test/performance/single-suite-runner.ts +69 -0
  240. package/test/unit/data-structures/binary-tree/avl-tree-counter.test.ts +3 -3
  241. package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +5 -5
  242. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +4 -4
  243. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +350 -90
  244. package/test/unit/data-structures/binary-tree/bst.test.ts +84 -5
  245. package/test/unit/data-structures/binary-tree/red-black-tree.test.ts +2 -2
  246. package/test/unit/data-structures/binary-tree/tree-counter.test.ts +25 -24
  247. package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +3 -3
  248. package/test/unit/data-structures/graph/abstract-graph.test.ts +0 -4
  249. package/test/unit/data-structures/graph/directed-graph.test.ts +1 -1
  250. package/test/unit/data-structures/heap/heap.test.ts +14 -21
  251. package/test/unit/data-structures/heap/max-heap.test.ts +5 -9
  252. package/test/unit/data-structures/heap/min-heap.test.ts +1 -4
  253. package/test/unit/data-structures/linked-list/doubly-linked-list.test.ts +14 -14
  254. package/test/unit/data-structures/linked-list/singly-linked-list.test.ts +0 -7
  255. package/test/unit/data-structures/priority-queue/max-priority-queue.test.ts +8 -11
  256. package/test/unit/data-structures/priority-queue/min-priority-queue.test.ts +1 -4
  257. package/test/unit/data-structures/priority-queue/priority-queue.test.ts +1 -4
  258. package/test/unit/data-structures/queue/queue.test.ts +4 -5
  259. package/test/unit/utils/utils.test.ts +0 -1
  260. package/test/performance/data-structures/binary-tree/avl-tree.test.mjs +0 -71
  261. package/test/performance/data-structures/binary-tree/red-black-tree.test.mjs +0 -81
@@ -1,4 +1,4 @@
1
- import { BinaryTreeNode, BST, BSTNode, Range } from '../../../../src';
1
+ import { BinaryTreeNode, BST, BSTNode, IBinaryTree, Range } from '../../../../src';
2
2
  import { isDebugTest, isTestStackOverflow, SYSTEM_MAX_CALL_STACK } from '../../../config';
3
3
 
4
4
  const isDebug = isDebugTest;
@@ -331,8 +331,7 @@ describe('BST operations test', () => {
331
331
  if (removed11[0].deleted) expect(removed11[0].deleted.key).toBe(11);
332
332
 
333
333
  expect(objBST.isAVLBalanced()).toBe(true);
334
-
335
- expect(node15 && objBST.getHeight(node15)).toBe(2);
334
+ expect(node15 && objBST.getHeight(node15)).toBe(1);
336
335
 
337
336
  const removed1 = objBST.delete(1);
338
337
  expect(removed1).toBeInstanceOf(Array);
@@ -775,7 +774,7 @@ describe('BST operations test recursively', () => {
775
774
 
776
775
  expect(objBST.isAVLBalanced()).toBe(true);
777
776
 
778
- expect(node15 && objBST.getHeight(node15)).toBe(2);
777
+ expect(node15 && objBST.getHeight(node15)).toBe(1);
779
778
 
780
779
  const removed1 = objBST.delete(1);
781
780
  expect(removed1).toBeInstanceOf(Array);
@@ -932,7 +931,7 @@ describe('BST operations test recursively', () => {
932
931
  });
933
932
 
934
933
  it('should the clone method', () => {
935
- function checkTreeStructure(bst: BST<string, number>) {
934
+ function checkTreeStructure(bst: IBinaryTree<string, number>) {
936
935
  expect(bst.size).toBe(4);
937
936
  expect(bst.root?.key).toBe('2');
938
937
  expect(bst.root?.left?.key).toBe('1');
@@ -1537,6 +1536,86 @@ describe('BST iterative methods not map mode test', () => {
1537
1536
  });
1538
1537
  });
1539
1538
 
1539
+ describe('BST constructor and comparator edge cases', () => {
1540
+ it('should support specifyComparable and isReverse', () => {
1541
+ const bst = new BST<number>([], {
1542
+ specifyComparable: k => -k,
1543
+ isReverse: true
1544
+ });
1545
+ bst.add(1);
1546
+ bst.add(2);
1547
+ expect(bst.isReverse).toBe(true);
1548
+ expect(bst['_specifyComparable']).toBeDefined();
1549
+ expect([...bst.keys()]).toEqual([2, 1]);
1550
+ });
1551
+
1552
+ it('should throw if compare object key without specifyComparable', () => {
1553
+ const bst = new BST<any>();
1554
+ expect(() => bst.comparator({ a: 1 }, { a: 2 })).toThrow();
1555
+ });
1556
+ });
1557
+
1558
+ describe('BST addMany edge cases', () => {
1559
+ it('should addMany with values iterable', () => {
1560
+ const bst = new BST<number, string>();
1561
+ const keys = [1, 2, 3];
1562
+ const values = ['a', 'b', 'c'];
1563
+ const result = bst.addMany(keys, values);
1564
+ expect(result).toEqual([true, true, true]);
1565
+ expect([...bst]).toEqual([
1566
+ [1, 'a'],
1567
+ [2, 'b'],
1568
+ [3, 'c']
1569
+ ]);
1570
+ });
1571
+
1572
+ it('should addMany with isBalanceAdd=false', () => {
1573
+ const bst = new BST<number>();
1574
+ const result = bst.addMany([3, 1, 2], undefined, false);
1575
+ expect(result).toEqual([true, true, true]);
1576
+ expect([...bst.keys()]).toEqual([1, 2, 3]);
1577
+ });
1578
+
1579
+ it('should addMany with raw/entry/node', () => {
1580
+ const bst = new BST<number, string>([], { isMapMode: false });
1581
+ const node = new BSTNode(5, 'x');
1582
+ const result = bst.addMany([1, [2, 'b'], node]);
1583
+ expect(result).toEqual([true, true, true]);
1584
+ expect(bst.get(5)).toBe('x');
1585
+ });
1586
+ });
1587
+
1588
+ describe('BST perfectlyBalance and isAVLBalanced edge cases', () => {
1589
+ it('should perfectlyBalance with <1 node and both iterationType', () => {
1590
+ const bst = new BST<number>();
1591
+ expect(bst.perfectlyBalance('RECURSIVE')).toBe(false);
1592
+ expect(bst.perfectlyBalance('ITERATIVE')).toBe(false);
1593
+ bst.addMany([1, 2, 3]);
1594
+ expect(bst.perfectlyBalance('RECURSIVE')).toBe(true);
1595
+ bst.clear();
1596
+ bst.addMany([1, 2, 3]);
1597
+ expect(bst.perfectlyBalance('ITERATIVE')).toBe(true);
1598
+ });
1599
+
1600
+ it('should isAVLBalanced with both iterationType', () => {
1601
+ const bst = new BST<number>();
1602
+ expect(bst.isAVLBalanced('RECURSIVE')).toBe(true);
1603
+ expect(bst.isAVLBalanced('ITERATIVE')).toBe(true);
1604
+ bst.addMany([1, 2, 3, 4, 5]);
1605
+ expect(typeof bst.isAVLBalanced('RECURSIVE')).toBe('boolean');
1606
+ expect(typeof bst.isAVLBalanced('ITERATIVE')).toBe('boolean');
1607
+ });
1608
+ });
1609
+
1610
+ describe('BST _keyValueNodeOrEntryToNodeAndValue edge', () => {
1611
+ it('should return [undefined, undefined] for null', () => {
1612
+ const bst = new BST<number>();
1613
+ // @ts-ignore
1614
+ const result = bst['_keyValueNodeOrEntryToNodeAndValue'](null);
1615
+ expect(result).toEqual([undefined, undefined]);
1616
+ });
1617
+ });
1618
+
1540
1619
  describe('classic use', () => {
1541
1620
  it('@example Merge 3 sorted datasets', () => {
1542
1621
  const dataset1 = new BST<number, string>([
@@ -1,4 +1,4 @@
1
- import { BinaryTreeNode, BSTNode, RedBlackTree, RedBlackTreeNode } from '../../../../src';
1
+ import { BinaryTreeNode, BSTNode, IBinaryTree, RedBlackTree, RedBlackTreeNode } from '../../../../src';
2
2
  import { getRandomInt, getRandomIntArray, magnitude } from '../../../utils';
3
3
  import { OrderedMap } from 'js-sdsl';
4
4
 
@@ -148,7 +148,7 @@ describe('RedBlackTree 1', () => {
148
148
  });
149
149
 
150
150
  it('should the clone method', () => {
151
- function checkTreeStructure(rbTree: RedBlackTree<string, number>) {
151
+ function checkTreeStructure(rbTree: IBinaryTree<string, number>) {
152
152
  expect(rbTree.size).toBe(4);
153
153
  expect(rbTree.root?.key).toBe('2');
154
154
  expect(rbTree.root?.left?.key).toBe('1');
@@ -1,4 +1,4 @@
1
- import { BinaryTreeNode, BSTNode, RedBlackTreeNode, TreeCounter, TreeCounterNode } from '../../../../src';
1
+ import { BinaryTreeNode, BSTNode, IBinaryTree, RedBlackTreeNode, TreeCounter, TreeCounterNode } from '../../../../src';
2
2
  import { isDebugTest } from '../../../config';
3
3
  import { getRandomInt } from '../../../utils';
4
4
 
@@ -172,12 +172,12 @@ describe('TreeCounter operations test1', () => {
172
172
  expect(dfsInorderNodes[dfsInorderNodes.length - 1].key).toBe(16);
173
173
  expect(treeCounter.isPerfectlyBalanced()).toBe(false);
174
174
  treeCounter.perfectlyBalance();
175
- expect(treeCounter.isPerfectlyBalanced()).toBe(false);
175
+ expect(treeCounter.isPerfectlyBalanced()).toBe(true);
176
176
 
177
- expect(treeCounter.isAVLBalanced()).toBe(false);
177
+ expect(treeCounter.isAVLBalanced()).toBe(true);
178
178
 
179
179
  const bfsNodesAfterBalanced = treeCounter.bfs(node => node);
180
- expect(bfsNodesAfterBalanced[0].key).toBe(6);
180
+ expect(bfsNodesAfterBalanced[0].key).toBe(8);
181
181
  expect(bfsNodesAfterBalanced[bfsNodesAfterBalanced.length - 1].key).toBe(16);
182
182
 
183
183
  const removed11 = treeCounter.delete(11, true);
@@ -187,7 +187,7 @@ describe('TreeCounter operations test1', () => {
187
187
 
188
188
  if (removed11[0].deleted) expect(removed11[0].deleted.key).toBe(11);
189
189
 
190
- expect(treeCounter.isAVLBalanced()).toBe(false);
190
+ expect(treeCounter.isAVLBalanced()).toBe(true);
191
191
 
192
192
  expect(treeCounter.getHeight(15)).toBe(1);
193
193
 
@@ -197,9 +197,9 @@ describe('TreeCounter operations test1', () => {
197
197
  expect(removed1[0].deleted);
198
198
  if (removed1[0].deleted) expect(removed1[0].deleted.key).toBe(1);
199
199
 
200
- expect(treeCounter.isAVLBalanced()).toBe(false);
200
+ expect(treeCounter.isAVLBalanced()).toBe(true);
201
201
 
202
- expect(treeCounter.getHeight()).toBe(5);
202
+ expect(treeCounter.getHeight()).toBe(4);
203
203
 
204
204
  const removed4 = treeCounter.delete(4, true);
205
205
  expect(removed4 instanceof Array);
@@ -207,8 +207,8 @@ describe('TreeCounter operations test1', () => {
207
207
  expect(removed4[0].deleted);
208
208
  if (removed4[0].deleted) expect(removed4[0].deleted.key).toBe(4);
209
209
 
210
- expect(treeCounter.isAVLBalanced()).toBe(false);
211
- expect(treeCounter.getHeight()).toBe(5);
210
+ expect(treeCounter.isAVLBalanced()).toBe(true);
211
+ expect(treeCounter.getHeight()).toBe(4);
212
212
 
213
213
  const removed10 = treeCounter.delete(10, true);
214
214
  expect(removed10 instanceof Array);
@@ -225,7 +225,7 @@ describe('TreeCounter operations test1', () => {
225
225
  expect(removed15[0].deleted);
226
226
  if (removed15[0].deleted) expect(removed15[0].deleted.key).toBe(15);
227
227
 
228
- expect(treeCounter.isAVLBalanced()).toBe(false);
228
+ expect(treeCounter.isAVLBalanced()).toBe(true);
229
229
  expect(treeCounter.getHeight()).toBe(3);
230
230
 
231
231
  const removed5 = treeCounter.delete(5, true);
@@ -250,7 +250,7 @@ describe('TreeCounter operations test1', () => {
250
250
  expect(removed3[0]);
251
251
  expect(removed3[0].deleted);
252
252
  if (removed3[0].deleted) expect(removed3[0].deleted.key).toBe(3);
253
- expect(treeCounter.isAVLBalanced()).toBe(false);
253
+ expect(treeCounter.isAVLBalanced()).toBe(true);
254
254
  expect(treeCounter.getHeight()).toBe(3);
255
255
 
256
256
  const removed8 = treeCounter.delete(8, true);
@@ -440,11 +440,11 @@ describe('TreeCounter operations test recursively1', () => {
440
440
 
441
441
  treeCounter.perfectlyBalance();
442
442
 
443
- expect(treeCounter.isPerfectlyBalanced()).toBe(false);
444
- expect(treeCounter.isAVLBalanced()).toBe(false);
443
+ expect(treeCounter.isPerfectlyBalanced()).toBe(true);
444
+ expect(treeCounter.isAVLBalanced()).toBe(true);
445
445
 
446
446
  const bfsNodesAfterBalanced = treeCounter.bfs(node => node);
447
- expect(bfsNodesAfterBalanced[0].key).toBe(6);
447
+ expect(bfsNodesAfterBalanced[0].key).toBe(8);
448
448
  expect(bfsNodesAfterBalanced[bfsNodesAfterBalanced.length - 1].key).toBe(16);
449
449
 
450
450
  const removed11 = treeCounter.delete(11, true);
@@ -454,7 +454,7 @@ describe('TreeCounter operations test recursively1', () => {
454
454
 
455
455
  if (removed11[0].deleted) expect(removed11[0].deleted.key).toBe(11);
456
456
 
457
- expect(treeCounter.isAVLBalanced()).toBe(false);
457
+ expect(treeCounter.isAVLBalanced()).toBe(true);
458
458
 
459
459
  expect(treeCounter.getHeight(15)).toBe(1);
460
460
 
@@ -463,10 +463,9 @@ describe('TreeCounter operations test recursively1', () => {
463
463
  expect(removed1[0]);
464
464
  expect(removed1[0].deleted);
465
465
  if (removed1[0].deleted) expect(removed1[0].deleted.key).toBe(1);
466
+ expect(treeCounter.isAVLBalanced()).toBe(true);
466
467
 
467
- expect(treeCounter.isAVLBalanced()).toBe(false);
468
-
469
- expect(treeCounter.getHeight()).toBe(5);
468
+ expect(treeCounter.getHeight()).toBe(4);
470
469
 
471
470
  const removed4 = treeCounter.delete(4, true);
472
471
  expect(removed4 instanceof Array);
@@ -474,8 +473,8 @@ describe('TreeCounter operations test recursively1', () => {
474
473
  expect(removed4[0].deleted);
475
474
  if (removed4[0].deleted) expect(removed4[0].deleted.key).toBe(4);
476
475
 
477
- expect(treeCounter.isAVLBalanced()).toBe(false);
478
- expect(treeCounter.getHeight()).toBe(5);
476
+ expect(treeCounter.isAVLBalanced()).toBe(true);
477
+ expect(treeCounter.getHeight()).toBe(4);
479
478
 
480
479
  const removed10 = treeCounter.delete(10, true);
481
480
  expect(removed10 instanceof Array);
@@ -492,7 +491,7 @@ describe('TreeCounter operations test recursively1', () => {
492
491
  expect(removed15[0].deleted);
493
492
  if (removed15[0].deleted) expect(removed15[0].deleted.key).toBe(15);
494
493
 
495
- expect(treeCounter.isAVLBalanced()).toBe(false);
494
+ expect(treeCounter.isAVLBalanced()).toBe(true);
496
495
  expect(treeCounter.getHeight()).toBe(3);
497
496
 
498
497
  const removed5 = treeCounter.delete(5, true);
@@ -517,7 +516,8 @@ describe('TreeCounter operations test recursively1', () => {
517
516
  expect(removed3[0]);
518
517
  expect(removed3[0].deleted);
519
518
  if (removed3[0].deleted) expect(removed3[0].deleted.key).toBe(3);
520
- expect(treeCounter.isAVLBalanced()).toBe(false);
519
+
520
+ expect(treeCounter.isAVLBalanced()).toBe(true);
521
521
  expect(treeCounter.getHeight()).toBe(3);
522
522
 
523
523
  const removed8 = treeCounter.delete(8, true);
@@ -709,7 +709,7 @@ describe('TreeCounter delete test', function () {
709
709
  });
710
710
 
711
711
  it('should the clone method', () => {
712
- function checkTreeStructure(treeCounter: TreeCounter<string, number>) {
712
+ function checkTreeStructure(treeCounter: IBinaryTree<string, number>) {
713
713
  expect(treeCounter.size).toBe(4);
714
714
  expect(treeCounter.root?.key).toBe('2');
715
715
  expect(treeCounter.root?.left?.key).toBe('1');
@@ -969,7 +969,8 @@ describe('TreeCounter iterative methods test not map mode', () => {
969
969
  expect(treeCounter.count).toBe(21);
970
970
  expect(treeCounter.getComputedCount()).toBe(21);
971
971
  const cloned = treeCounter.clone();
972
+ expect(cloned instanceof TreeCounter).toBe(true);
972
973
  expect(cloned.root?.left?.key).toBe(1);
973
- expect(cloned.get(cloned.root?.right)).toBe(undefined);
974
+ expect(cloned.get(cloned.root?.right)).toBe('c');
974
975
  });
975
976
  });
@@ -1,4 +1,4 @@
1
- import { BinaryTreeNode, BSTNode, TreeMultiMap, TreeMultiMapNode } from '../../../../src';
1
+ import { BinaryTreeNode, BSTNode, IBinaryTree, TreeMultiMap, TreeMultiMapNode } from '../../../../src';
2
2
  import { getRandomInt } from '../../../utils';
3
3
 
4
4
  import { isDebugTest } from '../../../config';
@@ -163,7 +163,7 @@ describe('TreeMultiMap 1', () => {
163
163
  });
164
164
 
165
165
  it('should the clone method', () => {
166
- function checkTreeStructure(tmm: TreeMultiMap<string, number>) {
166
+ function checkTreeStructure(tmm: IBinaryTree<string, number[]>) {
167
167
  expect(tmm.size).toBe(4);
168
168
  expect(tmm.root?.key).toBe('2');
169
169
  expect(tmm.root?.left?.key).toBe('1');
@@ -627,7 +627,7 @@ describe('TreeMultiMap 2', () => {
627
627
  });
628
628
 
629
629
  describe('TreeMultiMap iterative methods test', () => {
630
- let tmm: TreeMultiMap<number, string, object, string, string, object>;
630
+ let tmm: TreeMultiMap<number, string, object>;
631
631
  beforeEach(() => {
632
632
  tmm = new TreeMultiMap();
633
633
  tmm.add([1, ['a']]);
@@ -83,10 +83,6 @@ class MyGraph<
83
83
 
84
84
  clear(): void {}
85
85
 
86
- clone(): any {
87
- return {};
88
- }
89
-
90
86
  protected _addEdge(edge: EO): boolean {
91
87
  return edge ? true : true;
92
88
  }
@@ -685,7 +685,7 @@ describe('DirectedGraph iterative Methods', () => {
685
685
  });
686
686
 
687
687
  it('filter should return vertexMap that satisfy the condition', () => {
688
- const filtered = graph.filter(vertex => vertex === 'A' || vertex === 'B');
688
+ const filtered = graph.filterEntries(key => key === 'A' || key === 'B');
689
689
  expect(filtered).toEqual([
690
690
  ['A', undefined],
691
691
  ['B', undefined]
@@ -155,18 +155,14 @@ describe('Heap Operation Test', () => {
155
155
  }
156
156
  );
157
157
 
158
- const mappedMinHeap = minHeap.map(
159
- item => item.key,
160
- (a, b) => a - b
161
- );
158
+ const mappedMinHeap = minHeap.map(item => item.key, { comparator: (a, b) => a - b });
162
159
  expect(mappedMinHeap.peek()).toBe(0);
163
160
  expect(mappedMinHeap.sort()).toEqual([0, 1, 2, 3, 4, 5, 6]);
164
161
 
165
- const mappedToElementFnMinHeap = minHeap.map<string, { id: string }>(
166
- item => item.key.toString(),
167
- (a, b) => Number(a) - Number(b),
168
- rawElement => rawElement.id
169
- );
162
+ const mappedToElementFnMinHeap = minHeap.map<string, { id: string }>(item => item.key.toString(), {
163
+ comparator: (a, b) => Number(a) - Number(b),
164
+ toElementFn: rawElement => rawElement.id
165
+ });
170
166
  expect(mappedToElementFnMinHeap.peek()).toBe('0');
171
167
  expect(mappedToElementFnMinHeap.sort()).toEqual(['0', '1', '2', '3', '4', '5', '6']);
172
168
 
@@ -234,17 +230,17 @@ describe('Heap Operation Test', () => {
234
230
  expect(hp.leaf).toBe(1);
235
231
  });
236
232
 
237
- it('should error', function () {
238
- expect(() => {
239
- new Heap([{ key: 1 }, { key: 2 }, { key: 3 }]);
240
- }).toThrow(
241
- "When comparing object types, a custom comparator must be defined in the constructor's options parameter."
242
- );
243
- });
233
+ // it('should error', function () {
234
+ // expect(() => {
235
+ // new Heap([{ key: 1 }, { key: 2 }, { key: 3 }]);
236
+ // }).toThrow(
237
+ // "When comparing object types, a custom comparator must be defined in the constructor's options parameter."
238
+ // );
239
+ // });
244
240
  });
245
241
 
246
242
  describe('Heap HOF', () => {
247
- let hp: Heap;
243
+ let hp: Heap<{ key: number }, { key: number }>;
248
244
 
249
245
  beforeEach(() => {
250
246
  hp = new Heap([{ key: 1 }, { key: 2 }, { key: 3 }], { comparator: (a, b) => a.key - b.key });
@@ -256,10 +252,7 @@ describe('Heap HOF', () => {
256
252
  });
257
253
 
258
254
  it('should map', () => {
259
- const mapped = hp.map(
260
- ({ key }) => [key, key],
261
- (a, b) => a[0] - b[0]
262
- );
255
+ const mapped = hp.map(({ key }) => [key, key], { comparator: (a, b) => a[0] - b[0] });
263
256
  expect([...mapped]).toEqual([
264
257
  [1, 1],
265
258
  [2, 2],
@@ -71,10 +71,7 @@ describe('MaxHeap', () => {
71
71
  }
72
72
  );
73
73
 
74
- const mappedMaxHeap = maxHeap.map(
75
- item => item.key,
76
- (a, b) => b - a
77
- );
74
+ const mappedMaxHeap = maxHeap.map(item => item.key, { comparator: (a, b) => b - a });
78
75
  expect(mappedMaxHeap.peek()).toBe(6);
79
76
  expect(mappedMaxHeap.sort()).toEqual([6, 5, 4, 3, 2, 1, 0]);
80
77
 
@@ -83,11 +80,10 @@ describe('MaxHeap', () => {
83
80
  {
84
81
  id: string;
85
82
  }
86
- >(
87
- item => item.key.toString(),
88
- (a, b) => Number(b) - Number(a),
89
- rawElement => rawElement.id
90
- );
83
+ >(item => item.key.toString(), {
84
+ comparator: (a, b) => Number(b) - Number(a),
85
+ toElementFn: rawElement => rawElement.id
86
+ });
91
87
  expect(mappedToElementFnMaxHeap.peek()).toBe('6');
92
88
  expect(mappedToElementFnMaxHeap.sort()).toEqual(['6', '5', '4', '3', '2', '1', '0']);
93
89
 
@@ -106,10 +106,7 @@ describe('Heap iterative methods', () => {
106
106
  });
107
107
 
108
108
  it('map method correctly maps elements', () => {
109
- const result = heap.map(
110
- x => x / 10,
111
- (a: number, b: number) => a - b
112
- );
109
+ const result = heap.map(x => x / 10, { comparator: (a: number, b: number) => a - b });
113
110
  expect([...result]).toEqual([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
114
111
  });
115
112
 
@@ -783,6 +783,16 @@ describe('classic use', () => {
783
783
  this.map = new Map<K, DoublyLinkedListNode<CacheEntry<K, V>>>();
784
784
  }
785
785
 
786
+ // Get the current cache length
787
+ get length(): number {
788
+ return this.list.length;
789
+ }
790
+
791
+ // Check if it is empty
792
+ get isEmpty(): boolean {
793
+ return this.list.isEmpty();
794
+ }
795
+
786
796
  // Get cached value
787
797
  get(key: K): V | undefined {
788
798
  const node = this.map.get(key);
@@ -828,12 +838,6 @@ describe('classic use', () => {
828
838
  }
829
839
  }
830
840
 
831
- // Move the node to the head of the linked list
832
- private moveToFront(node: DoublyLinkedListNode<CacheEntry<K, V>>): void {
833
- this.list.delete(node);
834
- this.list.unshift(node.value);
835
- }
836
-
837
841
  // Delete specific key
838
842
  delete(key: K): boolean {
839
843
  const node = this.map.get(key);
@@ -853,14 +857,10 @@ describe('classic use', () => {
853
857
  this.map.clear();
854
858
  }
855
859
 
856
- // Get the current cache length
857
- get length(): number {
858
- return this.list.length;
859
- }
860
-
861
- // Check if it is empty
862
- get isEmpty(): boolean {
863
- return this.list.isEmpty();
860
+ // Move the node to the head of the linked list
861
+ private moveToFront(node: DoublyLinkedListNode<CacheEntry<K, V>>): void {
862
+ this.list.delete(node);
863
+ this.list.unshift(node.value);
864
864
  }
865
865
  }
866
866
 
@@ -618,11 +618,6 @@ describe('SinglyLinkedList', () => {
618
618
  list.push(3);
619
619
  expect(list.map(value => value * 2).toArray()).toEqual([2, 4, 6]);
620
620
  });
621
-
622
- it('should reduce the list', () => {
623
- const list1 = SinglyLinkedList.fromArray([1, 2, 3]);
624
- expect(list1.reduce((acc, value) => acc + value, 0)).toEqual(6);
625
- });
626
621
  });
627
622
 
628
623
  describe('iterable methods', () => {
@@ -651,9 +646,7 @@ describe('iterable methods', () => {
651
646
  });
652
647
 
653
648
  describe('classic uses', () => {
654
-
655
649
  it('@example implementation of a basic text editor', () => {
656
-
657
650
  class TextEditor {
658
651
  private content: SinglyLinkedList<string>;
659
652
  private cursorIndex: number;
@@ -139,21 +139,18 @@ describe('MaxPriorityQueue Operation Test', () => {
139
139
  expect(filtered instanceof MaxPriorityQueue).toBe(true);
140
140
  expect([...filtered]).toEqual([7, 1, 5]);
141
141
 
142
- const mapped = filtered.map(
143
- item => ({ key: item }),
144
- (a, b) => b.key - a.key
145
- );
142
+ const mapped = filtered.map(item => ({ key: item }), { comparator: (a, b) => b.key - a.key });
146
143
  expect(mapped instanceof MaxPriorityQueue).toBe(true);
147
144
  expect([...mapped]).toEqual([{ key: 7 }, { key: 1 }, { key: 5 }]);
148
145
  });
149
146
 
150
- it('should MaxPriorityQueue throw an error while initialed with object data', function () {
151
- expect(() => {
152
- new MaxPriorityQueue<{ key: number }>([{ key: 7 }, { key: 1 }, { key: 7 }]);
153
- }).toThrow(
154
- "When comparing object types, a custom comparator must be defined in the constructor's options parameter."
155
- );
156
- });
147
+ // it('should MaxPriorityQueue throw an error while initialed with object data', function () {
148
+ // expect(() => {
149
+ // new MaxPriorityQueue<{ key: number }>([{ key: 7 }, { key: 1 }, { key: 7 }]);
150
+ // }).toThrow(
151
+ // "When comparing object types, a custom comparator must be defined in the constructor's options parameter."
152
+ // );
153
+ // });
157
154
 
158
155
  it('should MaxPriorityQueue comparator return 0 when equal values are added', function () {
159
156
  const duplicated = new MaxPriorityQueue<number>([7, 1, 7, 7]);
@@ -70,10 +70,7 @@ describe('MinPriorityQueue Operation Test', () => {
70
70
  expect(filtered instanceof MinPriorityQueue).toBe(true);
71
71
  expect([...filtered]).toEqual([1, 5, 7]);
72
72
 
73
- const mapped = filtered.map(
74
- item => ({ key: item }),
75
- (a, b) => a.key - b.key
76
- );
73
+ const mapped = filtered.map(item => ({ key: item }), { comparator: (a, b) => a.key - b.key });
77
74
  expect(mapped instanceof MinPriorityQueue).toBe(true);
78
75
  expect([...mapped]).toEqual([{ key: 1 }, { key: 5 }, { key: 7 }]);
79
76
  expect(mapped.toVisual()).toEqual([{ key: 1 }, { key: 5 }, { key: 7 }]);
@@ -62,10 +62,7 @@ describe('PriorityQueue Operation Test', () => {
62
62
  expect(filtered instanceof PriorityQueue).toBe(true);
63
63
  expect([...filtered]).toEqual([1, 3, 5, 7]);
64
64
 
65
- const mapped = filtered.map(
66
- item => ({ key: item }),
67
- (a, b) => a.key - b.key
68
- );
65
+ const mapped = filtered.map(item => ({ key: item }), { comparator: (a, b) => a.key - b.key });
69
66
  expect(mapped instanceof PriorityQueue).toBe(true);
70
67
  expect([...mapped]).toEqual([{ key: 1 }, { key: 3 }, { key: 5 }, { key: 7 }]);
71
68
  });
@@ -153,10 +153,9 @@ describe('Queue', () => {
153
153
  expect(mappedQueue.at(0)).toBe(1);
154
154
  expect([...mappedQueue]).toEqual([1, 6, 5, 3, 2, 4, 0]);
155
155
 
156
- const mappedToElementFnQueue = queue.map<string, { id: string }>(
157
- item => item.key.toString(),
158
- rawElement => rawElement.id
159
- );
156
+ const mappedToElementFnQueue = queue.map<string, { id: string }>(item => item.key.toString(), {
157
+ toElementFn: rawElement => rawElement.id
158
+ });
160
159
  expect(mappedToElementFnQueue.at(0)).toBe('1');
161
160
  expect([...mappedToElementFnQueue]).toEqual(['1', '6', '5', '3', '2', '4', '0']);
162
161
 
@@ -603,7 +602,7 @@ describe('classic uses', () => {
603
602
  let maxSum = 0;
604
603
  let currentSum = 0;
605
604
 
606
- nums.forEach((num) => {
605
+ nums.forEach(num => {
607
606
  queue.push(num);
608
607
  currentSum += num;
609
608
 
@@ -172,4 +172,3 @@ describe('isComparable', () => {
172
172
  });
173
173
  });
174
174
  });
175
-
@@ -1,71 +0,0 @@
1
- import { AVLTree } from 'data-structure-typed';
2
- import Benchmark from 'benchmark';
3
-
4
- const magnitude = {
5
- THOUSAND: 1000,
6
- TEN_THOUSAND: 10000,
7
- HUNDRED_THOUSAND: 100000,
8
- MILLION: 1000000,
9
- TEN_MILLION: 10000000,
10
- BILLION: 100000000
11
- };
12
-
13
- function getRandomIntArray(length = 1000, min = -1000, max = 1000, unique = true) {
14
- if (unique) {
15
- if (max - min + 1 < length) {
16
- throw new Error('Range too small for unique values with the specified length');
17
- }
18
- const allNumbers = Array.from({ length: max - min + 1 }, (_, i) => i + min);
19
- for (let i = allNumbers.length - 1; i > 0; i--) {
20
- const j = Math.floor(Math.random() * (i + 1));
21
- [allNumbers[i], allNumbers[j]] = [allNumbers[j], allNumbers[i]];
22
- }
23
- return allNumbers.slice(0, length);
24
- }
25
- else {
26
- return Array.from({ length }, () => Math.floor(Math.random() * (max - min + 1)) + min);
27
- }
28
- }
29
-
30
- const suite = new Benchmark.Suite();
31
- const avlTree = new AVLTree();
32
- const { HUNDRED_THOUSAND } = magnitude;
33
- const randomArray = getRandomIntArray(HUNDRED_THOUSAND, 0, HUNDRED_THOUSAND - 1, true);
34
- suite
35
- .add(`${HUNDRED_THOUSAND.toLocaleString()} add randomly`, () => {
36
- avlTree.clear();
37
- for (let i = 0; i < randomArray.length; i++)
38
- avlTree.add(randomArray[i]);
39
- })
40
- .add(`${HUNDRED_THOUSAND.toLocaleString()} add`, () => {
41
- avlTree.clear();
42
- for (let i = 0; i < randomArray.length; i++)
43
- avlTree.add(i);
44
- })
45
- .add(`${HUNDRED_THOUSAND.toLocaleString()} get`, () => {
46
- for (let i = 0; i < randomArray.length; i++)
47
- avlTree.get(randomArray[i]);
48
- })
49
- .add(`${HUNDRED_THOUSAND.toLocaleString()} getNode`, () => {
50
- for (let i = 0; i < randomArray.length; i++)
51
- avlTree.getNode(randomArray[i]);
52
- })
53
- .add(`${HUNDRED_THOUSAND.toLocaleString()} iterator`, () => {
54
- const entries = [...avlTree];
55
- return entries.length === HUNDRED_THOUSAND;
56
- })
57
- .add(`${HUNDRED_THOUSAND.toLocaleString()} add & delete orderly`, () => {
58
- avlTree.clear();
59
- for (let i = 0; i < randomArray.length; i++)
60
- avlTree.add(i);
61
- for (let i = 0; i < randomArray.length; i++)
62
- avlTree.delete(i);
63
- })
64
- .add(`${HUNDRED_THOUSAND.toLocaleString()} add & delete randomly`, () => {
65
- avlTree.clear();
66
- for (let i = 0; i < randomArray.length; i++)
67
- avlTree.add(randomArray[i]);
68
- for (let i = 0; i < randomArray.length; i++)
69
- avlTree.delete(randomArray[i]);
70
- });
71
- export { suite };