data-structure-typed 1.49.5 → 1.49.6

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 (68) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +14 -23
  3. package/benchmark/report.html +14 -23
  4. package/benchmark/report.json +163 -256
  5. package/dist/cjs/data-structures/binary-tree/avl-tree.d.ts +53 -48
  6. package/dist/cjs/data-structures/binary-tree/avl-tree.js +55 -49
  7. package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
  8. package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +153 -130
  9. package/dist/cjs/data-structures/binary-tree/binary-tree.js +192 -149
  10. package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
  11. package/dist/cjs/data-structures/binary-tree/bst.d.ts +83 -71
  12. package/dist/cjs/data-structures/binary-tree/bst.js +113 -89
  13. package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
  14. package/dist/cjs/data-structures/binary-tree/rb-tree.d.ts +37 -35
  15. package/dist/cjs/data-structures/binary-tree/rb-tree.js +62 -59
  16. package/dist/cjs/data-structures/binary-tree/rb-tree.js.map +1 -1
  17. package/dist/cjs/data-structures/binary-tree/tree-multimap.d.ts +46 -39
  18. package/dist/cjs/data-structures/binary-tree/tree-multimap.js +58 -51
  19. package/dist/cjs/data-structures/binary-tree/tree-multimap.js.map +1 -1
  20. package/dist/cjs/interfaces/binary-tree.d.ts +3 -3
  21. package/dist/cjs/types/common.d.ts +3 -3
  22. package/dist/cjs/types/common.js +2 -2
  23. package/dist/cjs/types/common.js.map +1 -1
  24. package/dist/mjs/data-structures/binary-tree/avl-tree.d.ts +53 -48
  25. package/dist/mjs/data-structures/binary-tree/avl-tree.js +55 -49
  26. package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +153 -130
  27. package/dist/mjs/data-structures/binary-tree/binary-tree.js +192 -149
  28. package/dist/mjs/data-structures/binary-tree/bst.d.ts +83 -71
  29. package/dist/mjs/data-structures/binary-tree/bst.js +113 -89
  30. package/dist/mjs/data-structures/binary-tree/rb-tree.d.ts +37 -35
  31. package/dist/mjs/data-structures/binary-tree/rb-tree.js +62 -59
  32. package/dist/mjs/data-structures/binary-tree/tree-multimap.d.ts +46 -39
  33. package/dist/mjs/data-structures/binary-tree/tree-multimap.js +58 -51
  34. package/dist/mjs/interfaces/binary-tree.d.ts +3 -3
  35. package/dist/mjs/types/common.d.ts +3 -3
  36. package/dist/mjs/types/common.js +2 -2
  37. package/dist/umd/data-structure-typed.js +497 -419
  38. package/dist/umd/data-structure-typed.min.js +2 -2
  39. package/dist/umd/data-structure-typed.min.js.map +1 -1
  40. package/package.json +1 -1
  41. package/src/data-structures/binary-tree/avl-tree.ts +58 -53
  42. package/src/data-structures/binary-tree/binary-tree.ts +253 -205
  43. package/src/data-structures/binary-tree/bst.ts +125 -104
  44. package/src/data-structures/binary-tree/rb-tree.ts +66 -64
  45. package/src/data-structures/binary-tree/tree-multimap.ts +62 -56
  46. package/src/interfaces/binary-tree.ts +3 -3
  47. package/src/types/common.ts +3 -3
  48. package/test/performance/data-structures/binary-tree/avl-tree.test.ts +4 -12
  49. package/test/performance/data-structures/binary-tree/binary-tree-overall.test.ts +37 -0
  50. package/test/performance/data-structures/binary-tree/binary-tree.test.ts +6 -16
  51. package/test/performance/data-structures/binary-tree/bst.test.ts +5 -13
  52. package/test/performance/data-structures/binary-tree/rb-tree.test.ts +5 -15
  53. package/test/performance/data-structures/comparison/comparison.test.ts +13 -36
  54. package/test/performance/data-structures/graph/directed-graph.test.ts +3 -14
  55. package/test/performance/data-structures/hash/hash-map.test.ts +11 -34
  56. package/test/performance/data-structures/heap/heap.test.ts +5 -18
  57. package/test/performance/data-structures/linked-list/doubly-linked-list.test.ts +0 -1
  58. package/test/performance/data-structures/linked-list/singly-linked-list.test.ts +0 -2
  59. package/test/performance/data-structures/priority-queue/max-priority-queue.test.ts +2 -4
  60. package/test/performance/data-structures/priority-queue/priority-queue.test.ts +4 -14
  61. package/test/performance/data-structures/queue/queue.test.ts +8 -25
  62. package/test/performance/data-structures/stack/stack.test.ts +6 -18
  63. package/test/performance/data-structures/trie/trie.test.ts +2 -6
  64. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +6 -5
  65. package/test/unit/data-structures/binary-tree/bst.test.ts +17 -1
  66. package/test/performance/data-structures/binary-tree/overall.test.ts +0 -0
  67. package/test/performance/data-structures/matrix/matrix2d.test.ts +0 -0
  68. package/test/performance/data-structures/matrix/vector2d.test.ts +0 -0
