data-structure-typed 1.51.9 → 1.52.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 (186) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +13 -13
  3. package/benchmark/report.html +37 -1
  4. package/benchmark/report.json +385 -13
  5. package/dist/cjs/data-structures/base/index.d.ts +2 -1
  6. package/dist/cjs/data-structures/base/index.js +2 -1
  7. package/dist/cjs/data-structures/base/index.js.map +1 -1
  8. package/dist/cjs/data-structures/base/iterable-element-base.d.ts +171 -0
  9. package/dist/cjs/data-structures/base/iterable-element-base.js +226 -0
  10. package/dist/cjs/data-structures/base/iterable-element-base.js.map +1 -0
  11. package/dist/cjs/data-structures/base/{iterable-base.d.ts → iterable-entry-base.d.ts} +4 -147
  12. package/dist/cjs/data-structures/base/{iterable-base.js → iterable-entry-base.js} +13 -190
  13. package/dist/cjs/data-structures/base/iterable-entry-base.js.map +1 -0
  14. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +3 -3
  15. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
  16. package/dist/cjs/data-structures/binary-tree/avl-tree.d.ts +3 -3
  17. package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
  18. package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +4 -4
  19. package/dist/cjs/data-structures/binary-tree/binary-tree.js +5 -3
  20. package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
  21. package/dist/cjs/data-structures/binary-tree/bst.d.ts +3 -11
  22. package/dist/cjs/data-structures/binary-tree/bst.js +2 -10
  23. package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
  24. package/dist/cjs/data-structures/binary-tree/rb-tree.d.ts +3 -3
  25. package/dist/cjs/data-structures/binary-tree/rb-tree.js.map +1 -1
  26. package/dist/cjs/data-structures/binary-tree/tree-multi-map.d.ts +3 -3
  27. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js.map +1 -1
  28. package/dist/cjs/data-structures/hash/hash-map.d.ts +2 -2
  29. package/dist/cjs/data-structures/hash/hash-map.js.map +1 -1
  30. package/dist/cjs/data-structures/heap/heap.d.ts +43 -114
  31. package/dist/cjs/data-structures/heap/heap.js +59 -127
  32. package/dist/cjs/data-structures/heap/heap.js.map +1 -1
  33. package/dist/cjs/data-structures/heap/max-heap.d.ts +50 -4
  34. package/dist/cjs/data-structures/heap/max-heap.js +76 -10
  35. package/dist/cjs/data-structures/heap/max-heap.js.map +1 -1
  36. package/dist/cjs/data-structures/heap/min-heap.d.ts +51 -5
  37. package/dist/cjs/data-structures/heap/min-heap.js +68 -11
  38. package/dist/cjs/data-structures/heap/min-heap.js.map +1 -1
  39. package/dist/cjs/data-structures/linked-list/doubly-linked-list.d.ts +22 -28
  40. package/dist/cjs/data-structures/linked-list/doubly-linked-list.js +26 -28
  41. package/dist/cjs/data-structures/linked-list/doubly-linked-list.js.map +1 -1
  42. package/dist/cjs/data-structures/linked-list/singly-linked-list.d.ts +22 -25
  43. package/dist/cjs/data-structures/linked-list/singly-linked-list.js +29 -26
  44. package/dist/cjs/data-structures/linked-list/singly-linked-list.js.map +1 -1
  45. package/dist/cjs/data-structures/priority-queue/max-priority-queue.d.ts +50 -4
  46. package/dist/cjs/data-structures/priority-queue/max-priority-queue.js +79 -10
  47. package/dist/cjs/data-structures/priority-queue/max-priority-queue.js.map +1 -1
  48. package/dist/cjs/data-structures/priority-queue/min-priority-queue.d.ts +51 -5
  49. package/dist/cjs/data-structures/priority-queue/min-priority-queue.js +71 -11
  50. package/dist/cjs/data-structures/priority-queue/min-priority-queue.js.map +1 -1
  51. package/dist/cjs/data-structures/priority-queue/priority-queue.d.ts +50 -4
  52. package/dist/cjs/data-structures/priority-queue/priority-queue.js +70 -1
  53. package/dist/cjs/data-structures/priority-queue/priority-queue.js.map +1 -1
  54. package/dist/cjs/data-structures/queue/deque.d.ts +20 -18
  55. package/dist/cjs/data-structures/queue/deque.js +27 -20
  56. package/dist/cjs/data-structures/queue/deque.js.map +1 -1
  57. package/dist/cjs/data-structures/queue/queue.d.ts +8 -28
  58. package/dist/cjs/data-structures/queue/queue.js +15 -31
  59. package/dist/cjs/data-structures/queue/queue.js.map +1 -1
  60. package/dist/cjs/data-structures/stack/stack.d.ts +17 -22
  61. package/dist/cjs/data-structures/stack/stack.js +25 -24
  62. package/dist/cjs/data-structures/stack/stack.js.map +1 -1
  63. package/dist/cjs/data-structures/trie/trie.d.ts +18 -13
  64. package/dist/cjs/data-structures/trie/trie.js +26 -15
  65. package/dist/cjs/data-structures/trie/trie.js.map +1 -1
  66. package/dist/cjs/interfaces/binary-tree.d.ts +2 -2
  67. package/dist/cjs/types/data-structures/base/base.d.ts +5 -2
  68. package/dist/cjs/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +2 -3
  69. package/dist/cjs/types/data-structures/binary-tree/avl-tree.d.ts +2 -3
  70. package/dist/cjs/types/data-structures/binary-tree/binary-tree.d.ts +2 -3
  71. package/dist/cjs/types/data-structures/binary-tree/bst.d.ts +2 -3
  72. package/dist/cjs/types/data-structures/binary-tree/rb-tree.d.ts +2 -3
  73. package/dist/cjs/types/data-structures/binary-tree/tree-multi-map.d.ts +2 -3
  74. package/dist/cjs/types/data-structures/heap/heap.d.ts +3 -2
  75. package/dist/cjs/types/data-structures/linked-list/doubly-linked-list.d.ts +2 -1
  76. package/dist/cjs/types/data-structures/linked-list/singly-linked-list.d.ts +2 -1
  77. package/dist/cjs/types/data-structures/priority-queue/priority-queue.d.ts +1 -1
  78. package/dist/cjs/types/data-structures/queue/deque.d.ts +3 -2
  79. package/dist/cjs/types/data-structures/queue/queue.d.ts +2 -1
  80. package/dist/cjs/types/data-structures/stack/stack.d.ts +2 -1
  81. package/dist/cjs/types/data-structures/trie/trie.d.ts +3 -2
  82. package/dist/mjs/data-structures/base/index.d.ts +2 -1
  83. package/dist/mjs/data-structures/base/index.js +2 -1
  84. package/dist/mjs/data-structures/base/iterable-element-base.d.ts +171 -0
  85. package/dist/mjs/data-structures/base/iterable-element-base.js +222 -0
  86. package/dist/mjs/data-structures/base/{iterable-base.d.ts → iterable-entry-base.d.ts} +4 -147
  87. package/dist/mjs/data-structures/base/{iterable-base.js → iterable-entry-base.js} +10 -186
  88. package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +3 -3
  89. package/dist/mjs/data-structures/binary-tree/avl-tree.d.ts +3 -3
  90. package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +4 -4
  91. package/dist/mjs/data-structures/binary-tree/binary-tree.js +5 -3
  92. package/dist/mjs/data-structures/binary-tree/bst.d.ts +3 -11
  93. package/dist/mjs/data-structures/binary-tree/bst.js +2 -10
  94. package/dist/mjs/data-structures/binary-tree/rb-tree.d.ts +3 -3
  95. package/dist/mjs/data-structures/binary-tree/tree-multi-map.d.ts +3 -3
  96. package/dist/mjs/data-structures/hash/hash-map.d.ts +2 -2
  97. package/dist/mjs/data-structures/heap/heap.d.ts +43 -114
  98. package/dist/mjs/data-structures/heap/heap.js +60 -128
  99. package/dist/mjs/data-structures/heap/max-heap.d.ts +50 -4
  100. package/dist/mjs/data-structures/heap/max-heap.js +79 -10
  101. package/dist/mjs/data-structures/heap/min-heap.d.ts +51 -5
  102. package/dist/mjs/data-structures/heap/min-heap.js +68 -11
  103. package/dist/mjs/data-structures/linked-list/doubly-linked-list.d.ts +22 -28
  104. package/dist/mjs/data-structures/linked-list/doubly-linked-list.js +26 -28
  105. package/dist/mjs/data-structures/linked-list/singly-linked-list.d.ts +22 -25
  106. package/dist/mjs/data-structures/linked-list/singly-linked-list.js +29 -26
  107. package/dist/mjs/data-structures/priority-queue/max-priority-queue.d.ts +50 -4
  108. package/dist/mjs/data-structures/priority-queue/max-priority-queue.js +82 -10
  109. package/dist/mjs/data-structures/priority-queue/min-priority-queue.d.ts +51 -5
  110. package/dist/mjs/data-structures/priority-queue/min-priority-queue.js +71 -11
  111. package/dist/mjs/data-structures/priority-queue/priority-queue.d.ts +50 -4
  112. package/dist/mjs/data-structures/priority-queue/priority-queue.js +70 -1
  113. package/dist/mjs/data-structures/queue/deque.d.ts +20 -18
  114. package/dist/mjs/data-structures/queue/deque.js +27 -20
  115. package/dist/mjs/data-structures/queue/queue.d.ts +8 -28
  116. package/dist/mjs/data-structures/queue/queue.js +15 -31
  117. package/dist/mjs/data-structures/stack/stack.d.ts +17 -22
  118. package/dist/mjs/data-structures/stack/stack.js +25 -24
  119. package/dist/mjs/data-structures/trie/trie.d.ts +18 -13
  120. package/dist/mjs/data-structures/trie/trie.js +26 -15
  121. package/dist/mjs/interfaces/binary-tree.d.ts +2 -2
  122. package/dist/mjs/types/data-structures/base/base.d.ts +5 -2
  123. package/dist/mjs/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +2 -3
  124. package/dist/mjs/types/data-structures/binary-tree/avl-tree.d.ts +2 -3
  125. package/dist/mjs/types/data-structures/binary-tree/binary-tree.d.ts +2 -3
  126. package/dist/mjs/types/data-structures/binary-tree/bst.d.ts +2 -3
  127. package/dist/mjs/types/data-structures/binary-tree/rb-tree.d.ts +2 -3
  128. package/dist/mjs/types/data-structures/binary-tree/tree-multi-map.d.ts +2 -3
  129. package/dist/mjs/types/data-structures/heap/heap.d.ts +3 -2
  130. package/dist/mjs/types/data-structures/linked-list/doubly-linked-list.d.ts +2 -1
  131. package/dist/mjs/types/data-structures/linked-list/singly-linked-list.d.ts +2 -1
  132. package/dist/mjs/types/data-structures/priority-queue/priority-queue.d.ts +1 -1
  133. package/dist/mjs/types/data-structures/queue/deque.d.ts +3 -2
  134. package/dist/mjs/types/data-structures/queue/queue.d.ts +2 -1
  135. package/dist/mjs/types/data-structures/stack/stack.d.ts +2 -1
  136. package/dist/mjs/types/data-structures/trie/trie.d.ts +3 -2
  137. package/dist/umd/data-structure-typed.js +628 -319
  138. package/dist/umd/data-structure-typed.min.js +2 -2
  139. package/dist/umd/data-structure-typed.min.js.map +1 -1
  140. package/package.json +6 -6
  141. package/src/data-structures/base/index.ts +2 -1
  142. package/src/data-structures/base/iterable-element-base.ts +250 -0
  143. package/src/data-structures/base/{iterable-base.ts → iterable-entry-base.ts} +22 -213
  144. package/src/data-structures/binary-tree/avl-tree-multi-map.ts +2 -3
  145. package/src/data-structures/binary-tree/avl-tree.ts +2 -3
  146. package/src/data-structures/binary-tree/binary-tree.ts +6 -6
  147. package/src/data-structures/binary-tree/bst.ts +8 -19
  148. package/src/data-structures/binary-tree/rb-tree.ts +2 -3
  149. package/src/data-structures/binary-tree/tree-multi-map.ts +2 -3
  150. package/src/data-structures/hash/hash-map.ts +4 -4
  151. package/src/data-structures/heap/heap.ts +71 -152
  152. package/src/data-structures/heap/max-heap.ts +88 -13
  153. package/src/data-structures/heap/min-heap.ts +78 -15
  154. package/src/data-structures/linked-list/doubly-linked-list.ts +32 -32
  155. package/src/data-structures/linked-list/singly-linked-list.ts +37 -29
  156. package/src/data-structures/priority-queue/max-priority-queue.ts +94 -13
  157. package/src/data-structures/priority-queue/min-priority-queue.ts +84 -15
  158. package/src/data-structures/priority-queue/priority-queue.ts +81 -4
  159. package/src/data-structures/queue/deque.ts +35 -24
  160. package/src/data-structures/queue/queue.ts +23 -36
  161. package/src/data-structures/stack/stack.ts +31 -26
  162. package/src/data-structures/trie/trie.ts +33 -18
  163. package/src/interfaces/binary-tree.ts +1 -2
  164. package/src/types/data-structures/base/base.ts +14 -6
  165. package/src/types/data-structures/binary-tree/avl-tree-multi-map.ts +2 -3
  166. package/src/types/data-structures/binary-tree/avl-tree.ts +2 -3
  167. package/src/types/data-structures/binary-tree/binary-tree.ts +3 -4
  168. package/src/types/data-structures/binary-tree/bst.ts +2 -3
  169. package/src/types/data-structures/binary-tree/rb-tree.ts +2 -3
  170. package/src/types/data-structures/binary-tree/tree-multi-map.ts +2 -3
  171. package/src/types/data-structures/heap/heap.ts +4 -1
  172. package/src/types/data-structures/linked-list/doubly-linked-list.ts +3 -1
  173. package/src/types/data-structures/linked-list/singly-linked-list.ts +3 -1
  174. package/src/types/data-structures/priority-queue/priority-queue.ts +1 -1
  175. package/src/types/data-structures/queue/deque.ts +3 -1
  176. package/src/types/data-structures/queue/queue.ts +3 -1
  177. package/src/types/data-structures/stack/stack.ts +3 -1
  178. package/src/types/data-structures/trie/trie.ts +3 -1
  179. package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +1 -1
  180. package/test/unit/data-structures/heap/heap.test.ts +80 -0
  181. package/test/unit/data-structures/heap/max-heap.test.ts +44 -1
  182. package/test/unit/data-structures/heap/min-heap.test.ts +18 -1
  183. package/test/unit/data-structures/priority-queue/max-priority-queue.test.ts +42 -0
  184. package/test/unit/data-structures/queue/deque.test.ts +30 -0
  185. package/test/unit/data-structures/queue/queue.test.ts +56 -0
  186. package/dist/cjs/data-structures/base/iterable-base.js.map +0 -1
