data-structure-typed 1.53.0 → 1.53.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.
- package/CHANGELOG.md +1 -1
- package/benchmark/report.html +1 -37
- package/benchmark/report.json +23 -383
- package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js +1 -1
- package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/avl-tree.js +1 -1
- package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/binary-tree.js +2 -2
- package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/bst.js +5 -3
- package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/rb-tree.js +7 -3
- package/dist/cjs/data-structures/binary-tree/rb-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/tree-multi-map.js +1 -1
- package/dist/cjs/data-structures/binary-tree/tree-multi-map.js.map +1 -1
- package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.js +1 -1
- package/dist/mjs/data-structures/binary-tree/avl-tree.js +1 -1
- package/dist/mjs/data-structures/binary-tree/binary-tree.js +2 -2
- package/dist/mjs/data-structures/binary-tree/bst.js +5 -3
- package/dist/mjs/data-structures/binary-tree/rb-tree.js +7 -3
- package/dist/mjs/data-structures/binary-tree/tree-multi-map.js +1 -1
- package/dist/umd/data-structure-typed.js +16 -10
- package/dist/umd/data-structure-typed.min.js +2 -2
- package/dist/umd/data-structure-typed.min.js.map +1 -1
- package/package.json +6 -6
- package/src/data-structures/binary-tree/avl-tree-multi-map.ts +1 -1
- package/src/data-structures/binary-tree/avl-tree.ts +1 -1
- package/src/data-structures/binary-tree/binary-tree.ts +2 -2
- package/src/data-structures/binary-tree/bst.ts +4 -3
- package/src/data-structures/binary-tree/rb-tree.ts +7 -2
- package/src/data-structures/binary-tree/tree-multi-map.ts +1 -1
- package/src/types/data-structures/binary-tree/binary-tree.ts +3 -3
- package/src/types/data-structures/binary-tree/bst.ts +1 -1
- package/test/performance/data-structures/binary-tree/avl-tree.test.ts +1 -1
- package/test/performance/data-structures/binary-tree/binary-tree-overall.test.ts +2 -2
- package/test/performance/data-structures/binary-tree/binary-tree.test.ts +1 -1
- package/test/performance/data-structures/binary-tree/bst.test.ts +1 -1
- package/test/performance/data-structures/binary-tree/rb-tree.test.ts +9 -1
- package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +8 -8
- package/test/unit/data-structures/binary-tree/avl-tree.test.ts +28 -9
- package/test/unit/data-structures/binary-tree/binary-tree.test.ts +36 -22
- package/test/unit/data-structures/binary-tree/bst.test.ts +33 -14
- package/test/unit/data-structures/binary-tree/rb-tree.test.ts +19 -0
- package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +11 -11
- package/test/utils/array.ts +15 -12
|
@@ -182,6 +182,25 @@ describe('RedBlackTree 1', () => {
|
|
|
182
182
|
expect(rbTree.size).toBe(4);
|
|
183
183
|
expect(cloned.size).toBe(3);
|
|
184
184
|
});
|
|
185
|
+
|
|
186
|
+
it('should replace value', () => {
|
|
187
|
+
const tree = new RedBlackTree<number, string>([4, 5, [1, '1'], 2, 3], { isMapMode: false });
|
|
188
|
+
expect(tree.get(1)).toBe('1');
|
|
189
|
+
expect(tree.getNode(1)?.value).toBe('1');
|
|
190
|
+
tree.add(1, 'a');
|
|
191
|
+
expect(tree.get(1)).toBe('a');
|
|
192
|
+
tree.add([1, 'b']);
|
|
193
|
+
expect(tree.getNode(1)?.value).toBe('b');
|
|
194
|
+
expect(tree.get(1)).toBe('b');
|
|
195
|
+
const treeMap = new RedBlackTree<number>([4, 5, [1, '1'], 2, 3]);
|
|
196
|
+
expect(treeMap.get(1)).toBe('1');
|
|
197
|
+
expect(treeMap.getNode(1)?.value).toBe(undefined);
|
|
198
|
+
treeMap.add(1, 'a');
|
|
199
|
+
expect(treeMap.get(1)).toBe('a');
|
|
200
|
+
treeMap.add([1, 'b']);
|
|
201
|
+
expect(treeMap.getNode(1)?.value).toBe(undefined);
|
|
202
|
+
expect(treeMap.get(1)).toBe('b');
|
|
203
|
+
});
|
|
185
204
|
});
|
|
186
205
|
|
|
187
206
|
describe('RedBlackTree 2', () => {
|
|
@@ -133,7 +133,7 @@ describe('TreeMultiMap operations test1', () => {
|
|
|
133
133
|
const nodeId10 = tmm.getNode(10);
|
|
134
134
|
expect(nodeId10?.key).toBe(10);
|
|
135
135
|
|
|
136
|
-
const nodeVal9 = tmm.getNode(node => node.
|
|
136
|
+
const nodeVal9 = tmm.getNode(node => node.key === 9);
|
|
137
137
|
expect(nodeVal9?.key).toBe(9);
|
|
138
138
|
|
|
139
139
|
const nodesByCount1 = tmm.getNodes(node => node.count === 1);
|
|
@@ -391,7 +391,7 @@ describe('TreeMultiMap operations test recursively1', () => {
|
|
|
391
391
|
const nodeId10 = tmm.getNode(10);
|
|
392
392
|
expect(nodeId10?.key).toBe(10);
|
|
393
393
|
|
|
394
|
-
const nodeVal9 = tmm.getNode(node => node.
|
|
394
|
+
const nodeVal9 = tmm.getNode(node => node.key === 9);
|
|
395
395
|
expect(nodeVal9?.key).toBe(9);
|
|
396
396
|
|
|
397
397
|
const nodesByCount1 = tmm.getNodes(node => node.count === 1);
|
|
@@ -837,10 +837,10 @@ describe('TreeMultiMap iterative methods test', () => {
|
|
|
837
837
|
});
|
|
838
838
|
});
|
|
839
839
|
|
|
840
|
-
describe('TreeMultiMap count map mode', () => {
|
|
840
|
+
describe('TreeMultiMap count not map mode', () => {
|
|
841
841
|
let tmm: TreeMultiMap<number>;
|
|
842
842
|
beforeEach(() => {
|
|
843
|
-
tmm = new TreeMultiMap<number>([], { isMapMode:
|
|
843
|
+
tmm = new TreeMultiMap<number>([], { isMapMode: false });
|
|
844
844
|
});
|
|
845
845
|
|
|
846
846
|
it('Should added node count ', () => {
|
|
@@ -860,9 +860,9 @@ describe('TreeMultiMap count map mode', () => {
|
|
|
860
860
|
});
|
|
861
861
|
});
|
|
862
862
|
|
|
863
|
-
describe('TreeMultiMap operations test1 map mode', () => {
|
|
863
|
+
describe('TreeMultiMap operations test1 not map mode', () => {
|
|
864
864
|
it('should perform various operations on a Binary Search Tree with numeric values1', () => {
|
|
865
|
-
const tmm = new TreeMultiMap<number, number>([], { isMapMode:
|
|
865
|
+
const tmm = new TreeMultiMap<number, number>([], { isMapMode: false });
|
|
866
866
|
|
|
867
867
|
expect(tmm instanceof TreeMultiMap);
|
|
868
868
|
|
|
@@ -907,11 +907,11 @@ describe('TreeMultiMap operations test1 map mode', () => {
|
|
|
907
907
|
});
|
|
908
908
|
});
|
|
909
909
|
|
|
910
|
-
describe('TreeMultiMap operations test recursively1 map mode', () => {
|
|
910
|
+
describe('TreeMultiMap operations test recursively1 not map mode', () => {
|
|
911
911
|
it('should perform various operations on a Binary Search Tree with numeric values1', () => {
|
|
912
912
|
const tmm = new TreeMultiMap<number>([], {
|
|
913
913
|
iterationType: 'RECURSIVE',
|
|
914
|
-
isMapMode:
|
|
914
|
+
isMapMode: false
|
|
915
915
|
});
|
|
916
916
|
|
|
917
917
|
expect(tmm instanceof TreeMultiMap);
|
|
@@ -956,10 +956,10 @@ describe('TreeMultiMap operations test recursively1 map mode', () => {
|
|
|
956
956
|
});
|
|
957
957
|
});
|
|
958
958
|
|
|
959
|
-
describe('TreeMultiMap iterative methods
|
|
959
|
+
describe('TreeMultiMap iterative methods test not map mode', () => {
|
|
960
960
|
let treeMM: TreeMultiMap<number, string>;
|
|
961
961
|
beforeEach(() => {
|
|
962
|
-
treeMM = new TreeMultiMap<number, string>([], { isMapMode:
|
|
962
|
+
treeMM = new TreeMultiMap<number, string>([], { isMapMode: false });
|
|
963
963
|
treeMM.add(1, 'a', 10);
|
|
964
964
|
treeMM.add([2, 'b'], undefined, 10);
|
|
965
965
|
treeMM.add([3, 'c'], undefined, 1);
|
|
@@ -970,6 +970,6 @@ describe('TreeMultiMap iterative methods testm ap mode', () => {
|
|
|
970
970
|
expect(treeMM.getComputedCount()).toBe(21);
|
|
971
971
|
const cloned = treeMM.clone();
|
|
972
972
|
expect(cloned.root?.left?.key).toBe(1);
|
|
973
|
-
expect(cloned.get(cloned.root?.right)).toBe(
|
|
973
|
+
expect(cloned.get(cloned.root?.right)).toBe(undefined);
|
|
974
974
|
});
|
|
975
975
|
});
|
package/test/utils/array.ts
CHANGED
|
@@ -1,19 +1,22 @@
|
|
|
1
1
|
import { getRandomInt } from './number';
|
|
2
2
|
|
|
3
|
-
export function getRandomIntArray(length: number = 1000, min: number = -1000, max: number = 1000,
|
|
4
|
-
if (
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
while (ans.length < length) {
|
|
8
|
-
const num = getRandomInt(min, max);
|
|
9
|
-
if (!set.has(num)) {
|
|
10
|
-
ans.push(num);
|
|
11
|
-
set.add(num);
|
|
12
|
-
}
|
|
3
|
+
export function getRandomIntArray(length: number = 1000, min: number = -1000, max: number = 1000, unique = true) {
|
|
4
|
+
if (unique) {
|
|
5
|
+
if (max - min + 1 < length) {
|
|
6
|
+
throw new Error("Range too small for unique values with the specified length");
|
|
13
7
|
}
|
|
14
|
-
|
|
8
|
+
|
|
9
|
+
const allNumbers = Array.from({ length: max - min + 1 }, (_, i) => i + min);
|
|
10
|
+
|
|
11
|
+
for (let i = allNumbers.length - 1; i > 0; i--) {
|
|
12
|
+
const j = Math.floor(Math.random() * (i + 1));
|
|
13
|
+
[allNumbers[i], allNumbers[j]] = [allNumbers[j], allNumbers[i]];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
return allNumbers.slice(0, length);
|
|
17
|
+
} else {
|
|
18
|
+
return Array.from({ length }, () => Math.floor(Math.random() * (max - min + 1)) + min);
|
|
15
19
|
}
|
|
16
|
-
return new Array<number>(length).fill(0).map(() => getRandomInt(min, max));
|
|
17
20
|
}
|
|
18
21
|
|
|
19
22
|
const words = [
|