@@ -12,33 +12,23 @@ const cOrderedMap = new OrderedMap<number, number>();
12
12
 
13
13
  suite.add(`${HUNDRED_THOUSAND.toLocaleString()} add`, () => {
14
14
  rbTree.clear();
15
- for (let i = 0; i < arr.length; i++) {
16
- rbTree.add(arr[i]);
17
- }
15
+ for (let i = 0; i < arr.length; i++) rbTree.add(arr[i]);
18
16
  });
19
17
 
20
18
  if (isCompetitor) {
21
19
  suite.add(`CPT ${HUNDRED_THOUSAND.toLocaleString()} add`, () => {
22
- for (let i = 0; i < arr.length; i++) {
23
- cOrderedMap.setElement(arr[i], arr[i]);
24
- }
20
+ for (let i = 0; i < arr.length; i++) cOrderedMap.setElement(arr[i], arr[i]);
25
21
  });
26
22
  }
27
23
 
28
24
  suite
29
25
  .add(`${HUNDRED_THOUSAND.toLocaleString()} add & delete randomly`, () => {
30
26
  rbTree.clear();
31
- for (let i = 0; i < arr.length; i++) {
32
- rbTree.add(arr[i]);
33
- }
34
- for (let i = 0; i < arr.length; i++) {
35
- rbTree.delete(arr[i]);
36
- }
27
+ for (let i = 0; i < arr.length; i++) rbTree.add(arr[i]);
28
+ for (let i = 0; i < arr.length; i++) rbTree.delete(arr[i]);
37
29
  })
38
30
  .add(`${HUNDRED_THOUSAND.toLocaleString()} getNode`, () => {
39
- for (let i = 0; i < arr.length; i++) {
40
- rbTree.getNode(arr[i]);
41
- }
31
+ for (let i = 0; i < arr.length; i++) rbTree.getNode(arr[i]);
42
32
  });
43
33
 
