data-structure-typed 2.0.5 → 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 (260) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/COMMANDS.md +17 -0
  3. package/benchmark/report.html +13 -77
  4. package/benchmark/report.json +145 -177
  5. package/dist/cjs/data-structures/base/iterable-element-base.d.ts +186 -83
  6. package/dist/cjs/data-structures/base/iterable-element-base.js +149 -107
  7. package/dist/cjs/data-structures/base/iterable-element-base.js.map +1 -1
  8. package/dist/cjs/data-structures/base/iterable-entry-base.d.ts +95 -119
  9. package/dist/cjs/data-structures/base/iterable-entry-base.js +59 -116
  10. package/dist/cjs/data-structures/base/iterable-entry-base.js.map +1 -1
  11. package/dist/cjs/data-structures/base/linear-base.d.ts +250 -192
  12. package/dist/cjs/data-structures/base/linear-base.js +137 -274
  13. package/dist/cjs/data-structures/base/linear-base.js.map +1 -1
  14. package/dist/cjs/data-structures/binary-tree/avl-tree-counter.d.ts +126 -158
  15. package/dist/cjs/data-structures/binary-tree/avl-tree-counter.js +171 -205
  16. package/dist/cjs/data-structures/binary-tree/avl-tree-counter.js.map +1 -1
  17. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +100 -69
  18. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js +135 -87
  19. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
  20. package/dist/cjs/data-structures/binary-tree/avl-tree.d.ts +138 -149
  21. package/dist/cjs/data-structures/binary-tree/avl-tree.js +208 -195
  22. package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
  23. package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +476 -632
  24. package/dist/cjs/data-structures/binary-tree/binary-tree.js +594 -865
  25. package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
  26. package/dist/cjs/data-structures/binary-tree/bst.d.ts +258 -306
  27. package/dist/cjs/data-structures/binary-tree/bst.js +505 -481
  28. package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
  29. package/dist/cjs/data-structures/binary-tree/red-black-tree.d.ts +107 -179
  30. package/dist/cjs/data-structures/binary-tree/red-black-tree.js +114 -209
  31. package/dist/cjs/data-structures/binary-tree/red-black-tree.js.map +1 -1
  32. package/dist/cjs/data-structures/binary-tree/tree-counter.d.ts +132 -154
  33. package/dist/cjs/data-structures/binary-tree/tree-counter.js +172 -203
  34. package/dist/cjs/data-structures/binary-tree/tree-counter.js.map +1 -1
  35. package/dist/cjs/data-structures/binary-tree/tree-multi-map.d.ts +72 -69
  36. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js +105 -85
  37. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js.map +1 -1
  38. package/dist/cjs/data-structures/graph/abstract-graph.d.ts +238 -233
  39. package/dist/cjs/data-structures/graph/abstract-graph.js +267 -237
  40. package/dist/cjs/data-structures/graph/abstract-graph.js.map +1 -1
  41. package/dist/cjs/data-structures/graph/directed-graph.d.ts +108 -224
  42. package/dist/cjs/data-structures/graph/directed-graph.js +146 -233
  43. package/dist/cjs/data-structures/graph/directed-graph.js.map +1 -1
  44. package/dist/cjs/data-structures/graph/map-graph.d.ts +49 -55
  45. package/dist/cjs/data-structures/graph/map-graph.js +56 -59
  46. package/dist/cjs/data-structures/graph/map-graph.js.map +1 -1
  47. package/dist/cjs/data-structures/graph/undirected-graph.d.ts +103 -146
  48. package/dist/cjs/data-structures/graph/undirected-graph.js +129 -149
  49. package/dist/cjs/data-structures/graph/undirected-graph.js.map +1 -1
  50. package/dist/cjs/data-structures/hash/hash-map.d.ts +164 -338
  51. package/dist/cjs/data-structures/hash/hash-map.js +270 -457
  52. package/dist/cjs/data-structures/hash/hash-map.js.map +1 -1
  53. package/dist/cjs/data-structures/heap/heap.d.ts +214 -289
  54. package/dist/cjs/data-structures/heap/heap.js +340 -349
  55. package/dist/cjs/data-structures/heap/heap.js.map +1 -1
  56. package/dist/cjs/data-structures/heap/max-heap.d.ts +11 -47
  57. package/dist/cjs/data-structures/heap/max-heap.js +11 -66
  58. package/dist/cjs/data-structures/heap/max-heap.js.map +1 -1
  59. package/dist/cjs/data-structures/heap/min-heap.d.ts +12 -47
  60. package/dist/cjs/data-structures/heap/min-heap.js +11 -66
  61. package/dist/cjs/data-structures/heap/min-heap.js.map +1 -1
  62. package/dist/cjs/data-structures/linked-list/doubly-linked-list.d.ts +231 -347
  63. package/dist/cjs/data-structures/linked-list/doubly-linked-list.js +368 -494
  64. package/dist/cjs/data-structures/linked-list/doubly-linked-list.js.map +1 -1
  65. package/dist/cjs/data-structures/linked-list/singly-linked-list.d.ts +261 -310
  66. package/dist/cjs/data-structures/linked-list/singly-linked-list.js +447 -466
  67. package/dist/cjs/data-structures/linked-list/singly-linked-list.js.map +1 -1
  68. package/dist/cjs/data-structures/linked-list/skip-linked-list.d.ts +0 -107
  69. package/dist/cjs/data-structures/linked-list/skip-linked-list.js +0 -100
  70. package/dist/cjs/data-structures/linked-list/skip-linked-list.js.map +1 -1
  71. package/dist/cjs/data-structures/priority-queue/max-priority-queue.d.ts +12 -56
  72. package/dist/cjs/data-structures/priority-queue/max-priority-queue.js +11 -78
  73. package/dist/cjs/data-structures/priority-queue/max-priority-queue.js.map +1 -1
  74. package/dist/cjs/data-structures/priority-queue/min-priority-queue.d.ts +11 -57
  75. package/dist/cjs/data-structures/priority-queue/min-priority-queue.js +10 -79
  76. package/dist/cjs/data-structures/priority-queue/min-priority-queue.js.map +1 -1
  77. package/dist/cjs/data-structures/priority-queue/priority-queue.d.ts +2 -61
  78. package/dist/cjs/data-structures/priority-queue/priority-queue.js +8 -83
  79. package/dist/cjs/data-structures/priority-queue/priority-queue.js.map +1 -1
  80. package/dist/cjs/data-structures/queue/deque.d.ts +227 -254
  81. package/dist/cjs/data-structures/queue/deque.js +309 -348
  82. package/dist/cjs/data-structures/queue/deque.js.map +1 -1
  83. package/dist/cjs/data-structures/queue/queue.d.ts +180 -201
  84. package/dist/cjs/data-structures/queue/queue.js +265 -248
  85. package/dist/cjs/data-structures/queue/queue.js.map +1 -1
  86. package/dist/cjs/data-structures/stack/stack.d.ts +124 -102
  87. package/dist/cjs/data-structures/stack/stack.js +181 -125
  88. package/dist/cjs/data-structures/stack/stack.js.map +1 -1
  89. package/dist/cjs/data-structures/trie/trie.d.ts +164 -165
  90. package/dist/cjs/data-structures/trie/trie.js +189 -172
  91. package/dist/cjs/data-structures/trie/trie.js.map +1 -1
  92. package/dist/cjs/interfaces/binary-tree.d.ts +56 -6
  93. package/dist/cjs/interfaces/graph.d.ts +16 -0
  94. package/dist/cjs/types/data-structures/base/base.d.ts +1 -1
  95. package/dist/cjs/types/data-structures/graph/abstract-graph.d.ts +4 -0
  96. package/dist/cjs/types/utils/utils.d.ts +1 -0
  97. package/dist/cjs/utils/utils.d.ts +1 -1
  98. package/dist/cjs/utils/utils.js +2 -1
  99. package/dist/cjs/utils/utils.js.map +1 -1
  100. package/dist/esm/data-structures/base/iterable-element-base.d.ts +186 -83
  101. package/dist/esm/data-structures/base/iterable-element-base.js +155 -107
  102. package/dist/esm/data-structures/base/iterable-element-base.js.map +1 -1
  103. package/dist/esm/data-structures/base/iterable-entry-base.d.ts +95 -119
  104. package/dist/esm/data-structures/base/iterable-entry-base.js +59 -116
  105. package/dist/esm/data-structures/base/iterable-entry-base.js.map +1 -1
  106. package/dist/esm/data-structures/base/linear-base.d.ts +250 -192
  107. package/dist/esm/data-structures/base/linear-base.js +137 -274
  108. package/dist/esm/data-structures/base/linear-base.js.map +1 -1
  109. package/dist/esm/data-structures/binary-tree/avl-tree-counter.d.ts +126 -158
  110. package/dist/esm/data-structures/binary-tree/avl-tree-counter.js +171 -212
  111. package/dist/esm/data-structures/binary-tree/avl-tree-counter.js.map +1 -1
  112. package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.d.ts +100 -69
  113. package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.js +133 -94
  114. package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
  115. package/dist/esm/data-structures/binary-tree/avl-tree.d.ts +138 -149
  116. package/dist/esm/data-structures/binary-tree/avl-tree.js +206 -200
  117. package/dist/esm/data-structures/binary-tree/avl-tree.js.map +1 -1
  118. package/dist/esm/data-structures/binary-tree/binary-tree.d.ts +476 -632
  119. package/dist/esm/data-structures/binary-tree/binary-tree.js +598 -874
  120. package/dist/esm/data-structures/binary-tree/binary-tree.js.map +1 -1
  121. package/dist/esm/data-structures/binary-tree/bst.d.ts +258 -306
  122. package/dist/esm/data-structures/binary-tree/bst.js +507 -487
  123. package/dist/esm/data-structures/binary-tree/bst.js.map +1 -1
  124. package/dist/esm/data-structures/binary-tree/red-black-tree.d.ts +107 -179
  125. package/dist/esm/data-structures/binary-tree/red-black-tree.js +114 -215
  126. package/dist/esm/data-structures/binary-tree/red-black-tree.js.map +1 -1
  127. package/dist/esm/data-structures/binary-tree/tree-counter.d.ts +132 -154
  128. package/dist/esm/data-structures/binary-tree/tree-counter.js +175 -209
  129. package/dist/esm/data-structures/binary-tree/tree-counter.js.map +1 -1
  130. package/dist/esm/data-structures/binary-tree/tree-multi-map.d.ts +72 -69
  131. package/dist/esm/data-structures/binary-tree/tree-multi-map.js +103 -92
  132. package/dist/esm/data-structures/binary-tree/tree-multi-map.js.map +1 -1
  133. package/dist/esm/data-structures/graph/abstract-graph.d.ts +238 -233
  134. package/dist/esm/data-structures/graph/abstract-graph.js +267 -237
  135. package/dist/esm/data-structures/graph/abstract-graph.js.map +1 -1
  136. package/dist/esm/data-structures/graph/directed-graph.d.ts +108 -224
  137. package/dist/esm/data-structures/graph/directed-graph.js +145 -233
  138. package/dist/esm/data-structures/graph/directed-graph.js.map +1 -1
  139. package/dist/esm/data-structures/graph/map-graph.d.ts +49 -55
  140. package/dist/esm/data-structures/graph/map-graph.js +56 -59
  141. package/dist/esm/data-structures/graph/map-graph.js.map +1 -1
  142. package/dist/esm/data-structures/graph/undirected-graph.d.ts +103 -146
  143. package/dist/esm/data-structures/graph/undirected-graph.js +128 -149
  144. package/dist/esm/data-structures/graph/undirected-graph.js.map +1 -1
  145. package/dist/esm/data-structures/hash/hash-map.d.ts +164 -338
  146. package/dist/esm/data-structures/hash/hash-map.js +270 -457
  147. package/dist/esm/data-structures/hash/hash-map.js.map +1 -1
  148. package/dist/esm/data-structures/heap/heap.d.ts +214 -289
  149. package/dist/esm/data-structures/heap/heap.js +329 -349
  150. package/dist/esm/data-structures/heap/heap.js.map +1 -1
  151. package/dist/esm/data-structures/heap/max-heap.d.ts +11 -47
  152. package/dist/esm/data-structures/heap/max-heap.js +11 -66
  153. package/dist/esm/data-structures/heap/max-heap.js.map +1 -1
  154. package/dist/esm/data-structures/heap/min-heap.d.ts +12 -47
  155. package/dist/esm/data-structures/heap/min-heap.js +11 -66
  156. package/dist/esm/data-structures/heap/min-heap.js.map +1 -1
  157. package/dist/esm/data-structures/linked-list/doubly-linked-list.d.ts +231 -347
  158. package/dist/esm/data-structures/linked-list/doubly-linked-list.js +368 -495
  159. package/dist/esm/data-structures/linked-list/doubly-linked-list.js.map +1 -1
  160. package/dist/esm/data-structures/linked-list/singly-linked-list.d.ts +261 -310
  161. package/dist/esm/data-structures/linked-list/singly-linked-list.js +448 -467
  162. package/dist/esm/data-structures/linked-list/singly-linked-list.js.map +1 -1
  163. package/dist/esm/data-structures/linked-list/skip-linked-list.d.ts +0 -107
  164. package/dist/esm/data-structures/linked-list/skip-linked-list.js +0 -100
  165. package/dist/esm/data-structures/linked-list/skip-linked-list.js.map +1 -1
  166. package/dist/esm/data-structures/priority-queue/max-priority-queue.d.ts +12 -56
  167. package/dist/esm/data-structures/priority-queue/max-priority-queue.js +11 -78
  168. package/dist/esm/data-structures/priority-queue/max-priority-queue.js.map +1 -1
  169. package/dist/esm/data-structures/priority-queue/min-priority-queue.d.ts +11 -57
  170. package/dist/esm/data-structures/priority-queue/min-priority-queue.js +10 -79
  171. package/dist/esm/data-structures/priority-queue/min-priority-queue.js.map +1 -1
  172. package/dist/esm/data-structures/priority-queue/priority-queue.d.ts +2 -61
  173. package/dist/esm/data-structures/priority-queue/priority-queue.js +8 -83
  174. package/dist/esm/data-structures/priority-queue/priority-queue.js.map +1 -1
  175. package/dist/esm/data-structures/queue/deque.d.ts +227 -254
  176. package/dist/esm/data-structures/queue/deque.js +313 -348
  177. package/dist/esm/data-structures/queue/deque.js.map +1 -1
  178. package/dist/esm/data-structures/queue/queue.d.ts +180 -201
  179. package/dist/esm/data-structures/queue/queue.js +263 -248
  180. package/dist/esm/data-structures/queue/queue.js.map +1 -1
  181. package/dist/esm/data-structures/stack/stack.d.ts +124 -102
  182. package/dist/esm/data-structures/stack/stack.js +181 -125
  183. package/dist/esm/data-structures/stack/stack.js.map +1 -1
  184. package/dist/esm/data-structures/trie/trie.d.ts +164 -165
  185. package/dist/esm/data-structures/trie/trie.js +193 -172
  186. package/dist/esm/data-structures/trie/trie.js.map +1 -1
  187. package/dist/esm/interfaces/binary-tree.d.ts +56 -6
  188. package/dist/esm/interfaces/graph.d.ts +16 -0
  189. package/dist/esm/types/data-structures/base/base.d.ts +1 -1
  190. package/dist/esm/types/data-structures/graph/abstract-graph.d.ts +4 -0
  191. package/dist/esm/types/utils/utils.d.ts +1 -0
  192. package/dist/esm/utils/utils.d.ts +1 -1
  193. package/dist/esm/utils/utils.js +2 -1
  194. package/dist/esm/utils/utils.js.map +1 -1
  195. package/dist/umd/data-structure-typed.js +4685 -6477
  196. package/dist/umd/data-structure-typed.min.js +8 -6
  197. package/dist/umd/data-structure-typed.min.js.map +1 -1
  198. package/package.json +3 -4
  199. package/src/data-structures/base/iterable-element-base.ts +238 -115
  200. package/src/data-structures/base/iterable-entry-base.ts +96 -120
  201. package/src/data-structures/base/linear-base.ts +271 -277
  202. package/src/data-structures/binary-tree/avl-tree-counter.ts +198 -216
  203. package/src/data-structures/binary-tree/avl-tree-multi-map.ts +192 -101
  204. package/src/data-structures/binary-tree/avl-tree.ts +239 -206
  205. package/src/data-structures/binary-tree/binary-tree.ts +660 -889
  206. package/src/data-structures/binary-tree/bst.ts +568 -570
  207. package/src/data-structures/binary-tree/red-black-tree.ts +161 -222
  208. package/src/data-structures/binary-tree/tree-counter.ts +199 -218
  209. package/src/data-structures/binary-tree/tree-multi-map.ts +131 -97
  210. package/src/data-structures/graph/abstract-graph.ts +339 -264
  211. package/src/data-structures/graph/directed-graph.ts +146 -236
  212. package/src/data-structures/graph/map-graph.ts +63 -60
  213. package/src/data-structures/graph/undirected-graph.ts +129 -152
  214. package/src/data-structures/hash/hash-map.ts +274 -496
  215. package/src/data-structures/heap/heap.ts +389 -402
  216. package/src/data-structures/heap/max-heap.ts +12 -76
  217. package/src/data-structures/heap/min-heap.ts +13 -76
  218. package/src/data-structures/linked-list/doubly-linked-list.ts +426 -530
  219. package/src/data-structures/linked-list/singly-linked-list.ts +495 -517
  220. package/src/data-structures/linked-list/skip-linked-list.ts +1 -108
  221. package/src/data-structures/priority-queue/max-priority-queue.ts +12 -87
  222. package/src/data-structures/priority-queue/min-priority-queue.ts +11 -88
  223. package/src/data-structures/priority-queue/priority-queue.ts +3 -92
  224. package/src/data-structures/queue/deque.ts +381 -357
  225. package/src/data-structures/queue/queue.ts +310 -264
  226. package/src/data-structures/stack/stack.ts +217 -131
  227. package/src/data-structures/trie/trie.ts +240 -175
  228. package/src/interfaces/binary-tree.ts +240 -6
  229. package/src/interfaces/graph.ts +37 -0
  230. package/src/types/data-structures/base/base.ts +5 -5
  231. package/src/types/data-structures/graph/abstract-graph.ts +5 -0
  232. package/src/types/utils/utils.ts +2 -0
  233. package/src/utils/utils.ts +9 -14
  234. package/test/integration/index.html +1 -1
  235. package/test/performance/benchmark-runner.ts +528 -0
  236. package/test/performance/reportor.mjs +43 -43
  237. package/test/performance/runner-config.json +39 -0
  238. package/test/performance/single-suite-runner.ts +69 -0
  239. package/test/unit/data-structures/binary-tree/avl-tree-counter.test.ts +3 -3
  240. package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +5 -5
  241. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +4 -4
  242. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +350 -90
  243. package/test/unit/data-structures/binary-tree/bst.test.ts +12 -9
  244. package/test/unit/data-structures/binary-tree/red-black-tree.test.ts +2 -2
  245. package/test/unit/data-structures/binary-tree/tree-counter.test.ts +25 -24
  246. package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +3 -3
  247. package/test/unit/data-structures/graph/abstract-graph.test.ts +0 -4
  248. package/test/unit/data-structures/graph/directed-graph.test.ts +1 -1
  249. package/test/unit/data-structures/heap/heap.test.ts +14 -21
  250. package/test/unit/data-structures/heap/max-heap.test.ts +5 -9
  251. package/test/unit/data-structures/heap/min-heap.test.ts +1 -4
  252. package/test/unit/data-structures/linked-list/doubly-linked-list.test.ts +14 -14
  253. package/test/unit/data-structures/linked-list/singly-linked-list.test.ts +0 -7
  254. package/test/unit/data-structures/priority-queue/max-priority-queue.test.ts +8 -11
  255. package/test/unit/data-structures/priority-queue/min-priority-queue.test.ts +1 -4
  256. package/test/unit/data-structures/priority-queue/priority-queue.test.ts +1 -4
  257. package/test/unit/data-structures/queue/queue.test.ts +4 -5
  258. package/test/unit/utils/utils.test.ts +0 -1
  259. package/test/performance/data-structures/binary-tree/avl-tree.test.mjs +0 -71
  260. 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');