@@ -1,7 +1,7 @@
1
1
  import { IterableElementBase, IterableEntryBase } from '../../../data-structures';
2
2
 
3
3
  export type EntryCallback<K, V, R> = (value: V, key: K, index: number, container: IterableEntryBase<K, V>) => R;
4
- export type ElementCallback<V, R> = (element: V, index: number, container: IterableElementBase<V>) => R;
4
+ export type ElementCallback<E, R, RT, C> = (element: E, index: number, container: IterableElementBase<E, R, C>) => RT;
5
5
  export type ReduceEntryCallback<K, V, R> = (
6
6
  accumulator: R,
7
7
  value: V,
@@ -9,9 +9,17 @@ export type ReduceEntryCallback<K, V, R> = (
9
9
  index: number,
10
10
  container: IterableEntryBase<K, V>
11
11
  ) => R;
12
- export type ReduceElementCallback<V, R> = (
13
- accumulator: R,
14
- element: V,
12
+ export type ReduceElementCallback<E, R, RT, C> = (
13
+ accumulator: RT,
14
+ element: E,
15
15
  index: number,
16
- container: IterableElementBase<V>
17
- ) => R;
16
+ container: IterableElementBase<E, R, C>
17
+ ) => RT;
18
+
19
+ // export type IterableEntryBaseOptions<K, V, R> = {
20
+ // toEntryFn?: (rawElement: R) => BTNEntry<K, V>;
21
+ // };
22
+
23
+ export type IterableElementBaseOptions<E, R> = {
24
+ toElementFn?: (rawElement: R) => E;
25
+ };
@@ -1,9 +1,8 @@
1
1
  import { AVLTreeMultiMap, AVLTreeMultiMapNode } from '../../../data-structures';
2
2
  import type { AVLTreeOptions } from './avl-tree';
3
- import { Comparable } from "../../utils";
4
3
 
5
- export type AVLTreeMultiMapNodeNested<K extends Comparable, V> = AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
4
+ export type AVLTreeMultiMapNodeNested<K, V> = AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
6
5
 
7
- export type AVLTreeMultiMapNested<K extends Comparable, V, R, NODE extends AVLTreeMultiMapNode<K, V, NODE>> = AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
6
+ export type AVLTreeMultiMapNested<K, V, R, NODE extends AVLTreeMultiMapNode<K, V, NODE>> = AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
8
7
 
9
8
  export type AVLTreeMultiMapOptions<K, V, R> = AVLTreeOptions<K, V, R> & {}
@@ -1,9 +1,8 @@
1
1
  import { AVLTree, AVLTreeNode } from '../../../data-structures';
2
2
  import { BSTOptions } from './bst';
3
- import { Comparable } from "../../utils";
4
3
 
5
- export type AVLTreeNodeNested<K extends Comparable, V> = AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
4
+ export type AVLTreeNodeNested<K, V> = AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
6
5
 
7
- export type AVLTreeNested<K extends Comparable, V, R, NODE extends AVLTreeNode<K, V, NODE>> = AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
6
+ export type AVLTreeNested<K, V, R, NODE extends AVLTreeNode<K, V, NODE>> = AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
8
7
 
9
8
  export type AVLTreeOptions<K, V, R> = BSTOptions<K, V, R> & {};
@@ -1,12 +1,11 @@
1
1
  import { BinaryTree, BinaryTreeNode } from '../../../data-structures';
2
2
  import { BTNEntry, IterationType } from '../../common';
3
- import { Comparable } from '../../utils';
4
3
 
5
- export type BinaryTreeNodeNested<K extends Comparable, V> = BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
4
+ export type BinaryTreeNodeNested<K, V> = BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
6
5
 
7
- export type BinaryTreeNested<K extends Comparable, V, R, NODE extends BinaryTreeNode<K, V, NODE>> = BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
6
+ export type BinaryTreeNested<K, V, R, NODE extends BinaryTreeNode<K, V, NODE>> = BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
8
7
 
9
8
  export type BinaryTreeOptions<K, V, R> = {
10
- iterationType?: IterationType
9
+ iterationType?: IterationType;
11
10
  toEntryFn?: (rawElement: R) => BTNEntry<K, V>;
12
11
  }
@@ -1,11 +1,10 @@
1
1
  import { BST, BSTNode } from '../../../data-structures';
2
2
  import type { BinaryTreeOptions } from './binary-tree';
3
3
  import { Comparator } from '../../common';
4
- import { Comparable } from '../../utils';
5
4
 
6
- export type BSTNodeNested<K extends Comparable, V> = BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
5
+ export type BSTNodeNested<K, V> = BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
7
6
 
8
- export type BSTNested<K extends Comparable, V, R, NODE extends BSTNode<K, V, NODE>> = BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
7
+ export type BSTNested<K, V, R, NODE extends BSTNode<K, V, NODE>> = BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
9
8
 
10
9
  export type BSTOptions<K, V, R> = BinaryTreeOptions<K, V, R> & {
11
10
  comparator?: Comparator<K>
@@ -1,11 +1,10 @@
1
1
  import { RedBlackTree, RedBlackTreeNode } from '../../../data-structures';
2
2
  import type { BSTOptions } from "./bst";
3
- import { Comparable } from "../../utils";
4
3
 
5
4
  export type RBTNColor = 'RED' | 'BLACK';
6
5
 
7
- export type RedBlackTreeNodeNested<K extends Comparable, V> = RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
6
+ export type RedBlackTreeNodeNested<K, V> = RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
8
7
 
9
- export type RedBlackTreeNested<K extends Comparable, V, R, NODE extends RedBlackTreeNode<K, V, NODE>> = RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
8
+ export type RedBlackTreeNested<K, V, R, NODE extends RedBlackTreeNode<K, V, NODE>> = RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
10
9
 
11
10
  export type RBTreeOptions<K, V, R> = BSTOptions<K, V, R> & {};
@@ -1,9 +1,8 @@
1
1
  import { TreeMultiMap, TreeMultiMapNode } from '../../../data-structures';
2
2
  import type { RBTreeOptions } from './rb-tree';
3
- import { Comparable } from '../../utils';
4
3
 
5
- export type TreeMultiMapNodeNested<K extends Comparable, V> = TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
4
+ export type TreeMultiMapNodeNested<K, V> = TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
6
5
 
7
- export type TreeMultiMapNested<K extends Comparable, V, R, NODE extends TreeMultiMapNode<K, V, NODE>> = TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
6
+ export type TreeMultiMapNested<K, V, R, NODE extends TreeMultiMapNode<K, V, NODE>> = TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
8
7
 
9
8
  export type TreeMultiMapOptions<K, V, R> = RBTreeOptions<K, V, R> & {}
@@ -1,3 +1,6 @@
1
1
  import { Comparator } from '../../common';
2
+ import { IterableElementBaseOptions } from '../base';
2
3
 
3
- export type HeapOptions<T> = { comparator?: Comparator<T> };
4
+ export type HeapOptions<E, R> = IterableElementBaseOptions<E, R> & {
5
+ comparator?: Comparator<E>;
6
+ };
@@ -1 +1,3 @@
1
- export {};
1
+ import { IterableElementBaseOptions } from '../base';
2
+
3
+ export type DoublyLinkedListOptions<E, R> = IterableElementBaseOptions<E, R> & {};
@@ -1 +1,3 @@
1
- export {};
1
+ import { IterableElementBaseOptions } from '../base';
2
+
3
+ export type SinglyLinkedListOptions<E, R> = IterableElementBaseOptions<E, R> & {};
@@ -1,3 +1,3 @@
1
1
  import { HeapOptions } from '../heap';
2
2
 
3
- export type PriorityQueueOptions<T> = HeapOptions<T> & {};
3
+ export type PriorityQueueOptions<E, R> = HeapOptions<E, R> & {};
@@ -1 +1,3 @@
1
- export type DequeOptions = { bucketSize?: number };
1
+ import { IterableElementBaseOptions } from '../base';
2
+
3
+ export type DequeOptions<E, R> = { bucketSize?: number } & IterableElementBaseOptions<E, R>;
@@ -1 +1,3 @@
1
- export {};
1
+ import { IterableElementBaseOptions } from '../base';
2
+
3
+ export type QueueOptions<E, R> = IterableElementBaseOptions<E, R> & {};
@@ -1 +1,3 @@
1
- export {};
1
+ import { IterableElementBaseOptions } from '../base';
2
+
3
+ export type StackOptions<E, R> = IterableElementBaseOptions<E, R> & {};
@@ -1 +1,3 @@
1
- export type TrieOptions = { caseSensitive?: boolean };
1
+ import { IterableElementBaseOptions } from '../base';
2
+
3
+ export type TrieOptions<R> = { caseSensitive?: boolean } & IterableElementBaseOptions<string, R>;
@@ -734,7 +734,7 @@ describe('AVLTree toEntryFn', () => {
734
734
  { obj: { id: 5 } }
735
735
  ])
736
736
  ).toThrowError(
737
- 'When comparing two object types, it is necessary to customize a [comparator] function of options parameter during the instantiation of the data structure.'
737
+ `When comparing object types, a custom comparator must be defined in the constructor's options parameter.`
738
738
  );
739
739
  });