44
34
  suite.add(`${HUNDRED_THOUSAND.toLocaleString()} add & iterator`, () => {
@@ -70,75 +70,52 @@ if (isCompetitor) {
70
70
  for (let i = 0; i < TEN_THOUSAND; i++) pq.pop();
71
71
  })
72
72
  .add(`CPT OM ${HUNDRED_THOUSAND.toLocaleString()} add`, () => {
73
- for (let i = 0; i < arrHundredThousand.length; i++) {
73
+ for (let i = 0; i < arrHundredThousand.length; i++)
74
74
  cOrderedMap.setElement(arrHundredThousand[i], arrHundredThousand[i]);
75
- }
76
75
  })
77
76
  .add(`CPT HM ${TEN_THOUSAND.toLocaleString()} set`, () => {
78
77
  const hm = new CHashMap<number, number>();
79
78
 
80
- for (let i = 0; i < TEN_THOUSAND; i++) {
81
- hm.setElement(i, i);
82
- }
79
+ for (let i = 0; i < TEN_THOUSAND; i++) hm.setElement(i, i);
83
80
  })
84
81
  .add(`CPT HM ${TEN_THOUSAND.toLocaleString()} set & get`, () => {
85
82
  const hm = new CHashMap<number, number>();
86
83
 
87
- for (let i = 0; i < TEN_THOUSAND; i++) {
88
- hm.setElement(i, i);
89
- }
90
- for (let i = 0; i < TEN_THOUSAND; i++) {
91
- hm.getElementByKey(i);
92
- }
84
+ for (let i = 0; i < TEN_THOUSAND; i++) hm.setElement(i, i);
85
+ for (let i = 0; i < TEN_THOUSAND; i++) hm.getElementByKey(i);
93
86
  })
94
87
  .add(`CPT LL ${MILLION.toLocaleString()} unshift`, () => {
95
88
  const list = new CLinkedList<number>();
96
89
 
97
- for (let i = 0; i < MILLION; i++) {
98
- list.pushFront(i);
99
- }
90
+ for (let i = 0; i < MILLION; i++) list.pushFront(i);
100
91
  })
101
92
  .add(`CPT PQ ${TEN_THOUSAND.toLocaleString()} add & pop`, () => {
102
93
  const pq = new CPriorityQueue<number>();
103
94
 
104
- for (let i = 0; i < TEN_THOUSAND; i++) {
105
- pq.push(i);
106
- }
95
+ for (let i = 0; i < TEN_THOUSAND; i++) pq.push(i);
107
96
 
108
- for (let i = 0; i < TEN_THOUSAND; i++) {
109
- pq.pop();
110
- }
97
+ for (let i = 0; i < TEN_THOUSAND; i++) pq.pop();
111
98
  })
112
99
  .add(`CPT DQ ${MILLION.toLocaleString()} push`, () => {
113
100
  const deque = new CDeque<number>();
114
- for (let i = 0; i < MILLION; i++) {
115
- deque.pushBack(i);
116
- }
101
+ for (let i = 0; i < MILLION; i++) deque.pushBack(i);
117
102
  })
118
103
  .add(`CPT Q ${MILLION.toLocaleString()} push`, () => {
119
104
  const queue = new CQueue<number>();
120
105
 
121
- for (let i = 0; i < MILLION; i++) {
122
- queue.push(i);
123
- }
106
+ for (let i = 0; i < MILLION; i++) queue.push(i);
124
107
  })
125
108
  .add(`CPT ST ${MILLION.toLocaleString()} push`, () => {
126
109
  const queue = new CStack<number>();
127
110
 
128
- for (let i = 0; i < MILLION; i++) {
129
- queue.push(i);
130
- }
111
+ for (let i = 0; i < MILLION; i++) queue.push(i);
131
112
  })
132
113
  .add(`CPT ST ${MILLION.toLocaleString()} push & pop`, () => {
133
114
  const queue = new CStack<number>();
134
115
 
135
- for (let i = 0; i < MILLION; i++) {
136
- queue.push(i);
137
- }
138
- for (let i = 0; i < MILLION; i++) {
139
- queue.pop();
140
- }
116
+ for (let i = 0; i < MILLION; i++) queue.push(i);
117
+ for (let i = 0; i < MILLION; i++) queue.pop();
141
118
  });
142
119
  }
143
120
 
144
- export { suite };
121
+ // export { suite };
@@ -9,9 +9,7 @@ const vertexes = getRandomWords(THOUSAND);
9
9
 
10
10
  suite
11
11
  .add(`${THOUSAND.toLocaleString()} addVertex`, () => {
12
- for (const v of vertexes) {
13
- graph.addVertex(v);
14
- }
12
+ for (const v of vertexes) graph.addVertex(v);
15
13
  })
16
14
  .add(`${THOUSAND.toLocaleString()} addEdge`, () => {
17
15
  for (let i = 0; i < THOUSAND; i++) {
@@ -21,29 +19,20 @@ suite
21
19
  }
22
20
  })
23
21
  .add(`${THOUSAND.toLocaleString()} getVertex`, () => {
24
- for (let i = 0; i < THOUSAND; i++) {
25
- graph.getVertex(vertexes[getRandomIndex(vertexes)]);
26
- }
22
+ for (let i = 0; i < THOUSAND; i++) graph.getVertex(vertexes[getRandomIndex(vertexes)]);
27
23
  })
