data-structure-typed 1.54.2 → 2.0.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 (213) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/LICENSE +2 -2
  3. package/README.md +14 -1
  4. package/README_zh-CN.md +1 -1
  5. package/benchmark/report.html +28 -1
  6. package/benchmark/report.json +327 -18
  7. package/dist/cjs/data-structures/base/iterable-element-base.d.ts +14 -40
  8. package/dist/cjs/data-structures/base/iterable-element-base.js +14 -11
  9. package/dist/cjs/data-structures/base/iterable-element-base.js.map +1 -1
  10. package/dist/cjs/data-structures/base/linear-base.d.ts +277 -0
  11. package/dist/cjs/data-structures/base/linear-base.js +553 -0
  12. package/dist/cjs/data-structures/base/linear-base.js.map +1 -0
  13. package/dist/cjs/data-structures/binary-tree/avl-tree-counter.d.ts +21 -20
  14. package/dist/cjs/data-structures/binary-tree/avl-tree-counter.js +8 -7
  15. package/dist/cjs/data-structures/binary-tree/avl-tree-counter.js.map +1 -1
  16. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +23 -19
  17. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js +51 -38
  18. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
  19. package/dist/cjs/data-structures/binary-tree/avl-tree.d.ts +89 -21
  20. package/dist/cjs/data-structures/binary-tree/avl-tree.js +76 -8
  21. package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
  22. package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +173 -225
  23. package/dist/cjs/data-structures/binary-tree/binary-tree.js +244 -149
  24. package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
  25. package/dist/cjs/data-structures/binary-tree/bst.d.ts +62 -56
  26. package/dist/cjs/data-structures/binary-tree/bst.js +89 -133
  27. package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
  28. package/dist/cjs/data-structures/binary-tree/red-black-tree.d.ts +19 -25
  29. package/dist/cjs/data-structures/binary-tree/red-black-tree.js +7 -13
  30. package/dist/cjs/data-structures/binary-tree/red-black-tree.js.map +1 -1
  31. package/dist/cjs/data-structures/binary-tree/tree-counter.d.ts +19 -19
  32. package/dist/cjs/data-structures/binary-tree/tree-counter.js +12 -12
  33. package/dist/cjs/data-structures/binary-tree/tree-counter.js.map +1 -1
  34. package/dist/cjs/data-structures/binary-tree/tree-multi-map.d.ts +186 -25
  35. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js +211 -41
  36. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js.map +1 -1
  37. package/dist/cjs/data-structures/graph/abstract-graph.js +2 -2
  38. package/dist/cjs/data-structures/graph/abstract-graph.js.map +1 -1
  39. package/dist/cjs/data-structures/heap/heap.d.ts +3 -11
  40. package/dist/cjs/data-structures/heap/heap.js +0 -10
  41. package/dist/cjs/data-structures/heap/heap.js.map +1 -1
  42. package/dist/cjs/data-structures/heap/max-heap.d.ts +2 -2
  43. package/dist/cjs/data-structures/heap/max-heap.js.map +1 -1
  44. package/dist/cjs/data-structures/heap/min-heap.d.ts +2 -2
  45. package/dist/cjs/data-structures/heap/min-heap.js.map +1 -1
  46. package/dist/cjs/data-structures/linked-list/doubly-linked-list.d.ts +65 -94
  47. package/dist/cjs/data-structures/linked-list/doubly-linked-list.js +131 -146
  48. package/dist/cjs/data-structures/linked-list/doubly-linked-list.js.map +1 -1
  49. package/dist/cjs/data-structures/linked-list/singly-linked-list.d.ts +79 -75
  50. package/dist/cjs/data-structures/linked-list/singly-linked-list.js +217 -169
  51. package/dist/cjs/data-structures/linked-list/singly-linked-list.js.map +1 -1
  52. package/dist/cjs/data-structures/priority-queue/max-priority-queue.d.ts +2 -2
  53. package/dist/cjs/data-structures/priority-queue/max-priority-queue.js.map +1 -1
  54. package/dist/cjs/data-structures/priority-queue/min-priority-queue.d.ts +2 -2
  55. package/dist/cjs/data-structures/priority-queue/min-priority-queue.js.map +1 -1
  56. package/dist/cjs/data-structures/priority-queue/priority-queue.d.ts +2 -2
  57. package/dist/cjs/data-structures/priority-queue/priority-queue.js.map +1 -1
  58. package/dist/cjs/data-structures/queue/deque.d.ts +130 -91
  59. package/dist/cjs/data-structures/queue/deque.js +269 -169
  60. package/dist/cjs/data-structures/queue/deque.js.map +1 -1
  61. package/dist/cjs/data-structures/queue/queue.d.ts +84 -40
  62. package/dist/cjs/data-structures/queue/queue.js +134 -50
  63. package/dist/cjs/data-structures/queue/queue.js.map +1 -1
  64. package/dist/cjs/data-structures/stack/stack.d.ts +3 -11
  65. package/dist/cjs/data-structures/stack/stack.js +0 -10
  66. package/dist/cjs/data-structures/stack/stack.js.map +1 -1
  67. package/dist/cjs/data-structures/trie/trie.d.ts +4 -3
  68. package/dist/cjs/data-structures/trie/trie.js +3 -0
  69. package/dist/cjs/data-structures/trie/trie.js.map +1 -1
  70. package/dist/cjs/types/data-structures/base/base.d.ts +9 -4
  71. package/dist/cjs/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +1 -1
  72. package/dist/cjs/types/data-structures/binary-tree/binary-tree.d.ts +1 -0
  73. package/dist/cjs/types/data-structures/binary-tree/bst.d.ts +1 -1
  74. package/dist/cjs/types/data-structures/binary-tree/tree-multi-map.d.ts +1 -1
  75. package/dist/cjs/types/data-structures/linked-list/doubly-linked-list.d.ts +2 -2
  76. package/dist/cjs/types/data-structures/linked-list/singly-linked-list.d.ts +2 -2
  77. package/dist/cjs/types/data-structures/queue/deque.d.ts +2 -3
  78. package/dist/cjs/types/data-structures/queue/queue.d.ts +2 -2
  79. package/dist/cjs/utils/utils.d.ts +2 -2
  80. package/dist/esm/data-structures/base/iterable-element-base.d.ts +14 -40
  81. package/dist/esm/data-structures/base/iterable-element-base.js +14 -11
  82. package/dist/esm/data-structures/base/iterable-element-base.js.map +1 -1
  83. package/dist/esm/data-structures/base/linear-base.d.ts +277 -0
  84. package/dist/esm/data-structures/base/linear-base.js +549 -0
  85. package/dist/esm/data-structures/base/linear-base.js.map +1 -0
  86. package/dist/esm/data-structures/binary-tree/avl-tree-counter.d.ts +21 -20
  87. package/dist/esm/data-structures/binary-tree/avl-tree-counter.js +9 -8
  88. package/dist/esm/data-structures/binary-tree/avl-tree-counter.js.map +1 -1
  89. package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.d.ts +23 -19
  90. package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.js +52 -38
  91. package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
  92. package/dist/esm/data-structures/binary-tree/avl-tree.d.ts +89 -21
  93. package/dist/esm/data-structures/binary-tree/avl-tree.js +77 -9
  94. package/dist/esm/data-structures/binary-tree/avl-tree.js.map +1 -1
  95. package/dist/esm/data-structures/binary-tree/binary-tree.d.ts +173 -225
  96. package/dist/esm/data-structures/binary-tree/binary-tree.js +248 -153
  97. package/dist/esm/data-structures/binary-tree/binary-tree.js.map +1 -1
  98. package/dist/esm/data-structures/binary-tree/bst.d.ts +62 -56
  99. package/dist/esm/data-structures/binary-tree/bst.js +90 -132
  100. package/dist/esm/data-structures/binary-tree/bst.js.map +1 -1
  101. package/dist/esm/data-structures/binary-tree/red-black-tree.d.ts +19 -25
  102. package/dist/esm/data-structures/binary-tree/red-black-tree.js +8 -14
  103. package/dist/esm/data-structures/binary-tree/red-black-tree.js.map +1 -1
  104. package/dist/esm/data-structures/binary-tree/tree-counter.d.ts +19 -19
  105. package/dist/esm/data-structures/binary-tree/tree-counter.js +13 -13
  106. package/dist/esm/data-structures/binary-tree/tree-counter.js.map +1 -1
  107. package/dist/esm/data-structures/binary-tree/tree-multi-map.d.ts +186 -25
  108. package/dist/esm/data-structures/binary-tree/tree-multi-map.js +212 -41
  109. package/dist/esm/data-structures/binary-tree/tree-multi-map.js.map +1 -1
  110. package/dist/esm/data-structures/graph/abstract-graph.js +2 -2
  111. package/dist/esm/data-structures/graph/abstract-graph.js.map +1 -1
  112. package/dist/esm/data-structures/heap/heap.d.ts +3 -11
  113. package/dist/esm/data-structures/heap/heap.js +0 -10
  114. package/dist/esm/data-structures/heap/heap.js.map +1 -1
  115. package/dist/esm/data-structures/heap/max-heap.d.ts +2 -2
  116. package/dist/esm/data-structures/heap/max-heap.js.map +1 -1
  117. package/dist/esm/data-structures/heap/min-heap.d.ts +2 -2
  118. package/dist/esm/data-structures/heap/min-heap.js.map +1 -1
  119. package/dist/esm/data-structures/linked-list/doubly-linked-list.d.ts +65 -94
  120. package/dist/esm/data-structures/linked-list/doubly-linked-list.js +132 -148
  121. package/dist/esm/data-structures/linked-list/doubly-linked-list.js.map +1 -1
  122. package/dist/esm/data-structures/linked-list/singly-linked-list.d.ts +79 -75
  123. package/dist/esm/data-structures/linked-list/singly-linked-list.js +217 -170
  124. package/dist/esm/data-structures/linked-list/singly-linked-list.js.map +1 -1
  125. package/dist/esm/data-structures/priority-queue/max-priority-queue.d.ts +2 -2
  126. package/dist/esm/data-structures/priority-queue/max-priority-queue.js.map +1 -1
  127. package/dist/esm/data-structures/priority-queue/min-priority-queue.d.ts +2 -2
  128. package/dist/esm/data-structures/priority-queue/min-priority-queue.js.map +1 -1
  129. package/dist/esm/data-structures/priority-queue/priority-queue.d.ts +2 -2
  130. package/dist/esm/data-structures/priority-queue/priority-queue.js.map +1 -1
  131. package/dist/esm/data-structures/queue/deque.d.ts +130 -91
  132. package/dist/esm/data-structures/queue/deque.js +269 -169
  133. package/dist/esm/data-structures/queue/deque.js.map +1 -1
  134. package/dist/esm/data-structures/queue/queue.d.ts +84 -40
  135. package/dist/esm/data-structures/queue/queue.js +135 -51
  136. package/dist/esm/data-structures/queue/queue.js.map +1 -1
  137. package/dist/esm/data-structures/stack/stack.d.ts +3 -11
  138. package/dist/esm/data-structures/stack/stack.js +0 -10
  139. package/dist/esm/data-structures/stack/stack.js.map +1 -1
  140. package/dist/esm/data-structures/trie/trie.d.ts +4 -3
  141. package/dist/esm/data-structures/trie/trie.js +3 -0
  142. package/dist/esm/data-structures/trie/trie.js.map +1 -1
  143. package/dist/esm/types/data-structures/base/base.d.ts +9 -4
  144. package/dist/esm/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +1 -1
  145. package/dist/esm/types/data-structures/binary-tree/binary-tree.d.ts +1 -0
  146. package/dist/esm/types/data-structures/binary-tree/bst.d.ts +1 -1
  147. package/dist/esm/types/data-structures/binary-tree/tree-multi-map.d.ts +1 -1
  148. package/dist/esm/types/data-structures/linked-list/doubly-linked-list.d.ts +2 -2
  149. package/dist/esm/types/data-structures/linked-list/singly-linked-list.d.ts +2 -2
  150. package/dist/esm/types/data-structures/queue/deque.d.ts +2 -3
  151. package/dist/esm/types/data-structures/queue/queue.d.ts +2 -2
  152. package/dist/esm/utils/utils.d.ts +2 -2
  153. package/dist/umd/data-structure-typed.js +1548 -920
  154. package/dist/umd/data-structure-typed.min.js +5 -12
  155. package/dist/umd/data-structure-typed.min.js.map +1 -1
  156. package/package.json +7 -7
  157. package/src/data-structures/base/iterable-element-base.ts +29 -20
  158. package/src/data-structures/base/linear-base.ts +649 -0
  159. package/src/data-structures/binary-tree/avl-tree-counter.ts +30 -23
  160. package/src/data-structures/binary-tree/avl-tree-multi-map.ts +74 -49
  161. package/src/data-structures/binary-tree/avl-tree.ts +99 -29
  162. package/src/data-structures/binary-tree/binary-tree.ts +474 -257
  163. package/src/data-structures/binary-tree/bst.ts +150 -152
  164. package/src/data-structures/binary-tree/red-black-tree.ts +27 -35
  165. package/src/data-structures/binary-tree/tree-counter.ts +33 -27
  166. package/src/data-structures/binary-tree/tree-multi-map.ts +235 -53
  167. package/src/data-structures/graph/abstract-graph.ts +2 -2
  168. package/src/data-structures/heap/heap.ts +3 -14
  169. package/src/data-structures/heap/max-heap.ts +2 -2
  170. package/src/data-structures/heap/min-heap.ts +2 -2
  171. package/src/data-structures/linked-list/doubly-linked-list.ts +144 -160
  172. package/src/data-structures/linked-list/singly-linked-list.ts +241 -185
  173. package/src/data-structures/priority-queue/max-priority-queue.ts +2 -5
  174. package/src/data-structures/priority-queue/min-priority-queue.ts +2 -5
  175. package/src/data-structures/priority-queue/priority-queue.ts +2 -2
  176. package/src/data-structures/queue/deque.ts +286 -183
  177. package/src/data-structures/queue/queue.ts +149 -63
  178. package/src/data-structures/stack/stack.ts +3 -18
  179. package/src/data-structures/trie/trie.ts +7 -3
  180. package/src/types/data-structures/base/base.ts +17 -8
  181. package/src/types/data-structures/binary-tree/avl-tree-multi-map.ts +1 -1
  182. package/src/types/data-structures/binary-tree/binary-tree.ts +1 -0
  183. package/src/types/data-structures/binary-tree/bst.ts +1 -1
  184. package/src/types/data-structures/binary-tree/tree-multi-map.ts +1 -1
  185. package/src/types/data-structures/linked-list/doubly-linked-list.ts +2 -2
  186. package/src/types/data-structures/linked-list/singly-linked-list.ts +2 -2
  187. package/src/types/data-structures/queue/deque.ts +2 -3
  188. package/src/types/data-structures/queue/queue.ts +2 -2
  189. package/src/utils/utils.ts +2 -2
  190. package/test/integration/all-in-one.test.ts +1 -1
  191. package/test/integration/avl-tree.test.ts +1 -1
  192. package/test/integration/bst.test.ts +2 -2
  193. package/test/integration/compile.mjs +21 -21
  194. package/test/performance/data-structures/binary-tree/avl-tree.test.mjs +71 -0
  195. package/test/performance/data-structures/binary-tree/red-black-tree.test.mjs +81 -0
  196. package/test/performance/{reportor.js → reportor.mjs} +264 -8
  197. package/test/performance/reportor.ts +1 -1
  198. package/test/unit/data-structures/binary-tree/avl-tree-counter.test.ts +7 -7
  199. package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +172 -5
  200. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +72 -4
  201. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +132 -82
  202. package/test/unit/data-structures/binary-tree/bst.test.ts +12 -12
  203. package/test/unit/data-structures/binary-tree/red-black-tree.test.ts +5 -13
  204. package/test/unit/data-structures/binary-tree/tree-counter.test.ts +4 -4
  205. package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +168 -10
  206. package/test/unit/data-structures/linked-list/doubly-linked-list.test.ts +135 -27
  207. package/test/unit/data-structures/linked-list/singly-linked-list.test.ts +111 -11
  208. package/test/unit/data-structures/queue/deque.test.ts +241 -60
  209. package/test/unit/data-structures/queue/queue.test.ts +118 -19
  210. package/test/unit/unrestricted-interconversion.test.ts +1 -1
  211. package/test/utils/json2html.ts +0 -154
  212. package/test/performance/data-structures/binary-tree/avl-tree.test.js +0 -45
  213. /package/test/performance/data-structures/binary-tree/{rb-tree.test.ts → red-black-tree.test.ts} +0 -0