740
740
 
@@ -87,6 +87,86 @@ describe('Heap Operation Test', () => {
87
87
  maxI++;
88
88
  }
89
89
  });
90
+
91
+ it('should object heap map & filter', function () {
92
+ const minHeap = new MinHeap<{ a: string; key: number }>(
93
+ [
94
+ { key: 1, a: 'a1' },
95
+ { key: 6, a: 'a6' },
96
+ { key: 5, a: 'a5' },
97
+ { key: 3, a: 'a3' },
98
+ { key: 2, a: 'a2' },
99
+ { key: 4, a: 'a4' },
100
+ { key: 0, a: 'a0' }
101
+ ],
102
+ { comparator: (a, b) => a.key - b.key }
103
+ );
104
+
105
+ const mappedMinHeap = minHeap.map(
106
+ item => item.key,
107
+ (a, b) => a - b
108
+ );
109
+ expect(mappedMinHeap.peek()).toBe(0);
110
+ expect(mappedMinHeap.sort()).toEqual([0, 1, 2, 3, 4, 5, 6]);
111
+
112
+ const mappedToElementFnMinHeap = minHeap.map<string, { id: string }>(
113
+ item => item.key.toString(),
114
+ (a, b) => Number(a) - Number(b),
115
+ rawElement => rawElement.id
116
+ );
117
+ expect(mappedToElementFnMinHeap.peek()).toBe('0');
118
+ expect(mappedToElementFnMinHeap.sort()).toEqual(['0', '1', '2', '3', '4', '5', '6']);
119
+
120
+ const filteredHeap = minHeap.filter(item => item.key > 3);
121
+ expect(filteredHeap.peek()).toEqual({ a: 'a4', key: 4 });
122
+ expect(filteredHeap.sort()).toEqual([
123
+ { a: 'a4', key: 4 },
124
+ { a: 'a5', key: 5 },
125
+ { a: 'a6', key: 6 }
126
+ ]);
127
+ });
128
+
129
+ it('should object heap', () => {
130
+ const heap = new Heap<{ rawItem: { id: number } }>(
131
+ [
132
+ { rawItem: { id: 4 } },
133
+ { rawItem: { id: 8 } },
134
+ { rawItem: { id: 6 } },
135
+ { rawItem: { id: 7 } },
136
+ { rawItem: { id: 1 } },
137
+ { rawItem: { id: 3 } },
138
+ { rawItem: { id: 5 } }
139
+ ],
140
+ { comparator: (a, b) => a.rawItem.id - b.rawItem.id }
141
+ );
142
+
143
+ expect([...heap.sort()]).toEqual([
144
+ { rawItem: { id: 1 } },
145
+ { rawItem: { id: 3 } },
146
+ { rawItem: { id: 4 } },
147
+ { rawItem: { id: 5 } },
148
+ { rawItem: { id: 6 } },
149
+ { rawItem: { id: 7 } },
150
+ { rawItem: { id: 8 } }
151
+ ]);
152
+ });
153
+
154
+ it('should toElementFn', () => {
155
+ const heap = new Heap<number, { rawItem: { id: number } }>(
156
+ [
157
+ { rawItem: { id: 4 } },
158
+ { rawItem: { id: 8 } },
159
+ { rawItem: { id: 6 } },
160
+ { rawItem: { id: 7 } },
161
+ { rawItem: { id: 1 } },
162
+ { rawItem: { id: 3 } },
163
+ { rawItem: { id: 5 } }
164
+ ],
165
+ { toElementFn: rawElement => rawElement.rawItem.id }
166
+ );
167
+
168
+ expect([...heap.sort()]).toEqual([1, 3, 4, 5, 6, 7, 8]);
169
+ });
90
170
  });
