data-structure-typed 1.40.0 → 1.41.1

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 (82) hide show
  1. package/CHANGELOG.md +2 -1
  2. package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
  3. package/dist/cjs/data-structures/binary-tree/binary-indexed-tree.js.map +1 -1
  4. package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +14 -3
  5. package/dist/cjs/data-structures/binary-tree/binary-tree.js +52 -10
  6. package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
  7. package/dist/cjs/data-structures/binary-tree/bst.d.ts +2 -2
  8. package/dist/cjs/data-structures/binary-tree/bst.js +3 -3
  9. package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
  10. package/dist/cjs/data-structures/binary-tree/rb-tree.d.ts +96 -9
  11. package/dist/cjs/data-structures/binary-tree/rb-tree.js +377 -12
  12. package/dist/cjs/data-structures/binary-tree/rb-tree.js.map +1 -1
  13. package/dist/cjs/data-structures/binary-tree/tree-multiset.js +2 -2
  14. package/dist/cjs/data-structures/binary-tree/tree-multiset.js.map +1 -1
  15. package/dist/cjs/data-structures/graph/abstract-graph.js.map +1 -1
  16. package/dist/cjs/data-structures/graph/directed-graph.js.map +1 -1
  17. package/dist/cjs/data-structures/graph/undirected-graph.js.map +1 -1
  18. package/dist/cjs/data-structures/hash/hash-map.js.map +1 -1
  19. package/dist/cjs/data-structures/hash/tree-map.js.map +1 -1
  20. package/dist/cjs/data-structures/hash/tree-set.js.map +1 -1
  21. package/dist/cjs/data-structures/heap/heap.js.map +1 -1
  22. package/dist/cjs/data-structures/heap/max-heap.js.map +1 -1
  23. package/dist/cjs/data-structures/heap/min-heap.js.map +1 -1
  24. package/dist/cjs/data-structures/linked-list/doubly-linked-list.js.map +1 -1
  25. package/dist/cjs/data-structures/linked-list/singly-linked-list.js.map +1 -1
  26. package/dist/cjs/data-structures/matrix/matrix.js.map +1 -1
  27. package/dist/cjs/data-structures/matrix/vector2d.js.map +1 -1
  28. package/dist/cjs/data-structures/priority-queue/max-priority-queue.js.map +1 -1
  29. package/dist/cjs/data-structures/priority-queue/min-priority-queue.js.map +1 -1
  30. package/dist/cjs/data-structures/priority-queue/priority-queue.js.map +1 -1
  31. package/dist/cjs/data-structures/queue/deque.js.map +1 -1
  32. package/dist/cjs/data-structures/queue/queue.js.map +1 -1
  33. package/dist/cjs/types/data-structures/binary-tree/rb-tree.d.ts +3 -7
  34. package/dist/cjs/types/data-structures/binary-tree/rb-tree.js +11 -6
  35. package/dist/cjs/types/data-structures/binary-tree/rb-tree.js.map +1 -1
  36. package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +14 -3
  37. package/dist/mjs/data-structures/binary-tree/binary-tree.js +51 -10
  38. package/dist/mjs/data-structures/binary-tree/bst.d.ts +2 -2
  39. package/dist/mjs/data-structures/binary-tree/bst.js +3 -3
  40. package/dist/mjs/data-structures/binary-tree/rb-tree.d.ts +96 -9
  41. package/dist/mjs/data-structures/binary-tree/rb-tree.js +382 -13
  42. package/dist/mjs/data-structures/binary-tree/tree-multiset.js +2 -2
  43. package/dist/mjs/types/data-structures/binary-tree/rb-tree.d.ts +3 -7
  44. package/dist/mjs/types/data-structures/binary-tree/rb-tree.js +11 -6
  45. package/dist/umd/data-structure-typed.min.js +1 -1
  46. package/dist/umd/data-structure-typed.min.js.map +1 -1
  47. package/package.json +9 -9
  48. package/src/data-structures/binary-tree/avl-tree.ts +3 -2
  49. package/src/data-structures/binary-tree/binary-indexed-tree.ts +1 -1
  50. package/src/data-structures/binary-tree/binary-tree.ts +87 -17
  51. package/src/data-structures/binary-tree/bst.ts +10 -7
  52. package/src/data-structures/binary-tree/rb-tree.ts +396 -349
  53. package/src/data-structures/binary-tree/tree-multiset.ts +4 -3
  54. package/src/data-structures/graph/abstract-graph.ts +11 -12
  55. package/src/data-structures/graph/directed-graph.ts +7 -6
  56. package/src/data-structures/graph/undirected-graph.ts +7 -6
  57. package/src/data-structures/hash/hash-map.ts +1 -1
  58. package/src/data-structures/hash/tree-map.ts +1 -2
  59. package/src/data-structures/hash/tree-set.ts +1 -2
  60. package/src/data-structures/heap/heap.ts +2 -2
  61. package/src/data-structures/heap/max-heap.ts +1 -1
  62. package/src/data-structures/heap/min-heap.ts +1 -1
  63. package/src/data-structures/linked-list/doubly-linked-list.ts +1 -1
  64. package/src/data-structures/linked-list/singly-linked-list.ts +1 -1
  65. package/src/data-structures/matrix/matrix.ts +1 -1
  66. package/src/data-structures/matrix/vector2d.ts +1 -2
  67. package/src/data-structures/priority-queue/max-priority-queue.ts +1 -1
  68. package/src/data-structures/priority-queue/min-priority-queue.ts +1 -1
  69. package/src/data-structures/priority-queue/priority-queue.ts +1 -1
  70. package/src/data-structures/queue/deque.ts +3 -4
  71. package/src/data-structures/queue/queue.ts +1 -1
  72. package/src/types/data-structures/binary-tree/rb-tree.ts +6 -6
  73. package/src/types/data-structures/matrix/navigator.ts +1 -1
  74. package/src/types/utils/utils.ts +1 -1
  75. package/src/types/utils/validate-type.ts +2 -2
  76. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +6 -6
  77. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +11 -11
  78. package/test/unit/data-structures/binary-tree/bst.test.ts +22 -20
  79. package/test/unit/data-structures/binary-tree/overall.test.ts +2 -2
  80. package/test/unit/data-structures/binary-tree/rb-tree.test.ts +248 -79
  81. package/test/unit/data-structures/binary-tree/tree-multiset.test.ts +8 -8
  82. package/test/utils/big-o.js +10 -0