28
24
  .add(`${THOUSAND.toLocaleString()} getEdge`, () => {
29
- for (let i = 0; i < THOUSAND; i++) {
25
+ for (let i = 0; i < THOUSAND; i++)
30
26
  graph.getEdge(vertexes[getRandomIndex(vertexes)], vertexes[getRandomIndex(vertexes)]);
31
- }
32
27
  })
33
28
  .add(`tarjan`, () => {
34
- // for (let i = 0; i < THOUSAND; i++) {
35
29
  graph.tarjan(true);
36
- // }
37
30
  })
38
31
  .add(`tarjan all`, () => {
39
- // for (let i = 0; i < THOUSAND; i++) {
40
32
  graph.tarjan(true, true, true, true);
41
- // }
42
33
  })
43
34
  .add(`topologicalSort`, () => {
44
- // for (let i = 0; i < THOUSAND; i++) {
45
35
  graph.topologicalSort('key');
46
- // }
47
36
  });
48
37
 
49
38
  export { suite };
@@ -10,18 +10,14 @@ const { MILLION } = magnitude;
10
10
  suite.add(`${MILLION.toLocaleString()} set`, () => {
11
11
  const hm = new HashMap<number, number>();
12
12
 
13
- for (let i = 0; i < MILLION; i++) {
14
- hm.set(i, i);
15
- }
13
+ for (let i = 0; i < MILLION; i++) hm.set(i, i);
16
14
  });
17
15
 
18
16
  if (isCompetitor) {
19
17
  suite.add(`CPT ${MILLION.toLocaleString()} set`, () => {
20
18
  const hm = new CHashMap<number, number>();
21
19
 
22
- for (let i = 0; i < MILLION; i++) {
23
- hm.setElement(i, i);
24
- }
20
+ for (let i = 0; i < MILLION; i++) hm.setElement(i, i);
25
21
  });
26
22
  }
27
23
 