@@ -1540,13 +1539,13 @@ describe('BST iterative methods not map mode test', () => {
1540
1539
  describe('BST constructor and comparator edge cases', () => {
1541
1540
  it('should support specifyComparable and isReverse', () => {
1542
1541
  const bst = new BST<number>([], {
1543
- specifyComparable: (k) => -k,
1542
+ specifyComparable: k => -k,
1544
1543
  isReverse: true
1545
1544
  });
1546
1545
  bst.add(1);
1547
1546
  bst.add(2);
1548
1547
  expect(bst.isReverse).toBe(true);
1549
- expect(bst["_specifyComparable"]).toBeDefined();
1548
+ expect(bst['_specifyComparable']).toBeDefined();
1550
1549
  expect([...bst.keys()]).toEqual([2, 1]);
1551
1550
  });
1552
1551
 
@@ -1563,7 +1562,11 @@ describe('BST addMany edge cases', () => {
1563
1562
  const values = ['a', 'b', 'c'];
1564
1563
  const result = bst.addMany(keys, values);
1565
1564
  expect(result).toEqual([true, true, true]);
1566
- expect([...bst]).toEqual([[1, 'a'], [2, 'b'], [3, 'c']]);
1565
+ expect([...bst]).toEqual([
1566
+ [1, 'a'],
1567
+ [2, 'b'],
1568
+ [3, 'c']
1569
+ ]);
1567
1570
  });
1568
1571
 
1569
1572
  it('should addMany with isBalanceAdd=false', () => {
@@ -1608,7 +1611,7 @@ describe('BST _keyValueNodeOrEntryToNodeAndValue edge', () => {
1608
1611
  it('should return [undefined, undefined] for null', () => {
1609
1612
  const bst = new BST<number>();
1610
1613
  // @ts-ignore
1611
- const result = bst["_keyValueNodeOrEntryToNodeAndValue"](null);
1614
+ const result = bst['_keyValueNodeOrEntryToNodeAndValue'](null);
1612
1615
  expect(result).toEqual([undefined, undefined]);
1613
1616
  });
1614
1617
  });
@@ -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 };