91
171
 
92
172
  describe('FibonacciHeap', () => {
@@ -5,7 +5,7 @@ describe('MaxHeap', () => {
5
5
  let maxHeap: MaxHeap<number>;
6
6
 
7
7
  beforeEach(() => {
8
- maxHeap = new MaxHeap([], { comparator: numberComparator });
8
+ maxHeap = new MaxHeap<number>([], { comparator: numberComparator });
9
9
  });
10
10
 
11
11
  it('add and poll elements in descending order', () => {
@@ -49,4 +49,47 @@ describe('MaxHeap', () => {
49
49
  maxHeap.poll();
50
50
  expect(maxHeap.isEmpty()).toBe(true);
51
51
  });
52
+
53
+ it('should object heap map & filter', function () {
54
+ const maxHeap = new MaxHeap<{ a: string; key: number }>(
55
+ [
56
+ { key: 1, a: 'a1' },
57
+ { key: 6, a: 'a6' },
58
+ { key: 5, a: 'a5' },
59
+ { key: 3, a: 'a3' },
60
+ { key: 2, a: 'a2' },
61
+ { key: 4, a: 'a4' },
62
+ { key: 0, a: 'a0' }
63
+ ],
64
+ { comparator: (a, b) => b.key - a.key }
65
+ );
66
+
67
+ const mappedMaxHeap = maxHeap.map(
68
+ item => item.key,
69
+ (a, b) => b - a
70
+ );
71
+ expect(mappedMaxHeap.peek()).toBe(6);
72
+ expect(mappedMaxHeap.sort()).toEqual([6, 5, 4, 3, 2, 1, 0]);
73
+
74
+ const mappedToElementFnMaxHeap = maxHeap.map<
75
+ string,
76
+ {
77
+ id: string;
78
+ }
79
+ >(
80
+ item => item.key.toString(),
81
+ (a, b) => Number(b) - Number(a),
82
+ rawElement => rawElement.id
83
+ );
84
+ expect(mappedToElementFnMaxHeap.peek()).toBe('6');
85
+ expect(mappedToElementFnMaxHeap.sort()).toEqual(['6', '5', '4', '3', '2', '1', '0']);
86
+
87
+ const filteredHeap = maxHeap.filter(item => item.key > 3);
88
+ expect(filteredHeap.peek()).toEqual({ a: 'a6', key: 6 });
89
+ expect(filteredHeap.sort()).toEqual([
90
+ { a: 'a6', key: 6 },
91
+ { a: 'a5', key: 5 },
92
+ { a: 'a4', key: 4 }
93
+ ]);
94
+ });
52
95
  });
@@ -5,7 +5,7 @@ describe('MinHeap', () => {
5
5
  let minHeap: MinHeap<number>;
6
6
 
7
7
  beforeEach(() => {
8
- minHeap = new MinHeap([], { comparator: numberComparator });
8
+ minHeap = new MinHeap<number>([], { comparator: numberComparator });
9
9
  });
10
10
 
11
11
  it('add and poll elements in ascending order', () => {
@@ -40,6 +40,23 @@ describe('MinHeap', () => {
40
40
  expect(sortedArray).toEqual([1, 2, 3, 4]);
41
41
  });
42
42
 
43
+ it('should clone', function () {
44
+ const minHeap = new MinHeap<string>();
45
+ minHeap.add('1');
46
+ minHeap.add('6');
47
+ minHeap.add('2');
48
+ minHeap.add('0');
49
+ minHeap.add('5');
50
+ minHeap.add('9');
51
+ minHeap.delete('2');
52
+ expect([...minHeap]).toEqual(['0', '1', '9', '6', '5']);
53
+ const cloned = minHeap.clone();
54
+ expect([...cloned]).toEqual(['0', '1', '9', '6', '5']);
55
+ minHeap.delete('5');
56
+ expect([...minHeap]).toEqual(['0', '1', '9', '6']);
57
+ expect([...cloned]).toEqual(['0', '1', '9', '6', '5']);
58
+ });
59
+
43
60
  it('check if the heap is empty', () => {
44
61
  expect(minHeap.isEmpty()).toBe(true);
45
62
 
@@ -71,4 +71,46 @@ describe('MaxPriorityQueue Operation Test', () => {
71
71
  expect(maxPQ.poll()?.keyA).toBe(3);
72
72
  expect(maxPQ.poll()?.keyA).toBe(1);
73
73
  });
74
+
75
+ it('should object priority queue', () => {
76
+ const maxPQ = new MaxPriorityQueue<{ rawItem: { id: number } }>(
77
+ [
78
+ { rawItem: { id: 4 } },
79
+ { rawItem: { id: 8 } },
80
+ { rawItem: { id: 6 } },
81
+ { rawItem: { id: 7 } },
82
+ { rawItem: { id: 1 } },
83
+ { rawItem: { id: 3 } },
84
+ { rawItem: { id: 5 } }
85
+ ],
86
+ { comparator: (a, b) => b.rawItem.id - a.rawItem.id }
87
+ );
88
+
89
+ expect([...maxPQ.sort()]).toEqual([
90
+ { rawItem: { id: 8 } },
91
+ { rawItem: { id: 7 } },
92
+ { rawItem: { id: 6 } },
93
+ { rawItem: { id: 5 } },
94
+ { rawItem: { id: 4 } },
95
+ { rawItem: { id: 3 } },
96
+ { rawItem: { id: 1 } }
97
+ ]);
98
+ });
99
+
100
+ it('should toElementFn', () => {
101
+ const maxPQ = new MaxPriorityQueue<number, { rawItem: { id: number } }>(
102
+ [
103
+ { rawItem: { id: 4 } },
104
+ { rawItem: { id: 8 } },
105
+ { rawItem: { id: 6 } },
106
+ { rawItem: { id: 7 } },
107
+ { rawItem: { id: 1 } },
108
+ { rawItem: { id: 3 } },
109
+ { rawItem: { id: 5 } }
110
+ ],
111
+ { toElementFn: rawElement => rawElement.rawItem.id }
112
+ );
113
+
114
+ expect([...maxPQ.sort()]).toEqual([8, 7, 6, 5, 4, 3, 1]);
115
+ });
74
116
  });
@@ -50,6 +50,36 @@ describe('Deque - Basic Operations', () => {
50
50
  expect(deque.at(0)).toBe(3);
51
51
  });
52
52
 
53
+ test('should at after shifting', () => {
54
+ deque.clear();
55
+ for (let i = 0; i < 100; i++) {
56
+ deque.push(i);
57
+ }
58
+
59
+ for (let i = 0; i < 10; i++) {
60
+ expect(deque.shift()).toBe(i);
61
+ }
62
+
63
+ for (let i = 0; i < 90; i++) {
64
+ expect(deque.at(i)).toBe(i + 10);
65
+ }
66
+ });
67
+
68
+ test('should at after popping', () => {
69
+ deque.clear();
70
+ for (let i = 0; i < 100; i++) {
71
+ deque.push(i);
72
+ }
73
+
74
+ for (let i = 0; i < 10; i++) {
75
+ expect(deque.pop()).toBe(99 - i);
76
+ }
77
+
78
+ for (let i = 0; i < 90; i++) {
79
+ expect(deque.at(i)).toBe(i);
80
+ }
81
+ });
82
+
53
83
  it('should clone', function () {
54
84
  const deque = new Deque<string>();
55
85
  deque.push('1');
@@ -90,6 +90,62 @@ describe('Queue', () => {
90
90
  expect(queue.isEmpty()).toBeTruthy();
91
91
  });
92
92
 
93
+ test('should at after shifting', () => {
94
+ for (let i = 0; i < 100; i++) {
95
+ queue.push(i);
96
+ }
97
+
98
+ for (let i = 0; i < 10; i++) {
99
+ expect(queue.shift()).toBe(i);
100
+ }
101
+
102
+ for (let i = 0; i < 90; i++) {
103
+ expect(queue.at(i)).toBe(i + 10);
104
+ }
105
+ });
106
+
107
+ test('should toElementFn', () => {
108
+ const queue = new Queue<string, { id: string }>([{ id: '1' }, { id: '5' }, { id: '3' }, { id: '4' }, { id: '2' }], {
109
+ toElementFn: rawElement => rawElement.id
110
+ });
111
+
112
+ expect(queue.size).toBe(5);
113
+ queue.shift();
114
+ expect(queue.size).toBe(4);
115
+ expect(queue.at(1)).toBe('3');
116
+ });
117
+
118
+ it('should object queue map & filter', function () {
119
+ const queue = new Queue<{ a: string; key: number }>([
120
+ { key: 1, a: 'a1' },
121
+ { key: 6, a: 'a6' },
122
+ { key: 5, a: 'a5' },
123
+ { key: 3, a: 'a3' },
124
+ { key: 2, a: 'a2' },
125
+ { key: 4, a: 'a4' },
126
+ { key: 0, a: 'a0' }
127
+ ]);
128
+
129
+ const mappedQueue = queue.map(item => item.key);
130
+ expect(mappedQueue.at(0)).toBe(1);
131
+ expect([...mappedQueue]).toEqual([1, 6, 5, 3, 2, 4, 0]);
132
+
133
+ const mappedToElementFnQueue = queue.map<string, { id: string }>(
134
+ item => item.key.toString(),
135
+ rawElement => rawElement.id
136
+ );
137
+ expect(mappedToElementFnQueue.at(0)).toBe('1');
138
+ expect([...mappedToElementFnQueue]).toEqual(['1', '6', '5', '3', '2', '4', '0']);
139
+
140
+ const filteredQueue = queue.filter(item => item.key > 3);
141
+ expect(filteredQueue.at(0)).toEqual({ a: 'a6', key: 6 });
142
+ expect([...filteredQueue]).toEqual([
143
+ { a: 'a6', key: 6 },
144
+ { a: 'a5', key: 5 },
145
+ { a: 'a4', key: 4 }
146
+ ]);
147
+ });
148
+
93
149
  it('should clone', function () {
94
150
  const queue = new Queue<string>();
95
151
  queue.push('1');
@@ -1 +0,0 @@
1
- {"version":3,"file":"iterable-base.js","sourceRoot":"","sources":["../../../../src/data-structures/base/iterable-base.ts"],"names":[],"mappings":"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"}