@@ -40,43 +36,30 @@ suite.add(`Native Set ${MILLION.toLocaleString()} add`, () => {
40
36
  suite.add(`${MILLION.toLocaleString()} set & get`, () => {
41
37
  const hm = new HashMap<number, number>();
42
38
 
43
- for (let i = 0; i < MILLION; i++) {
44
- hm.set(i, i);
45
- }
46
- for (let i = 0; i < MILLION; i++) {
47
- hm.get(i);
48
- }
39
+ for (let i = 0; i < MILLION; i++) hm.set(i, i);
40
+ for (let i = 0; i < MILLION; i++) hm.get(i);
49
41
  });
50
42
 
51
43
  if (isCompetitor) {
52
44
  suite.add(`CPT ${MILLION.toLocaleString()} set & get`, () => {
53
45
  const hm = new CHashMap<number, number>();
54
46
 
55
- for (let i = 0; i < MILLION; i++) {
56
- hm.setElement(i, i);
57
- }
58
- for (let i = 0; i < MILLION; i++) {
59
- hm.getElementByKey(i);
60
- }
47
+ for (let i = 0; i < MILLION; i++) hm.setElement(i, i);
48
+ for (let i = 0; i < MILLION; i++) hm.getElementByKey(i);
61
49
  });
62
50
  }
63
51
 
64
52
  suite.add(`Native Map ${MILLION.toLocaleString()} set & get`, () => {
65
53
  const hm = new Map<number, number>();
66
54
 
67
- for (let i = 0; i < MILLION; i++) {
68
- hm.set(i, i);
69
- }
70
- for (let i = 0; i < MILLION; i++) {
71
- hm.get(i);
72
- }
55
+ for (let i = 0; i < MILLION; i++) hm.set(i, i);
56
+ for (let i = 0; i < MILLION; i++) hm.get(i);
73
57
  });
74
58
 
75
59
  suite.add(`Native Set ${MILLION.toLocaleString()} add & has`, () => {
76
60
  const hs = new Set<number>();
77
61
 
78
62
  for (let i = 0; i < MILLION; i++) hs.add(i);
79
-
80
63
  for (let i = 0; i < MILLION; i++) hs.has(i);
81
64
  });
82
65
 
@@ -88,9 +71,7 @@ suite.add(`${MILLION.toLocaleString()} ObjKey set & get`, () => {
88
71
  objKeys.push(obj);
89
72
  hm.set(obj, i);
90
73
  }
91
- for (let i = 0; i < MILLION; i++) {
92
- hm.get(objKeys[i]);
93
- }
74
+ for (let i = 0; i < MILLION; i++) hm.get(objKeys[i]);
94
75
  });
95
76
 
96
77
  suite.add(`Native Map ${MILLION.toLocaleString()} ObjKey set & get`, () => {
@@ -101,9 +82,7 @@ suite.add(`Native Map ${MILLION.toLocaleString()} ObjKey set & get`, () => {
101
82
  objs.push(obj);
102
83
  hm.set(obj, i);
103
84
  }
104
- for (let i = 0; i < MILLION; i++) {
105
- hm.get(objs[i]);
106
- }
85
+ for (let i = 0; i < MILLION; i++) hm.get(objs[i]);
107
86
  });
108
87
 
109
88
  suite.add(`Native Set ${MILLION.toLocaleString()} ObjKey add & has`, () => {
@@ -114,9 +93,7 @@ suite.add(`Native Set ${MILLION.toLocaleString()} ObjKey add & has`, () => {
114
93
  objs.push(obj);
115
94
  hs.add(obj);
116
95
  }
117
- for (let i = 0; i < MILLION; i++) {
118
- hs.has(objs[i]);
119
- }
96
+ for (let i = 0; i < MILLION; i++) hs.has(objs[i]);
120
97
  });
121
98
 
122
99
  export { suite };
@@ -9,31 +9,18 @@ suite
9
9
  .add(`${HUNDRED_THOUSAND.toLocaleString()} add & poll`, () => {
10
10
  const heap = new Heap<number>([], { comparator: (a, b) => b - a });
11
11
 
12
- for (let i = 0; i < HUNDRED_THOUSAND; i++) {
13
- heap.add(i);
14
- }
15
-
16
- for (let i = 0; i < HUNDRED_THOUSAND; i++) {
17
- heap.poll();
18
- }
12
+ for (let i = 0; i < HUNDRED_THOUSAND; i++) heap.add(i);
13
+ for (let i = 0; i < HUNDRED_THOUSAND; i++) heap.poll();
19
14
  })
20
15
  .add(`${HUNDRED_THOUSAND.toLocaleString()} add & dfs`, () => {
21
16
  const heap = new Heap<number>([], { comparator: (a, b) => b - a });
22
-
23
- for (let i = 0; i < HUNDRED_THOUSAND; i++) {
24
- heap.add(i);
25
- }
26
-
17
+ for (let i = 0; i < HUNDRED_THOUSAND; i++) heap.add(i);
27
18
  heap.dfs();
28
19
  })
29
20
  .add(`${TEN_THOUSAND.toLocaleString()} fib add & pop`, () => {
30
21
  const fbHeap = new FibonacciHeap<number>();
31
- for (let i = 1; i <= TEN_THOUSAND; i++) {
32
- fbHeap.push(i);
33
- }
34
- for (let i = 1; i <= TEN_THOUSAND; i++) {
35
- fbHeap.pop();
36
- }
22
+ for (let i = 1; i <= TEN_THOUSAND; i++) fbHeap.push(i);
23
+ for (let i = 1; i <= TEN_THOUSAND; i++) fbHeap.pop();
37
24
  });
38
25
 
39
26
  export { suite };
@@ -40,7 +40,6 @@ suite
40
40
  const list = new DoublyLinkedList<number>();
41
41
 
42
42
  for (let i = 0; i < MILLION; i++) list.unshift(i);
43
-
44
43
  for (let i = 0; i < MILLION; i++) list.shift();
45
44
  })
46
45
  .add(`${MILLION.toLocaleString()} addBefore`, () => {
@@ -10,14 +10,12 @@ suite
10
10
  const list = new SinglyLinkedList<number>();
11
11
 
12
12
  for (let i = 0; i < MILLION; i++) list.push(i);
13
-
14
13
  for (let i = 0; i < MILLION; i++) list.shift();
15
14
  })
16
15
  .add(`${TEN_THOUSAND.toLocaleString()} push & pop`, () => {
17
16
  const list = new SinglyLinkedList<number>();
18
17
 
19
18
  for (let i = 0; i < TEN_THOUSAND; i++) list.push(i);
20
-
21
19
  for (let i = 0; i < TEN_THOUSAND; i++) list.pop();
22
20
  })
23
21
  .add(`${TEN_THOUSAND.toLocaleString()} addBefore`, () => {
@@ -11,9 +11,7 @@ suite.add(`${TEN_THOUSAND.toLocaleString()} refill & poll`, () => {
11
11
  );
12
12
  const maxPQ = new MaxPriorityQueue<number>();
13
13
  maxPQ.refill(nodes);
14
- while (maxPQ.size > 0) {
15
- maxPQ.poll();
16
- }
14
+ while (maxPQ.size > 0) maxPQ.poll();
17
15
  });
18
16
 
19
- export { suite };
17
+ // export { suite };
@@ -10,25 +10,15 @@ const { HUNDRED_THOUSAND } = magnitude;
10
10
  suite.add(`${HUNDRED_THOUSAND.toLocaleString()} add & poll`, () => {
11
11
  const pq = new PriorityQueue<number>([], { comparator: (a, b) => b - a });
12
12
 
13
- for (let i = 0; i < HUNDRED_THOUSAND; i++) {
14
- pq.add(i);
15
- }
16
-
17
- for (let i = 0; i < HUNDRED_THOUSAND; i++) {
18
- pq.poll();
19
- }
13
+ for (let i = 0; i < HUNDRED_THOUSAND; i++) pq.add(i);
14
+ for (let i = 0; i < HUNDRED_THOUSAND; i++) pq.poll();
20
15
  });
21
16
  if (isCompetitor) {
22
17
  suite.add(`CPT ${HUNDRED_THOUSAND.toLocaleString()} add & pop`, () => {
23
18
  const pq = new CPriorityQueue<number>();
24
19
 
25
- for (let i = 0; i < HUNDRED_THOUSAND; i++) {
26
- pq.push(i);
27
- }
28
-
29
- for (let i = 0; i < HUNDRED_THOUSAND; i++) {
30
- pq.pop();
31
- }
20
+ for (let i = 0; i < HUNDRED_THOUSAND; i++) pq.push(i);
21
+ for (let i = 0; i < HUNDRED_THOUSAND; i++) pq.pop();
32
22
  });
33
23
  }
34
24
 
@@ -10,50 +10,33 @@ const { MILLION, HUNDRED_THOUSAND } = magnitude;
10
10
  suite.add(`${MILLION.toLocaleString()} push`, () => {
11
11
  const queue = new Queue<number>();
12
12
 
13
- for (let i = 0; i < MILLION; i++) {
14
- queue.push(i);
15
- }
13
+ for (let i = 0; i < MILLION; i++) queue.push(i);
16
14
  });
17
15
  if (isCompetitor) {
18
16
  suite.add(`CPT ${MILLION.toLocaleString()} push`, () => {
19
17
  const queue = new CQueue<number>();
20
18
 
21
- for (let i = 0; i < MILLION; i++) {
22
- queue.push(i);
23
- }
19
+ for (let i = 0; i < MILLION; i++) queue.push(i);
24
20
  });
25
21
  }
26
22
  suite.add(`${HUNDRED_THOUSAND.toLocaleString()} push & shift`, () => {
27
23
  const queue = new Queue<number>();
28
24
 
29
- for (let i = 0; i < HUNDRED_THOUSAND; i++) {
30
- queue.push(i);
31
- }
32
- for (let i = 0; i < HUNDRED_THOUSAND; i++) {
33
- queue.shift();
34
- }
25
+ for (let i = 0; i < HUNDRED_THOUSAND; i++) queue.push(i);
26
+ for (let i = 0; i < HUNDRED_THOUSAND; i++) queue.shift();
35
27
  });
36
28
  suite
37
29
  .add(`Native Array ${HUNDRED_THOUSAND.toLocaleString()} push & shift`, () => {
38
30
  const arr = new Array<number>();
39
31
 
40
- for (let i = 0; i < HUNDRED_THOUSAND; i++) {
41
- arr.push(i);
42
- }
43
- for (let i = 0; i < HUNDRED_THOUSAND; i++) {
44
- arr.shift();
45
- }
32
+ for (let i = 0; i < HUNDRED_THOUSAND; i++) arr.push(i);
33
+ for (let i = 0; i < HUNDRED_THOUSAND; i++) arr.shift();
46
34
  })
47
35
  .add(`Native Array ${HUNDRED_THOUSAND.toLocaleString()} push & pop`, () => {
48
36
  const arr = new Array<number>();
49
37
 
50
- for (let i = 0; i < HUNDRED_THOUSAND; i++) {
51
- arr.push(i);
52
- }
53
-
54
- for (let i = 0; i < HUNDRED_THOUSAND; i++) {
55
- arr.pop();
56
- }
38
+ for (let i = 0; i < HUNDRED_THOUSAND; i++) arr.push(i);
39
+ for (let i = 0; i < HUNDRED_THOUSAND; i++) arr.pop();
57
40
  });
58
41
 
59
42
  export { suite };
@@ -10,39 +10,27 @@ const { MILLION } = magnitude;
10
10
  suite.add(`${MILLION.toLocaleString()} push`, () => {
11
11
  const stack = new Stack<number>();
12
12
 
13
- for (let i = 0; i < MILLION; i++) {
14
- stack.push(i);
15
- }
13
+ for (let i = 0; i < MILLION; i++) stack.push(i);
16
14
  });
17
15
  if (isCompetitor) {
18
16
  suite.add(`CPT ${MILLION.toLocaleString()} push`, () => {
19
17
  const queue = new CStack<number>();
20
18
 
21
- for (let i = 0; i < MILLION; i++) {
22
- queue.push(i);
23
- }
19
+ for (let i = 0; i < MILLION; i++) queue.push(i);
24
20
  });
25
21
  }
26
22
  suite.add(`${MILLION.toLocaleString()} push & pop`, () => {
27
23
  const queue = new Stack<number>();
28
24
 
29
- for (let i = 0; i < MILLION; i++) {
30
- queue.push(i);
31
- }
32
- for (let i = 0; i < MILLION; i++) {
33
- queue.pop();
34
- }
25
+ for (let i = 0; i < MILLION; i++) queue.push(i);
26
+ for (let i = 0; i < MILLION; i++) queue.pop();
35
27
  });
36
28
  if (isCompetitor) {
37
29
  suite.add(`CPT ${MILLION.toLocaleString()} push & pop`, () => {
38
30
  const queue = new CStack<number>();
39
31
 
40
- for (let i = 0; i < MILLION; i++) {
41
- queue.push(i);
42
- }
43
- for (let i = 0; i < MILLION; i++) {
44
- queue.pop();
45
- }
32
+ for (let i = 0; i < MILLION; i++) queue.push(i);
33
+ for (let i = 0; i < MILLION; i++) queue.pop();
46
34
  });
47
35
  }
48
36
 
@@ -9,14 +9,10 @@ const randomWords = getRandomWords(HUNDRED_THOUSAND, false);
9
9
 
10
10
  suite
11
11
  .add(`${HUNDRED_THOUSAND.toLocaleString()} push`, () => {
12
- for (let i = 0; i < randomWords.length; i++) {
13
- trie.add(randomWords[i]);
14
- }
12
+ for (let i = 0; i < randomWords.length; i++) trie.add(randomWords[i]);
15
13
  })
16
14
  .add(`${HUNDRED_THOUSAND.toLocaleString()} getWords`, () => {
17
- for (let i = 0; i < randomWords.length; i++) {
18
- trie.getWords(randomWords[i]);
19
- }
15
+ for (let i = 0; i < randomWords.length; i++) trie.getWords(randomWords[i]);
20
16
  });
21
17
 
22
18
  export { suite };
@@ -106,7 +106,8 @@ describe('BinaryTree', () => {
106
106
  it('should delete nodes', () => {
107
107
  expect(tree.getHeight(tree.root, IterationType.ITERATIVE)).toBe(-1);
108
108
  expect(tree.getMinHeight()).toBe(-1);
109
- const node1 = tree.add(1);
109
+ const node1 = tree.createNode(1);
110
+ tree.add(node1);
110
111
  expect(tree.size).toBe(1);
111
112
 
112
113
  const leftChild = new BinaryTreeNode<number>(2);
@@ -224,15 +225,15 @@ describe('BinaryTree', () => {
224
225
  new BinaryTreeNode(4, 4)
225
226
  ]);
226
227
 
227
- expect(tree.isSubtreeBST(tree.getNode(4), IterationType.RECURSIVE)).toBe(true);
228
- expect(tree.isSubtreeBST(tree.getNode(4), IterationType.ITERATIVE)).toBe(true);
228
+ expect(tree.isBST(tree.getNode(4), IterationType.RECURSIVE)).toBe(true);
229
+ expect(tree.isBST(tree.getNode(4), IterationType.ITERATIVE)).toBe(true);
229
230
  });
230
231
 
231
232
  it('should isSubtreeBST', () => {
232
233
  tree.addMany([4, 2, 6, 1, 3, 5, 7, 4]);
233
234
 
234
- expect(tree.isSubtreeBST(tree.getNode(4), IterationType.RECURSIVE)).toBe(true);
235
- expect(tree.isSubtreeBST(tree.getNode(4), IterationType.ITERATIVE)).toBe(true);
235
+ expect(tree.isBST(tree.getNode(4), IterationType.RECURSIVE)).toBe(true);
236
+ expect(tree.isBST(tree.getNode(4), IterationType.ITERATIVE)).toBe(true);
236
237
  expect(tree.getNodes(2, undefined, false, null)).toEqual([]);
237
238
  expect(tree.getNodes(tree.getNodeByKey(2), undefined, false, tree.root)).toEqual([tree.getNodeByKey(2)]);
238
239
  });
@@ -1,4 +1,4 @@
1
- import { BinaryTreeNode, BST, BSTNode, CP, IterationType } from '../../../../src';
1
+ import { BinaryTreeNode, BST, BSTNode, BSTVariant, CP, IterationType } from '../../../../src';
2
2
  import { isDebugTest } from '../../../config';
3
3
 
4
4
  const isDebug = isDebugTest;
@@ -47,6 +47,8 @@ describe('BST operations test', () => {
47
47
  const leftMost = bst.getLeftMost();
48
48
  expect(leftMost?.key).toBe(1);
49
49
 
50
+ expect(bst.isBST()).toBe(true);
51
+
50
52
  const node15 = bst.getNode(15);
51
53
  const minNodeBySpecificNode = node15 && bst.getLeftMost(node15);
52
54
  expect(minNodeBySpecificNode?.key).toBe(12);
@@ -795,6 +797,20 @@ describe('BST operations test recursively', () => {
795
797
  });
796
798
  });
797
799
 
800
+ describe('BST isBST', function () {
801
+ test('isBST', () => {
802
+ const bst = new BST<number, number>();
803
+ bst.addMany([1, 2, 3, 9, 8, 5, 6, 7, 4]);
804
+ expect(bst.isBST()).toBe(true);
805
+ });
806
+
807
+ test('isBST when variant is Max', () => {
808
+ const bst = new BST<number, number>([1, 2, 3, 9, 8, 5, 6, 7, 4], { variant: BSTVariant.INVERSE });
809
+ bst.addMany([1, 2, 3, 9, 8, 5, 6, 7, 4]);
810
+ expect(bst.isBST()).toBe(true);
811
+ });
812
+ });
813
+
798
814
  describe('BST Performance test', function () {
799
815
  const bst = new BST<number, number>();
800
816
  const inputSize = 10000; // Adjust input sizes as needed