data-structure-typed 1.44.0 → 1.44.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/README.md +15 -15
- package/benchmark/report.html +30 -30
- package/benchmark/report.json +152 -206
- package/dist/cjs/types/data-structures/graph/directed-graph.d.ts +0 -5
- package/dist/cjs/types/data-structures/graph/directed-graph.js +0 -7
- package/dist/cjs/types/data-structures/graph/directed-graph.js.map +1 -1
- package/dist/mjs/types/data-structures/graph/directed-graph.d.ts +0 -5
- package/dist/mjs/types/data-structures/graph/directed-graph.js +1 -6
- package/dist/umd/data-structure-typed.js +0 -9
- package/dist/umd/data-structure-typed.min.js +1 -1
- package/dist/umd/data-structure-typed.min.js.map +1 -1
- package/package.json +8 -6
- package/src/types/data-structures/graph/directed-graph.ts +0 -6
- package/test/config.ts +1 -1
- package/test/integration/all-in-one.ts +110 -0
- package/test/performance/reportor.ts +2 -2
- package/test/unit/data-structures/binary-tree/rb-tree.test.ts +2 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "data-structure-typed",
|
|
3
|
-
"version": "1.44.
|
|
3
|
+
"version": "1.44.1",
|
|
4
4
|
"description": "Data Structures of Javascript & TypeScript. Binary Tree, BST, Graph, Heap, Priority Queue, Linked List, Queue, Deque, Stack, AVL Tree, Tree Multiset, Trie, Directed Graph, Undirected Graph, Singly Linked List, Doubly Linked List, Max Heap, Max Priority Queue, Min Heap, Min Priority Queue.",
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
6
|
"module": "dist/mjs/index.js",
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
"build:umd": "tsup",
|
|
21
21
|
"build:docs": "typedoc --out docs ./src",
|
|
22
22
|
"test:unit": "jest --runInBand",
|
|
23
|
+
"test": "npm run test:unit",
|
|
23
24
|
"test:integration": "npm run update:subs && jest --config jest.integration.config.js",
|
|
24
25
|
"test:perf": "ts-node test/performance/reportor.ts",
|
|
25
26
|
"check": "tsc --noEmit",
|
|
@@ -32,7 +33,7 @@
|
|
|
32
33
|
"format:test": "prettier --write 'test/**/*.{js,ts}'",
|
|
33
34
|
"format": "npm run format:src && npm run format:test",
|
|
34
35
|
"ci": "env && git fetch --tags && npm run check && npm run lint && npm run build && npm run test:unit && npm run changelog",
|
|
35
|
-
"update:subs": "npm i avl-tree-typed binary-tree-typed bst-typed heap-typed --save-dev",
|
|
36
|
+
"update:subs": "npm i avl-tree-typed binary-tree-typed bst-typed heap-typed data-structure-typed --save-dev",
|
|
36
37
|
"install:all-subs": "npm i avl-tree-typed binary-tree-typed bst-typed deque-typed directed-graph-typed doubly-linked-list-typed graph-typed heap-typed linked-list-typed max-heap-typed max-priority-queue-typed min-heap-typed min-priority-queue-typed priority-queue-typed singly-linked-list-typed stack-typed tree-multimap-typed trie-typed undirected-graph-typed queue-typed --save-dev",
|
|
37
38
|
"changelog": "auto-changelog",
|
|
38
39
|
"coverage:badge": "istanbul-badges-readme",
|
|
@@ -63,10 +64,11 @@
|
|
|
63
64
|
"@typescript-eslint/eslint-plugin": "^6.7.4",
|
|
64
65
|
"@typescript-eslint/parser": "^6.7.4",
|
|
65
66
|
"auto-changelog": "^2.4.0",
|
|
66
|
-
"avl-tree-typed": "^1.
|
|
67
|
+
"avl-tree-typed": "^1.44.0",
|
|
67
68
|
"benchmark": "^2.1.4",
|
|
68
|
-
"binary-tree-typed": "^1.
|
|
69
|
-
"bst-typed": "^1.
|
|
69
|
+
"binary-tree-typed": "^1.44.0",
|
|
70
|
+
"bst-typed": "^1.44.0",
|
|
71
|
+
"data-structure-typed": "^1.44.0",
|
|
70
72
|
"dependency-cruiser": "^14.1.0",
|
|
71
73
|
"eslint": "^8.50.0",
|
|
72
74
|
"eslint-config-prettier": "^9.0.0",
|
|
@@ -74,7 +76,7 @@
|
|
|
74
76
|
"eslint-import-resolver-typescript": "^3.6.1",
|
|
75
77
|
"eslint-plugin-import": "^2.28.1",
|
|
76
78
|
"fast-glob": "^3.3.1",
|
|
77
|
-
"heap-typed": "^1.
|
|
79
|
+
"heap-typed": "^1.44.0",
|
|
78
80
|
"istanbul-badges-readme": "^1.8.5",
|
|
79
81
|
"jest": "^29.7.0",
|
|
80
82
|
"js-sdsl": "^4.4.2",
|
package/test/config.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export const isDebugTest: boolean = false;
|
|
2
|
-
export const isCompetitor: boolean =
|
|
2
|
+
export const isCompetitor: boolean = true;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import {AVLTree, CP} from 'data-structure-typed';
|
|
2
|
+
|
|
3
|
+
describe('AVL Tree Test from data-structure-typed', () => {
|
|
4
|
+
it('should perform various operations on a AVL Tree from data-structure-typed', () => {
|
|
5
|
+
const keys = [11, 3, 15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5];
|
|
6
|
+
const tree = new AVLTree();
|
|
7
|
+
|
|
8
|
+
for (const i of keys) tree.add(i, i);
|
|
9
|
+
|
|
10
|
+
const node6 = tree.get(6);
|
|
11
|
+
|
|
12
|
+
expect(node6 && tree.getHeight(node6)).toBe(3);
|
|
13
|
+
expect(node6 && tree.getDepth(node6)).toBe(1);
|
|
14
|
+
|
|
15
|
+
const getValueById = tree.get(10);
|
|
16
|
+
expect(getValueById).toBe(10);
|
|
17
|
+
|
|
18
|
+
const getMinNodeByRoot = tree.getLeftMost();
|
|
19
|
+
expect(getMinNodeByRoot?.key).toBe(1);
|
|
20
|
+
|
|
21
|
+
const node15 = tree.getNode(15);
|
|
22
|
+
const getMinNodeBySpecificNode = node15 && tree.getLeftMost(node15);
|
|
23
|
+
expect(getMinNodeBySpecificNode?.key).toBe(12);
|
|
24
|
+
|
|
25
|
+
let subTreeSum = 0;
|
|
26
|
+
node15 && tree.subTreeTraverse(node => (subTreeSum += node.key), 15);
|
|
27
|
+
expect(subTreeSum).toBe(70);
|
|
28
|
+
|
|
29
|
+
let lesserSum = 0;
|
|
30
|
+
tree.lesserOrGreaterTraverse(node => (lesserSum += node.key), CP.lt, 10);
|
|
31
|
+
expect(lesserSum).toBe(45);
|
|
32
|
+
|
|
33
|
+
// node15 has type problem. After the uniform design, the generics of containers (DirectedGraph, BST) are based on the type of value. However, this design has a drawback: when I attempt to inherit from the Vertex or BSTNode classes, the types of the results obtained by all methods are those of the parent class.
|
|
34
|
+
expect(node15?.value).toBe(15);
|
|
35
|
+
|
|
36
|
+
const dfs = tree.dfs(node => node, 'in');
|
|
37
|
+
expect(dfs[0].key).toBe(1);
|
|
38
|
+
expect(dfs[dfs.length - 1].key).toBe(16);
|
|
39
|
+
|
|
40
|
+
tree.perfectlyBalance();
|
|
41
|
+
const bfs = tree.bfs(node => node);
|
|
42
|
+
expect(tree.isPerfectlyBalanced()).toBe(true);
|
|
43
|
+
expect(bfs[0].key).toBe(8);
|
|
44
|
+
expect(bfs[bfs.length - 1].key).toBe(16);
|
|
45
|
+
|
|
46
|
+
expect(tree.delete(11)[0].deleted?.key).toBe(11);
|
|
47
|
+
expect(tree.isAVLBalanced()).toBe(true);
|
|
48
|
+
expect(node15 && tree.getHeight(node15)).toBe(2);
|
|
49
|
+
|
|
50
|
+
expect(tree.delete(1)[0].deleted?.key).toBe(1);
|
|
51
|
+
expect(tree.isAVLBalanced()).toBe(true);
|
|
52
|
+
expect(tree.getHeight()).toBe(4);
|
|
53
|
+
|
|
54
|
+
expect(tree.delete(4)[0].deleted?.key).toBe(4);
|
|
55
|
+
expect(tree.isAVLBalanced()).toBe(true);
|
|
56
|
+
expect(tree.getHeight()).toBe(4);
|
|
57
|
+
|
|
58
|
+
expect(tree.delete(10)[0].deleted?.key).toBe(10);
|
|
59
|
+
expect(tree.isAVLBalanced()).toBe(true);
|
|
60
|
+
expect(tree.getHeight()).toBe(3);
|
|
61
|
+
|
|
62
|
+
expect(tree.delete(15)[0].deleted?.key).toBe(15);
|
|
63
|
+
expect(tree.isAVLBalanced()).toBe(true);
|
|
64
|
+
|
|
65
|
+
expect(tree.getHeight()).toBe(3);
|
|
66
|
+
|
|
67
|
+
expect(tree.delete(5)[0].deleted?.key).toBe(5);
|
|
68
|
+
expect(tree.isAVLBalanced()).toBe(true);
|
|
69
|
+
expect(tree.getHeight()).toBe(3);
|
|
70
|
+
|
|
71
|
+
expect(tree.delete(13)[0].deleted?.key).toBe(13);
|
|
72
|
+
expect(tree.isAVLBalanced()).toBe(true);
|
|
73
|
+
expect(tree.getHeight()).toBe(3);
|
|
74
|
+
|
|
75
|
+
expect(tree.delete(3)[0].deleted?.key).toBe(3);
|
|
76
|
+
expect(tree.isAVLBalanced()).toBe(true);
|
|
77
|
+
expect(tree.getHeight()).toBe(3);
|
|
78
|
+
|
|
79
|
+
expect(tree.delete(8)[0].deleted?.key).toBe(8);
|
|
80
|
+
expect(tree.isAVLBalanced()).toBe(true);
|
|
81
|
+
expect(tree.getHeight()).toBe(3);
|
|
82
|
+
|
|
83
|
+
expect(tree.delete(6)[0].deleted?.key).toBe(6);
|
|
84
|
+
expect(tree.delete(6).length).toBe(0);
|
|
85
|
+
expect(tree.isAVLBalanced()).toBe(true);
|
|
86
|
+
expect(tree.getHeight()).toBe(2);
|
|
87
|
+
|
|
88
|
+
expect(tree.delete(7)[0].deleted?.key).toBe(7);
|
|
89
|
+
expect(tree.isAVLBalanced()).toBe(true);
|
|
90
|
+
expect(tree.getHeight()).toBe(2);
|
|
91
|
+
|
|
92
|
+
expect(tree.delete(9)[0].deleted?.key).toBe(9);
|
|
93
|
+
expect(tree.isAVLBalanced()).toBe(true);
|
|
94
|
+
expect(tree.getHeight()).toBe(2);
|
|
95
|
+
expect(tree.delete(14)[0].deleted?.key).toBe(14);
|
|
96
|
+
expect(tree.isAVLBalanced()).toBe(true);
|
|
97
|
+
expect(tree.getHeight()).toBe(1);
|
|
98
|
+
|
|
99
|
+
expect(tree.isAVLBalanced()).toBe(true);
|
|
100
|
+
const lastBFSIds = tree.bfs();
|
|
101
|
+
expect(lastBFSIds[0]).toBe(12);
|
|
102
|
+
expect(lastBFSIds[1]).toBe(2);
|
|
103
|
+
expect(lastBFSIds[2]).toBe(16);
|
|
104
|
+
|
|
105
|
+
const lastBFSNodes = tree.bfs(node => node);
|
|
106
|
+
expect(lastBFSNodes[0].key).toBe(12);
|
|
107
|
+
expect(lastBFSNodes[1].key).toBe(2);
|
|
108
|
+
expect(lastBFSNodes[2].key).toBe(16);
|
|
109
|
+
});
|
|
110
|
+
});
|
|
@@ -107,7 +107,7 @@ const composeReport = () => {
|
|
|
107
107
|
htmlTables // New content to be inserted
|
|
108
108
|
);
|
|
109
109
|
fs.writeFileSync(htmlFilePath, html);
|
|
110
|
-
console.log(`Performance ${BOLD}${GREEN}report${END} file generated`);
|
|
110
|
+
console.log(`Performance ${BOLD}${GREEN}report${END} file generated in ${BOLD}${GREEN}${reportDistPath}${END}`);
|
|
111
111
|
};
|
|
112
112
|
|
|
113
113
|
function replaceMarkdownContent(startMarker: string, endMarker: string, newText: string) {
|
|
@@ -135,7 +135,7 @@ function replaceMarkdownContent(startMarker: string, endMarker: string, newText:
|
|
|
135
135
|
if (err) {
|
|
136
136
|
console.error(`Unable to write to ${filePath}:`, err);
|
|
137
137
|
} else {
|
|
138
|
-
console.log(`The content has been successfully replaced in ${filePath}
|
|
138
|
+
console.log(`The content has been successfully replaced in ${BOLD}${GREEN}${filePath}!${END}`);
|
|
139
139
|
}
|
|
140
140
|
});
|
|
141
141
|
});
|
|
@@ -478,13 +478,13 @@ describe('RedBlackTree', () => {
|
|
|
478
478
|
for (let i = 0; i < arr.length; i++) {
|
|
479
479
|
tree.add(arr[i]);
|
|
480
480
|
}
|
|
481
|
-
console.log(performance.now() - tS);
|
|
481
|
+
isDebug && console.log(performance.now() - tS);
|
|
482
482
|
|
|
483
483
|
const cS = performance.now();
|
|
484
484
|
|
|
485
485
|
for (let i = 0; i < arr.length; i++) {
|
|
486
486
|
competitor.setElement(arr[i], arr[i]);
|
|
487
487
|
}
|
|
488
|
-
console.log(performance.now() - cS);
|
|
488
|
+
isDebug && console.log(performance.now() - cS);
|
|
489
489
|
});
|
|
490
490
|
});
|