@@ -1,109 +1,278 @@
1
- import {RBTree, RBTreeNode} from '../../../../src';
1
+ import {RBTreeNode, RedBlackTree, SN} from '../../../../src';
2
+ import {getRandomInt} from '../../../utils';
2
3
 
3
- describe('RBTreeNode', () => {
4
- it('should create an instance of RBTreeNode', () => {
5
- const node = new RBTreeNode<number>(1);
6
- expect(node).toBeInstanceOf(RBTreeNode);
4
+ describe('RedBlackTree', () => {
5
+ let tree: RedBlackTree;
6
+
7
+ beforeEach(() => {
8
+ tree = new RedBlackTree();
7
9
  });
8
10
 
9
- it('should set and get the ID correctly', () => {
10
- const node = new RBTreeNode<number>(1);
11
- expect(node.key).toBe(1);
11
+ describe('insert and getNode', () => {
12
+ test('should insert and find a node in the tree', () => {
13
+ tree.insert(10);
14
+ tree.insert(20);
15
+ tree.insert(5);
16
+
17
+ expect(tree.getNode(10)).toBeInstanceOf(RBTreeNode);
18
+ expect(tree.getNode(20)).toBeInstanceOf(RBTreeNode);
19
+ expect(tree.getNode(5)).toBeInstanceOf(RBTreeNode);
20
+ expect(tree.getNode(15)).toBe(null);
21
+ });
12
22
 
13
- node.key = 2;
14
- expect(node.key).toBe(2);
23
+ test('should insert and find nodes with negative keys', () => {
24
+ tree.insert(-10);
25
+ tree.insert(-20);
26
+
27
+ expect(tree.getNode(-10)).toBeInstanceOf(RBTreeNode);
28
+ expect(tree.getNode(-20)).toBeInstanceOf(RBTreeNode);
29
+ });
15
30
  });
16
31
 
17
- it('should set and get the value correctly', () => {
18
- const node: RBTreeNode<number> = new RBTreeNode<number>(1, 42);
19
- expect(node.value).toBe(42);
32
+ describe('deleteNode', () => {
33
+ test('should delete a node from the tree', () => {
34
+ tree.insert(10);
35
+ tree.insert(20);
36
+ tree.insert(5);
37
+ tree.delete(20);
38
+
39
+ expect(tree.getNode(20)).toBe(null);
40
+ });
20
41
 
21
- node.value = 55;
22
- expect(node.value).toBe(55);
42
+ test('should handle deleting a non-existent node', () => {
43
+ tree.insert(10);
44
+ tree.insert(20);
45
+ tree.insert(5);
46
+ tree.delete(15);
47
+
48
+ expect(tree.getNode(15)).toBe(null);
49
+ });
23
50
  });
24
51
 
25
- it('should set and get the left child correctly', () => {
26
- const node1 = new RBTreeNode<number>(1);
27
- const node2 = new RBTreeNode<number>(2);
52
+ describe('minimum', () => {
53
+ test('should find the minimum node in the tree', () => {
54
+ tree.insert(10);
55
+ tree.insert(20);
56
+ tree.insert(5);
57
+ tree.insert(15);
58
+ tree.insert(3);
28
59
 
29
- node1.left = node2;
60
+ const minNode = tree.getLeftMost(tree.root);
61
+ expect(minNode.key).toBe(3);
62
+ });
30
63
 
31
- expect(node1.left).toBe(node2);
32
- expect(node2.parent).toBe(node1);
64
+ test('should handle an empty tree', () => {
65
+ const minNode = tree.getLeftMost(tree.root);
66
+ expect(minNode).toBe(SN);
67
+ });
33
68
  });
34
69
 
35
- it('should set and get the right child correctly', () => {
36
- const node1 = new RBTreeNode<number>(1);
37
- const node2 = new RBTreeNode<number>(2);
70
+ describe('getRightMost', () => {
71
+ test('should find the getRightMost node in the tree', () => {
72
+ tree.insert(10);
73
+ tree.insert(20);
74
+ tree.insert(5);
75
+ tree.insert(15);
76
+ tree.insert(25);
38
77
 
39
- node1.right = node2;
78
+ const maxNode = tree.getRightMost(tree.root);
79
+ expect(maxNode.key).toBe(25);
80
+ });
40
81
 
41
- expect(node1.right).toBe(node2);
42
- expect(node2.parent).toBe(node1);
82
+ test('should handle an empty tree', () => {
83
+ const maxNode = tree.getRightMost(tree.root);
84
+ expect(maxNode).toBe(SN);
85
+ });
43
86
  });
44
87
 
45
- it('should set and get the parent correctly', () => {
46
- const node1 = new RBTreeNode<number>(1);
47
- const node2 = new RBTreeNode<number>(2);
88
+ describe('getSuccessor', () => {
89
+ test('should find the getSuccessor of a node', () => {
90
+ tree.insert(10);
91
+ tree.insert(20);
92
+ tree.insert(5);
93
+ tree.insert(15);
94
+ tree.insert(25);
95
+
96
+ const node = tree.getNode(15);
97
+ const successorNode = tree.getSuccessor(node);
48
98
 
49
- node1.left = node2;
99
+ expect(successorNode.key).toBe(20);
100
+ });
50
101
 
51
- expect(node2.parent).toBe(node1);
52
- expect(node1.left).toBe(node2);
102
+ test('should handle a node with no getSuccessor', () => {
103
+ tree.insert(10);
104
+ tree.insert(5);
105
+
106
+ const node = tree.getNode(10);
107
+ const successorNode = tree.getSuccessor(node);
108
+ // TODO not sure if it should be null or SN
109
+ expect(successorNode).toBe(null);
110
+ });
53
111
  });
54
112
 
55
- it('should determine family position correctly', () => {
56
- const root = new RBTreeNode<number>(1);
57
- const leftChild = new RBTreeNode<number>(2);
58
- const rightChild = new RBTreeNode<number>(3);
113
+ describe('getPredecessor', () => {
114
+ test('should find the getPredecessor of a node', () => {
115
+ tree.insert(10);
116
+ tree.insert(20);
117
+ tree.insert(5);
118
+ tree.insert(15);
119
+ tree.insert(25);
120
+
121
+ const node = tree.getNode(20);
122
+ const predecessorNode = tree.getPredecessor(node);
59
123
 
60
- root.left = leftChild;
61
- root.right = rightChild;
124
+ expect(predecessorNode.key).toBe(15);
125
+ });
62
126
 
63
- expect(leftChild.familyPosition).toBe('LEFT');
64
- expect(rightChild.familyPosition).toBe('RIGHT');
65
- expect(root.familyPosition).toBe('ROOT');
127
+ test('should handle a node with no getPredecessor', () => {
128
+ tree.insert(10);
129
+ tree.insert(20);
130
+
131
+ const node = tree.getNode(20);
132
+ const predecessorNode = tree.getPredecessor(node);
133
+ // TODO not sure if it should be SN or something else.
134
+ expect(predecessorNode).toBe(tree.getNode(10));
135
+ });
66
136
  });
67
137
  });
68
138
 
69
- describe('Red-Black Tree Tests', () => {
70
- let tree: RBTree<RBTreeNode<number>>;
139
+ describe('RedBlackTree', () => {
140
+ let tree: RedBlackTree;
71
141
 
72
142
  beforeEach(() => {
73
- tree = new RBTree<RBTreeNode<number>>();
74
- });
75
-
76
- test('Insertion and In-order Traverse', () => {
77
- tree.add(5);
78
- // tree.add(3);
79
- // tree.add(7);
80
- // tree.add(2);
81
- // tree.add(4);
82
- // tree.add(6);
83
- // tree.add(8);
84
- //
85
- // const inOrderTraverse: number[] = tree.DFS('in')
86
- //
87
- // expect(inOrderTraverse).toEqual([2, 3, 4, 5, 6, 7, 8]);
88
- });
89
-
90
- test('Deletion', () => {
91
- // tree.add(5);
92
- // tree.add(3);
93
- // tree.add(7);
94
- // tree.add(2);
95
- // tree.add(4);
96
- // tree.add(6);
97
- // tree.add(8);
98
- //
99
- // // Delete a node (e.g., 3) and check if it's gone
100
- // tree.delete(3);
101
- // expect(tree.has(3)).toBe(false);
102
- //
103
- // // Perform in-order traversal to check if the tree is still balanced
104
- // const inOrderTraverse: number[] = tree.DFS('in');
105
- //
106
- //
107
- // expect(inOrderTraverse).toEqual([2, 4, 5, 6, 7, 8]);
143
+ tree = new RedBlackTree();
144
+ });
145
+
146
+ it('should insert nodes into the tree', () => {
147
+ tree.insert(10);
148
+ expect(tree.getNode(10)).toBeDefined();
149
+ tree.insert(20);
150
+ expect(tree.getNode(20)).toBeDefined();
151
+ tree.insert(5);
152
+ expect(tree.getNode(5)).toBeDefined();
153
+ });
154
+
155
+ it('should delete nodes from the tree', () => {
156
+ tree.insert(10);
157
+ tree.insert(20);
158
+ tree.insert(5);
159
+ tree.delete(20);
160
+ expect(tree.getNode(20)).toBe(null);
161
+ });
162
+
163
+ it('should get the successor of a node', () => {
164
+ tree.insert(10);
165
+ tree.insert(20);
166
+ const node = tree.getNode(10);
167
+ const successor = tree.getSuccessor(node);
168
+ expect(successor?.key).toBe(20);
169
+ });
170
+
171
+ it('should get the predecessor of a node', () => {
172
+ tree.insert(10);
173
+ tree.insert(20);
174
+ const node = tree.getNode(20);
175
+ const predecessor = tree.getPredecessor(node);
176
+ expect(predecessor?.key).toBe(10);
177
+ });
178
+
179
+ it('should rotate nodes to the left', () => {
180
+ tree.insert(10);
181
+ tree.insert(20);
182
+ tree.insert(5);
183
+ const node = tree.getNode(10);
184
+ tree.insert(15);
185
+ // Verify that rotation has occurred
186
+ expect(node.left.key).toBe(5);
187
+ expect(node.right.key).toBe(20);
188
+ });
189
+
190
+ it('should rotate nodes to the right', () => {
191
+ tree.insert(10);
192
+ tree.insert(20);
193
+ tree.insert(5);
194
+ const node = tree.getNode(20);
195
+ tree.insert(25);
196
+ // Verify that rotation has occurred
197
+ expect(node.left.key).toBe(0);
198
+ expect(node.right.key).toBe(25);
199
+ });
200
+
201
+ it('should fix the tree after deletion', () => {
202
+ tree.insert(10);
203
+ tree.insert(20);
204
+ tree.insert(5);
205
+ tree.insert(15);
206
+ tree.delete(15);
207
+ // Verify that the tree is still valid
208
+ // You can add assertions to check the Red-Black Tree properties
209
+ });
210
+
211
+ it('should fix the tree after insertion', () => {
212
+ tree.insert(1);
213
+ tree.insert(2);
214
+ tree.insert(5);
215
+ tree.insert(15);
216
+ const node15F = tree.getNode(15);
217
+ expect(node15F.left).toBe(SN);
218
+ expect(node15F.right).toBe(SN);
219
+ expect(node15F.parent).toBe(tree.getNode(5));
220
+
221
+ tree.insert(25);
222
+ tree.insert(10);
223
+ tree.insert(8);
224
+ tree.insert(28);
225
+ tree.insert(111);
226
+ tree.insert(12);
227
+ tree.delete(2);
228
+ tree.insert(22);
229
+ tree.insert(50);
230
+ tree.insert(155);
231
+ tree.insert(225);
232
+ const node225F = tree.getNode(225);
233
+ expect(node225F.left).toBe(SN);
234
+ expect(node225F.right).toBe(SN);
235
+ expect(node225F.parent.key).toBe(155);
236
+ tree.insert(7);
237
+
238
+ const node15S = tree.getNode(15);
239
+ expect(node15S.left.key).toBe(8);
240
+ expect(node15S.right.key).toBe(28);
241
+ expect(node15S).toBe(tree.root);
242
+ expect(node15S.parent).toBe(null);
243
+ tree.delete(15);
244
+ expect(tree.root.key).toBe(22);
245
+ expect(tree.root.parent).toBe(null);
246
+
247
+ const node15T = tree.getNode(15);
248
+ expect(node15T).toBe(null);
249
+
250
+ tree.insert(23);
251
+ tree.insert(33);
252
+ tree.insert(15);
253
+
254
+ const nodeLM = tree.getLeftMost();
255
+ expect(nodeLM.key).toBe(1);
256
+
257
+ const node50 = tree.getNode(50);
258
+ expect(node50.key).toBe(50);
259
+ expect(node50.left.key).toBe(33);
260
+ expect(node50.right).toBe(SN);
261
+ const node15Fo = tree.getNode(15);
262
+
263
+ expect(node15Fo.key).toBe(15);
264
+ expect(node15Fo.left).toBe(SN);
265
+ const node225S = tree.getNode(225);
266
+ expect(node225S.left).toBe(SN);
267
+ expect(node225S.right).toBe(SN);
268
+ expect(node225S.parent.key).toBe(155);
269
+ expect(tree.getNode(0)).toBe(null);
270
+ });
271
+
272
+ it('should fix the tree after insertion and deletion', () => {
273
+ for (let i = 0; i < 1000; i++) {
274
+ tree.insert(getRandomInt(-100, 1000));
275
+ tree.delete(getRandomInt(-100, 1000));
276
+ }
108
277
  });
109
278
  });
@@ -23,10 +23,10 @@ describe('TreeMultiset operations test', () => {
23
23
 
24
24
  expect(treeMultiset.getHeight(6)).toBe(3);
25
25
  expect(treeMultiset.getDepth(6)).toBe(1);
26
- const nodeId10 = treeMultiset.get(10);
26
+ const nodeId10 = treeMultiset.getNode(10);
27
27
  expect(nodeId10?.key).toBe(10);
28
28
 
29
- const nodeVal9 = treeMultiset.get(9, node => node.value);
29
+ const nodeVal9 = treeMultiset.getNode(9, node => node.value);
30
30
  expect(nodeVal9?.key).toBe(9);
31
31
 
32
32
  const nodesByCount1 = treeMultiset.getNodes(1, node => node.count);
@@ -37,7 +37,7 @@ describe('TreeMultiset operations test', () => {
37
37
  const leftMost = treeMultiset.getLeftMost();
38
38
  expect(leftMost?.key).toBe(1);
39
39
 
40
- const node15 = treeMultiset.get(15);
40
+ const node15 = treeMultiset.getNode(15);
41
41
  const minNodeBySpecificNode = node15 && treeMultiset.getLeftMost(node15);
42
42
  expect(minNodeBySpecificNode?.key).toBe(12);
43
43
 
@@ -53,7 +53,7 @@ describe('TreeMultiset operations test', () => {
53
53
  const subTreeAdd = treeMultiset.subTreeTraverse((node: TreeMultisetNode<number>) => (node.count += 1), 15);
54
54
  expect(subTreeAdd);
55
55
  }
56
- const node11 = treeMultiset.get(11);
56
+ const node11 = treeMultiset.getNode(11);
57
57
  expect(node11 instanceof TreeMultisetNode);
58
58
  if (node11 instanceof TreeMultisetNode) {
59
59
  const allGreaterNodesAdded = treeMultiset.lesserOrGreaterTraverse(node => (node.count += 2), CP.gt, 11);
@@ -263,10 +263,10 @@ describe('TreeMultiset operations test recursively', () => {
263
263
 
264
264
  expect(treeMultiset.getHeight(6)).toBe(3);
265
265
  expect(treeMultiset.getDepth(6)).toBe(1);
266
- const nodeId10 = treeMultiset.get(10);
266
+ const nodeId10 = treeMultiset.getNode(10);
267
267
  expect(nodeId10?.key).toBe(10);
268
268
 
269
- const nodeVal9 = treeMultiset.get(9, node => node.value);
269
+ const nodeVal9 = treeMultiset.getNode(9, node => node.value);
270
270
  expect(nodeVal9?.key).toBe(9);
271
271
 
272
272
  const nodesByCount1 = treeMultiset.getNodes(1, node => node.count);
@@ -277,7 +277,7 @@ describe('TreeMultiset operations test recursively', () => {
277
277
  const leftMost = treeMultiset.getLeftMost();
278
278
  expect(leftMost?.key).toBe(1);
279
279
 
280
- const node15 = treeMultiset.get(15);
280
+ const node15 = treeMultiset.getNode(15);
281
281
  const minNodeBySpecificNode = node15 && treeMultiset.getLeftMost(node15);
282
282
  expect(minNodeBySpecificNode?.key).toBe(12);
283
283
 
@@ -293,7 +293,7 @@ describe('TreeMultiset operations test recursively', () => {
293
293
  const subTreeAdd = treeMultiset.subTreeTraverse((node: TreeMultisetNode<number>) => (node.count += 1), 15);
294
294
  expect(subTreeAdd);
295
295
  }
296
- const node11 = treeMultiset.get(11);
296
+ const node11 = treeMultiset.getNode(11);
297
297
  expect(node11 instanceof TreeMultisetNode);
298
298
  if (node11 instanceof TreeMultisetNode) {
299
299
  const allGreaterNodesAdded = treeMultiset.lesserOrGreaterTraverse(node => (node.count += 2), CP.gt, 11);
@@ -23,9 +23,11 @@ exports.bigO = {
23
23
  CUBED: Math.pow(exports.magnitude.SQUARED, 3) / 1000,
24
24
  FACTORIAL: 10000
25
25
  };
26
+
26
27
  function findPotentialN(input) {
27
28
  var longestArray = [];
28
29
  var mostProperties = {};
30
+
29
31
  function recurse(obj) {
30
32
  if (Array.isArray(obj)) {
31
33
  if (obj.length > longestArray.length) {
@@ -41,6 +43,7 @@ function findPotentialN(input) {
41
43
  });
42
44
  }
43
45
  }
46
+
44
47
  if (Array.isArray(input)) {
45
48
  input.forEach(function (item) {
46
49
  recurse(item);
@@ -51,6 +54,7 @@ function findPotentialN(input) {
51
54
  // return [longestArray, mostProperties] : [any[], { [key: string]: any }];
52
55
  return Math.max(longestArray.length, Object.keys(mostProperties).length);
53
56
  }
57
+
54
58
  function linearRegression(x, y) {
55
59
  var n = x.length;
56
60
  var sumX = x.reduce(function (acc, val) {
@@ -87,6 +91,7 @@ function linearRegression(x, y) {
87
91
  var rSquared = 1 - totalVariation / explainedVariation;
88
92
  return {slope: slope, intercept: intercept, rSquared: rSquared};
89
93
  }
94
+
90
95
  function estimateBigO(runtimes, dataSizes) {
91
96
  // Make sure the input runtimes and data sizes have the same length
92
97
  if (runtimes.length !== dataSizes.length) {
@@ -137,7 +142,9 @@ function estimateBigO(runtimes, dataSizes) {
137
142
  return complexities.join(' or ');
138
143
  }
139
144
  }
145
+
140
146
  var methodLogs = new Map();
147
+
141
148
  function logBigOMetricsWrap(fn, args, fnName) {
142
149
  var startTime = performance.now();
143
150
  var result = fn(args);
@@ -169,7 +176,9 @@ function logBigOMetricsWrap(fn, args, fnName) {
169
176
  }
170
177
  return result;
171
178
  }
179
+
172
180
  exports.logBigOMetricsWrap = logBigOMetricsWrap;
181
+
173
182
  function logBigOMetrics(target, propertyKey, descriptor) {
174
183
  var originalMethod = descriptor.value;
175
184
  descriptor.value = function () {
@@ -209,4 +218,5 @@ function logBigOMetrics(target, propertyKey, descriptor) {
209
218
  };
210
219
  return descriptor;
211
220
  }
221
+
212
222
  exports.logBigOMetrics = logBigOMetrics;