@@ -11,21 +11,21 @@ describe('Queue', () => {
11
11
  });
12
12
 
13
13
  it('new Queue() should create an empty queue', () => {
14
- expect(queue.size).toBe(0);
14
+ expect(queue.length).toBe(0);
15
15
  expect(queue.isEmpty()).toBeTruthy();
16
16
  });
17
17
 
18
18
  it('push should add elements to the queue', () => {
19
19
  queue.push(1);
20
20
  queue.push(2);
21
- expect(queue.size).toBe(2);
21
+ expect(queue.length).toBe(2);
22
22
  });
23
23
 
24
24
  it('shift should remove the first element', () => {
25
25
  queue.push(1);
26
26
  queue.push(2);
27
27
  expect(queue.shift()).toBe(1);
28
- expect(queue.size).toBe(1);
28
+ expect(queue.length).toBe(1);
29
29
  });
30
30
 
31
31
  it('shift should return undefined if queue is empty', () => {
@@ -36,17 +36,17 @@ describe('Queue', () => {
36
36
  queue.push(1);
37
37
  queue.push(2);
38
38
  expect(queue.first).toBe(1);
39
- expect(queue.size).toBe(2);
39
+ expect(queue.length).toBe(2);
40
40
  });
41
41
 
42
42
  it('first should return undefined if queue is empty', () => {
43
43
  expect(queue.first).toBeUndefined();
44
44
  });
45
45
 
46
- it('size should return the number of elements', () => {
46
+ it('length should return the number of elements', () => {
47
47
  queue.push(1);
48
48
  queue.push(2);
49
- expect(queue.size).toBe(2);
49
+ expect(queue.length).toBe(2);
50
50
  });
51
51
 
52
52
  it('isEmpty should return true if the queue is empty', () => {
@@ -68,7 +68,7 @@ describe('Queue', () => {
68
68
  queue.push(1);
69
69
  queue.push(2);
70
70
  queue.clear();
71
- expect(queue.size).toBe(0);
71
+ expect(queue.length).toBe(0);
72
72
  });
73
73
 
74
74
  it('forEach should iterate over all elements', () => {
@@ -90,6 +90,16 @@ describe('Queue', () => {
90
90
  expect(queue.isEmpty()).toBeTruthy();
91
91
  });
92
92
 
93
+ it('push with maxLen', () => {
94
+ const queue = new Queue<number>([], { maxLen: 10 });
95
+ for (let i = 0; i < 1000; i++) {
96
+ queue.push(i);
97
+ }
98
+ expect(queue.maxLen).toBe(10);
99
+ expect(queue.length).toBe(10);
100
+ expect(queue.first).toBe(990);
101
+ });
102
+
93
103
  it('compact method should work well', () => {
94
104
  for (let i = 0; i < 1000; i++) queue.push(i);
95
105
 
@@ -119,9 +129,9 @@ describe('Queue', () => {
119
129
  toElementFn: rawElement => rawElement.id
120
130
  });
121
131
 
122
- expect(queue.size).toBe(5);
132
+ expect(queue.length).toBe(5);
123
133
  queue.shift();
124
- expect(queue.size).toBe(4);
134
+ expect(queue.length).toBe(4);
125
135
  expect(queue.at(1)).toBe('3');
126
136
  });
127
137
 
@@ -193,11 +203,11 @@ describe('Queue', () => {
193
203
  queue.push(9);
194
204
  queue.push(10);
195
205
  expect(queue.elements.length).toBe(10);
196
- while (queue.size > 7) queue.shift();
197
- expect(queue.size).toBe(7);
206
+ while (queue.length > 7) queue.shift();
207
+ expect(queue.length).toBe(7);
198
208
  expect(queue.elements.length).toBe(10);
199
209
  queue.shift();
200
- expect(queue.size).toBe(6);
210
+ expect(queue.length).toBe(6);
201
211
  expect(queue.elements.length).toBe(6);
202
212
  });
203
213
  });
@@ -260,7 +270,7 @@ describe('Queue - Additional Methods', () => {
260
270
  queue.push(1);
261
271
  queue.push(2);
262
272
  expect(queue.last).toBe(2);
263
- expect(queue.size).toBe(2);
273
+ expect(queue.length).toBe(2);
264
274
  });
265
275
 
266
276
  it('peekLast should return undefined if queue is empty', () => {
@@ -288,12 +298,101 @@ describe('Queue - Additional Methods', () => {
288
298
  });
289
299
  });
290
300
 
301
+ describe('Queue Additional Methods', () => {
302
+ // Slice method implementation and test
303
+ test('slice should return a new list with specified range', () => {
304
+ const list = new Queue([1, 2, 3, 4, 5]);
305
+ const slicedList = list.slice(1, 4);
306
+
307
+ expect(slicedList.toArray()).toEqual([2, 3, 4]);
308
+ expect(list.length).toBe(5); // Original list unchanged
309
+ });
310
+
311
+ // Splice method implementation
312
+ test('splice should modify list and return removed elements', () => {
313
+ const list = new Queue([1, 2, 3, 4, 5]);
314
+ const removedList = list.splice(2, 2, 6, 7);
315
+
316
+ expect(list.toArray()).toEqual([1, 2, 6, 7, 5]);
317
+ expect(removedList.toArray()).toEqual([3, 4]);
318
+ });
319
+
320
+ // Concat method test
321
+ test('concat should combine multiple lists', () => {
322
+ const list1 = new Queue([1, 2]);
323
+ const list2 = new Queue([3, 4]);
324
+ const list3 = new Queue([5, 6]);
325
+
326
+ const concatenatedList = list1.concat(list2, list3);
327
+ expect(concatenatedList.toArray()).toEqual([1, 2, 3, 4, 5, 6]);
328
+ });
329
+
330
+ // Sort method test
331
+ test('sort should order elements in ascending order', () => {
332
+ const list = new Queue([5, 2, 8, 1, 9]);
333
+ list.sort((a, b) => a - b);
334
+
335
+ expect(list.toArray()).toEqual([1, 2, 5, 8, 9]);
336
+ });
337
+
338
+ // Reverse method test
339
+ test('reverse should invert the list order', () => {
340
+ const list = new Queue([1, 2, 3, 4, 5]);
341
+ list.reverse();
342
+
343
+ expect(list.toArray()).toEqual([5, 4, 3, 2, 1]);
344
+ });
345
+
346
+ // Join method test
347
+ test('join should convert list to string with separator', () => {
348
+ const list = new Queue(['a', 'b', 'c']);
349
+
350
+ expect(list.join('-')).toBe('a-b-c');
351
+ expect(list.join()).toBe('a,b,c');
352
+ });
353
+
354
+ // IndexOf method test
355
+ test('indexOf should return first occurrence index', () => {
356
+ const list = new Queue([1, 2, 3, 2, 1]);
357
+
358
+ expect(list.indexOf(2)).toBe(1);
359
+ expect(list.indexOf(4)).toBe(-1);
360
+ });
361
+
362
+ // LastIndexOf method test
363
+ test('lastIndexOf should return last occurrence index', () => {
364
+ const list = new Queue([1, 2, 3, 2, 1]);
365
+
366
+ expect(list.lastIndexOf(2)).toBe(3);
367
+ expect(list.lastIndexOf(4)).toBe(-1);
368
+ });
369
+
370
+ // findIndex method test
371
+ test('findIndex should return first occurrence index', () => {
372
+ const list = new Queue([1, 2, 3, 2, 1]);
373
+ expect(list.findIndex(item => item === 2)).toBe(1);
374
+ expect(list.findIndex(item => item === 4)).toBe(-1);
375
+ });
376
+
377
+ // fill method test
378
+ test('fill should return fill all the list', () => {
379
+ let list = new Queue([1, 2, 3, 2, 1]);
380
+ expect([...list.fill(9)]).toEqual([9, 9, 9, 9, 9]);
381
+ list = new Queue([1, 2, 3, 2, 1]);
382
+ expect([...list.fill(9, 2, 3)]).toEqual([1, 2, 9, 2, 1]);
383
+ list = new Queue([1, 2, 3, 2, 1]);
384
+ expect([...list.fill(9, -3, -2)]).toEqual([1, 2, 9, 2, 1]);
385
+ list = new Queue([1, 2, 3, 2, 1]);
386
+ expect([...list.fill(9, -2, -3)]).toEqual([1, 2, 3, 2, 1]);
387
+ });
388
+ });
389
+
291
390
  describe('Queue - Static and Clone Methods', () => {
292
391
  it('fromArray should create a new queue from an array', () => {
293
392
  const array = [1, 2, 3];
294
393
  const queue = Queue.fromArray(array);
295
394
  expect(queue.toArray()).toEqual(array);
296
- expect(queue.size).toBe(array.length);
395
+ expect(queue.length).toBe(array.length);
297
396
  });
298
397
 
299
398
  it('fromArray should create an empty queue from an empty array', () => {
@@ -308,7 +407,7 @@ describe('Queue - Static and Clone Methods', () => {
308
407
 
309
408
  const clonedQueue = originalQueue.clone();
310
409
  expect(clonedQueue.toArray()).toEqual(originalQueue.toArray());
311
- expect(clonedQueue.size).toBe(originalQueue.size);
410
+ expect(clonedQueue.length).toBe(originalQueue.length);
312
411
  });
313
412
 
314
413
  it('clone should not affect the original queue when mutated', () => {
@@ -319,7 +418,7 @@ describe('Queue - Static and Clone Methods', () => {
319
418
  const clonedQueue = originalQueue.clone();
320
419
  clonedQueue.push(3);
321
420
 
322
- expect(clonedQueue.size).not.toBe(originalQueue.size);
421
+ expect(clonedQueue.length).not.toBe(originalQueue.length);
323
422
  expect(originalQueue.toArray()).not.toContain(3);
324
423
  });
325
424
  });
@@ -335,14 +434,14 @@ describe('LinkedListQueue', () => {
335
434
 
336
435
  it('should push elements to the end of the queue', () => {
337
436
  expect(queue.first).toBe('A');
338
- expect(queue.size).toBe(2);
437
+ expect(queue.length).toBe(2);
339
438
  });
340
439
 
341
440
  it('should shift elements from the front of the queue', () => {
342
441
  const dequeued = queue.shift();
343
442
  expect(dequeued).toBe('A');
344
443
  expect(queue.first).toBe('B');
345
- expect(queue.size).toBe(1);
444
+ expect(queue.length).toBe(1);
346
445
  });
347
446
 
348
447
  it('should peek at the front of the queue', () => {
@@ -352,6 +451,6 @@ describe('LinkedListQueue', () => {
352
451
  it('should clone method work correctly', () => {
353
452
  const cloned = queue.clone();
354
453
  expect(cloned instanceof LinkedListQueue).toBe(true);
355
- expect(cloned.size).toBe(2);
454
+ expect(cloned.length).toBe(2);
356
455
  });
357
456
  });
@@ -263,7 +263,7 @@ describe('conversions', () => {
263
263
  'triangle'
264
264
  ]);
265
265
  const dq = new Deque<string>(heap);
266
- expect(dq.size).toBe(10);
266
+ expect(dq.length).toBe(10);
267
267
  if (isDebug) dq.print();
268
268
  expect([...dq]).toEqual([
269
269
  'transmit',
@@ -160,159 +160,5 @@ function _render(name: string, data: any, options: Json2htmlOptions, level: numb
160
160
  }
161
161
 
162
162
  export function render(name: string, json: any, options: Json2htmlOptions): string {
163
- // return `${head}${_render('', json, options, 0, 0)}`;
164
163
  return `${_render(name, json, options, 0, 0)}`;
165
164
  }
166
-
167
- // const head = `<style>
168
- // #json-to-html table {
169
- // border-collapse: collapse;
170
- // }
171
- // #json-to-html th {
172
- // color: #888;
173
- // }
174
- // #json-to-html table,th, td {
175
- // border: 1px solid #DDD;
176
- // padding: 10px 5px;
177
- // }
178
- // #json-to-html th, td {
179
- // text-align: center;
180
- // }
181
- // #json-to-html .content {
182
- // padding-left: 30px;
183
- // font-family: Arial;
184
- // }
185
- //
186
- // #json-to-html .index {
187
- // font-size: 100%;
188
- // color: #999;
189
- // float: left;
190
- // }
191
- // #json-to-html .clearfix:after {
192
- // content: ".";
193
- // display: block;
194
- // height: 0;
195
- // clear: both;
196
- // visibility: hidden;
197
- // }
198
- // #json-to-html .json-to-html-label {
199
- // font-family: Helvetica Neue;
200
- // color: #333;
201
- // }
202
- // #json-to-html .json-to-html-value {
203
- // font-family: Arial;
204
- // color: #777;
205
- // }
206
- // #json-to-html .collapsible > .json-to-html-label:hover {
207
- // text-decoration: underline;
208
- // }
209
- // #json-to-html .collapsible > .json-to-html-label {
210
- // color: #15C;
211
- // }
212
- // #json-to-html .json-to-html-collapse > div.content {
213
- // display: none;
214
- // }
215
- // #json-to-html .json-to-html-collapse > .json-to-html-label {
216
- // font-weight: bold;
217
- // }
218
- //
219
- // #json-to-html .json-to-html-expand > div > .json-to-html-label, #json-to-html .json-to-html-collapse > div > .json-to-html-label {
220
- // background-repeat: no-repeat;
221
- // background-position: left;
222
- // padding-left: 25px;
223
- // margin: 5px 0px 5px 15px;
224
- // display: inline-block;
225
- // }
226
- //
227
- // #json-to-html .json-to-html-expand > div > .json-to-html-label {
228
- // width: 30px;
229
- // height: 30px;
230
- // background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100"><polygon points="50,10 10,90 90,90" fill="blue" /></svg>');
231
- // background-size: cover;
232
- // background-position: center;
233
- // }
234
- //
235
- // #json-to-html .json-to-html-collapse > div > .json-to-html-label {
236
- // width: 30px;
237
- // height: 30px;
238
- // background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100"><polygon points="50,10 10,90 90,90" fill="blue" /></svg>');
239
- // background-size: cover;
240
- // background-position: center;
241
- // }
242
- //
243
- // #json-to-html .json-to-html-collapse > span.collapsible:before {
244
- // border-radius: 2px;
245
- // border-color: #A44;
246
- // border-style: solid;
247
- // border-width: 1px;
248
- // color: #A44;
249
- // content: '+';
250
- // display: inline-block;
251
- // line-height: 7px;
252
- // margin: 0 2px;
253
- // overflow: hidden;
254
- // padding: 1px;
255
- // font-size: 11px;
256
- // }
257
- //
258
- // #json-to-html .json-to-html-expand > span.collapsible:before {
259
- // border: none;
260
- // color: #A44;
261
- // content: '-';
262
- // display: inline-block;
263
- // line-height: 7px;
264
- // margin: 4px;
265
- // overflow: hidden;
266
- // padding: 1px;
267
- // font-size: 11px;
268
- // }
269
- //
270
- // #json-to-html.level0 {
271
- // font-size: 25px;
272
- // }
273
- // #json-to-html .level1 {
274
- // font-size: 22px;
275
- // }
276
- //
277
- // #json-to-html .leaf {
278
- // color: #666;
279
- // display: inline;
280
- // }
281
- //
282
- // #json-to-html .altRows:nth-child(odd) { background-color:#ddd; }
283
- // #json-to-html .altRows:nth-child(even) { background-color:#fff; }
284
- //
285
- // #json-to-html tr:nth-child(odd) { background-color:#eee; }
286
- // #json-to-html tr:nth-child(even) { background-color:#fff; }
287
- // </style>
288
- // <script type="text/javascript">
289
- // json-to-html = {
290
- // toggleVisibility: function(el, name) {
291
- // json-to-html.toggleClass(el.parentElement,'json-to-html-collapse json-to-html-expand');
292
- // },
293
- // classRe: function(name) {
294
- // return new RegExp('(?:^|\\s)'+name+'(?!\\S)');
295
- // },
296
- // addClass: function(el, name) {
297
- // el.className += " "+name;
298
- // },
299
- // removeClass: function(el, name) {
300
- // var re = json-to-html.classRe(name);
301
- // el.className = el.className.replace(json-to-html.classRe(name) , '' )
302
- // },
303
- // hasClass: function(el, name) {
304
- // var re = json-to-html.classRe(name);
305
- // return json-to-html.classRe(name).exec(el.className);
306
- // },
307
- // toggleClass: function(el, name) {
308
- // var names = name.split(/\s+/);
309
- // for (n in names) {
310
- // if (json-to-html.hasClass(el, names[n])) {
311
- // json-to-html.removeClass(el, names[n]);
312
- // } else {
313
- // json-to-html.addClass(el, names[n]);
314
- // }
315
- // }
316
- // }
317
- // };
318
- // </script>`;
@@ -1,45 +0,0 @@
1
- import { AVLTree } from '../../../../';
2
- import * as Benchmark from 'benchmark';
3
- // import { getRandomIntArray, magnitude } from '../../../utils';
4
- // const suite = new Benchmark.Suite();
5
- // const avlTree = new AVLTree();
6
- // const { HUNDRED_THOUSAND } = magnitude;
7
- // const randomArray = getRandomIntArray(HUNDRED_THOUSAND, 0, HUNDRED_THOUSAND - 1, true);
8
- // suite
9
- // .add(`${HUNDRED_THOUSAND.toLocaleString()} add randomly`, () => {
10
- // avlTree.clear();
11
- // for (let i = 0; i < randomArray.length; i++)
12
- // avlTree.add(randomArray[i]);
13
- // })
14
- // .add(`${HUNDRED_THOUSAND.toLocaleString()} add`, () => {
15
- // avlTree.clear();
16
- // for (let i = 0; i < randomArray.length; i++)
17
- // avlTree.add(i);
18
- // })
19
- // .add(`${HUNDRED_THOUSAND.toLocaleString()} get`, () => {
20
- // for (let i = 0; i < randomArray.length; i++)
21
- // avlTree.get(randomArray[i]);
22
- // })
23
- // .add(`${HUNDRED_THOUSAND.toLocaleString()} getNode`, () => {
24
- // for (let i = 0; i < randomArray.length; i++)
25
- // avlTree.getNode(randomArray[i]);
26
- // })
27
- // .add(`${HUNDRED_THOUSAND.toLocaleString()} iterator`, () => {
28
- // const entries = [...avlTree];
29
- // return entries.length === HUNDRED_THOUSAND;
30
- // })
31
- // .add(`${HUNDRED_THOUSAND.toLocaleString()} add & delete orderly`, () => {
32
- // avlTree.clear();
33
- // for (let i = 0; i < randomArray.length; i++)
34
- // avlTree.add(i);
35
- // for (let i = 0; i < randomArray.length; i++)
36
- // avlTree.delete(i);
37
- // })
38
- // .add(`${HUNDRED_THOUSAND.toLocaleString()} add & delete randomly`, () => {
39
- // avlTree.clear();
40
- // for (let i = 0; i < randomArray.length; i++)
41
- // avlTree.add(randomArray[i]);
42
- // for (let i = 0; i < randomArray.length; i++)
43
- // avlTree.delete(randomArray[i]);
44
- // });
45
- // export { suite };