From 46cdf2b668e3de3e0f425c73d09604f7acd28fda Mon Sep 17 00:00:00 2001 From: Revone Date: Sun, 14 Jan 2024 20:57:07 +0800 Subject: [PATCH] release: 1.50.9 --- CHANGELOG.md | 2 +- README.md | 124 +++++++++--------- package-lock.json | 52 ++++---- package.json | 14 +- test/integration/avl-tree.test.ts | 2 +- test/integration/bst.test.ts | 4 +- .../binary-tree/avl-tree.test.ts | 35 ++--- 7 files changed, 118 insertions(+), 115 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b8288c..15df49a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ All notable changes to this project will be documented in this file. - [Semantic Versioning](https://semver.org/spec/v2.0.0.html) - [`auto-changelog`](https://github.com/CookPete/auto-changelog) -## [v1.50.8](https://github.com/zrwusa/data-structure-typed/compare/v1.35.0...main) (upcoming) +## [v1.50.9](https://github.com/zrwusa/data-structure-typed/compare/v1.35.0...main) (upcoming) ### Changes diff --git a/README.md b/README.md index 49d2f8b..1edd0c8 100644 --- a/README.md +++ b/README.md @@ -667,6 +667,67 @@ Array.from(dijkstraResult?.seen ?? []).map(vertex => vertex.key) // ['A', 'B', ' +## Benchmark + +MacBook Pro (15-inch, 2018) + +Processor 2.2 GHz 6-Core Intel Core i7 + +Memory 16 GB 2400 MHz DDR4 + +Graphics Radeon Pro 555X 4 GB + +Intel UHD Graphics 630 1536 MB + +macOS Big Sur + +Version 11.7.9 + + +[//]: # (No deletion!!! Start of Replace Section) +
+
heap
+
test nametime taken (ms)executions per secsample deviation
100,000 add6.58152.073.13e-4
100,000 add & poll35.6728.030.01
+
+
rb-tree
+
test nametime taken (ms)executions per secsample deviation
100,000 add55.9117.890.01
100,000 get125.117.990.01
100,000 iterator27.9735.760.01
100,000 add & delete orderly125.068.000.00
100,000 add & delete randomly242.784.120.01
+
+
queue
+
test nametime taken (ms)executions per secsample deviation
1,000,000 push44.8122.320.01
100,000 push & shift4.99200.397.40e-4
Native JS Array 100,000 push & shift2234.970.450.19
+
+
deque
+
test nametime taken (ms)executions per secsample deviation
1,000,000 push24.3441.080.01
1,000,000 push & pop31.4131.830.00
1,000,000 push & shift31.1232.130.00
100,000 push & shift3.27306.172.62e-4
Native JS Array 100,000 push & shift2362.950.420.12
100,000 unshift & shift2.89345.463.23e-4
Native JS Array 100,000 unshift & shift4313.810.230.13
+
+
hash-map
+
test nametime taken (ms)executions per secsample deviation
1,000,000 set118.818.420.02
Native JS Map 1,000,000 set218.244.580.02
Native JS Set 1,000,000 add180.645.540.03
1,000,000 set & get121.238.250.01
Native JS Map 1,000,000 set & get273.713.650.01
Native JS Set 1,000,000 add & has173.695.760.01
1,000,000 ObjKey set & get331.893.010.04
Native JS Map 1,000,000 ObjKey set & get331.493.020.05
Native JS Set 1,000,000 ObjKey add & has308.153.250.04
+
+
trie
+
test nametime taken (ms)executions per secsample deviation
100,000 push58.7817.010.02
100,000 getWords95.9910.420.01
+
+
avl-tree
+
test nametime taken (ms)executions per secsample deviation
10,000 add randomly50.1719.930.01
10,000 get20.8647.940.00
10,000 add & delete randomly79.1812.630.00
10,000 addMany52.9218.900.00
+
+
binary-tree-overall
+
test nametime taken (ms)executions per secsample deviation
10,000 RBTree add5.69175.825.70e-4
10,000 RBTree add & delete randomly19.9450.160.00
10,000 RBTree get0.651543.771.81e-5
10,000 AVLTree add44.4622.490.00
10,000 AVLTree get20.0749.840.00
10,000 AVLTree add & delete randomly77.2912.940.01
+
+
directed-graph
+
test nametime taken (ms)executions per secsample deviation
1,000 addVertex0.109883.759.48e-7
1,000 addEdge6.05165.151.08e-4
1,000 getVertex0.052.15e+45.74e-7
1,000 getEdge23.5842.410.00
tarjan208.844.790.01
topologicalSort180.275.550.00
+
+
doubly-linked-list
+
test nametime taken (ms)executions per secsample deviation
1,000,000 push208.914.790.07
1,000,000 unshift202.734.930.03
1,000,000 unshift & shift182.705.470.06
1,000,000 addBefore314.163.180.06
+
+
singly-linked-list
+
test nametime taken (ms)executions per secsample deviation
1,000,000 push & shift207.944.810.05
10,000 push & pop216.074.630.01
10,000 addBefore246.194.060.00
+
+
priority-queue
+
test nametime taken (ms)executions per secsample deviation
100,000 add27.0037.042.43e-4
100,000 add & poll77.1612.960.00
+
+
stack
+
test nametime taken (ms)executions per secsample deviation
1,000,000 push39.2925.450.00
1,000,000 push & pop48.0520.810.00
+
+ +[//]: # (No deletion!!! End of Replace Section) + ## The corresponding relationships between data structures in different language standard libraries. @@ -982,69 +1043,6 @@ concurrently.
-## Benchmark - -MacBook Pro (15-inch, 2018) - -Processor 2.2 GHz 6-Core Intel Core i7 - -Memory 16 GB 2400 MHz DDR4 - -Graphics Radeon Pro 555X 4 GB - -Intel UHD Graphics 630 1536 MB - -macOS Big Sur - -Version 11.7.9 - - -[//]: # (No deletion!!! Start of Replace Section) -
-
heap
-
test nametime taken (ms)executions per secsample deviation
100,000 add6.46154.913.36e-4
100,000 add & poll31.6231.628.04e-4
-
-
rb-tree
-
test nametime taken (ms)executions per secsample deviation
100,000 add92.8610.770.00
100,000 get112.398.908.37e-4
100,000 iterator30.5632.720.00
100,000 add & delete orderly175.065.710.02
100,000 add & delete randomly263.483.800.00
-
- -
-
queue
-
test nametime taken (ms)executions per secsample deviation
1,000,000 push44.0722.690.01
100,000 push & shift4.89204.655.60e-4
Native JS Array 100,000 push & shift2305.440.430.31
-
-
deque
-
test nametime taken (ms)executions per secsample deviation
1,000,000 push24.6940.500.00
1,000,000 push & pop31.5931.660.00
1,000,000 push & shift31.1732.090.00
100,000 push & shift3.27305.752.76e-4
Native JS Array 100,000 push & shift2511.340.400.37
100,000 unshift & shift2.97336.262.53e-4
Native JS Array 100,000 unshift & shift4097.310.240.34
-
-
hash-map
-
test nametime taken (ms)executions per secsample deviation
1,000,000 set114.378.740.02
Native JS Map 1,000,000 set202.674.930.00
Native JS Set 1,000,000 add168.245.940.00
1,000,000 set & get124.108.060.03
Native JS Map 1,000,000 set & get266.463.750.01
Native JS Set 1,000,000 add & has175.145.710.02
1,000,000 ObjKey set & get341.262.930.05
Native JS Map 1,000,000 ObjKey set & get311.603.210.04
Native JS Set 1,000,000 ObjKey add & has274.813.640.03
-
-
trie
-
test nametime taken (ms)executions per secsample deviation
100,000 push59.0816.930.00
100,000 getWords82.9212.060.00
-
-
avl-tree
-
test nametime taken (ms)executions per secsample deviation
10,000 add randomly48.6620.550.01
10,000 get19.3651.642.95e-4
10,000 add & delete randomly77.6812.870.00
10,000 addMany52.0419.220.01
-
-
binary-tree-overall
-
test nametime taken (ms)executions per secsample deviation
10,000 RBTree add8.07123.878.53e-5
10,000 RBTree add & delete randomly22.3844.685.81e-4
10,000 RBTree get0.621602.157.37e-6
10,000 AVLTree add46.2721.618.12e-4
10,000 AVLTree get20.0249.954.21e-4
10,000 AVLTree add & delete randomly75.9613.160.00
-
-
directed-graph
-
test nametime taken (ms)executions per secsample deviation
1,000 addVertex0.109647.199.43e-7
1,000 addEdge6.06164.981.09e-4
1,000 getVertex0.052.17e+42.85e-7
1,000 getEdge23.4742.600.00
tarjan208.864.790.01
topologicalSort186.705.360.02
-
-
doubly-linked-list
-
test nametime taken (ms)executions per secsample deviation
1,000,000 push209.574.770.06
1,000,000 unshift203.854.910.03
1,000,000 unshift & shift172.645.790.02
1,000,000 addBefore315.263.170.08
-
-
singly-linked-list
-
test nametime taken (ms)executions per secsample deviation
1,000,000 push & shift218.014.590.06
10,000 push & pop216.064.630.01
10,000 addBefore248.624.020.01
-
-
priority-queue
-
test nametime taken (ms)executions per secsample deviation
100,000 add27.5236.340.00
100,000 add & poll75.4913.255.41e-4
-
-
stack
-
test nametime taken (ms)executions per secsample deviation
1,000,000 push41.2424.250.01
1,000,000 push & pop49.6720.130.01
-
- -[//]: # (No deletion!!! End of Replace Section) - ## supported module system Now you can use it in Node.js and browser environments diff --git a/package-lock.json b/package-lock.json index 8b18a0e..a83a61c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "data-structure-typed", - "version": "1.50.7", + "version": "1.50.9", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "data-structure-typed", - "version": "1.50.7", + "version": "1.50.9", "license": "MIT", "devDependencies": { "@swc/core": "^1.3.96", @@ -16,11 +16,11 @@ "@typescript-eslint/eslint-plugin": "^6.7.4", "@typescript-eslint/parser": "^6.7.4", "auto-changelog": "^2.4.0", - "avl-tree-typed": "^1.50.7", + "avl-tree-typed": "^1.50.9", "benchmark": "^2.1.4", - "binary-tree-typed": "^1.50.7", - "bst-typed": "^1.50.7", - "data-structure-typed": "^1.50.7", + "binary-tree-typed": "^1.50.9", + "bst-typed": "^1.50.9", + "data-structure-typed": "^1.50.9", "dependency-cruiser": "^14.1.0", "doctoc": "^2.2.1", "eslint": "^8.50.0", @@ -29,7 +29,7 @@ "eslint-import-resolver-typescript": "^3.6.1", "eslint-plugin-import": "^2.28.1", "fast-glob": "^3.3.1", - "heap-typed": "^1.50.7", + "heap-typed": "^1.50.9", "istanbul-badges-readme": "^1.8.5", "jest": "^29.7.0", "js-sdsl": "^4.4.2", @@ -3097,12 +3097,12 @@ } }, "node_modules/avl-tree-typed": { - "version": "1.50.7", - "resolved": "https://registry.npmjs.org/avl-tree-typed/-/avl-tree-typed-1.50.7.tgz", - "integrity": "sha512-zYo8Oa4IrM5i3evHGO0FhELFHpDITUOpa2d8cGd06LHR74I9JL0OX7X0J+yuy6RBSuiIiNieJ99EKmhuggGbTg==", + "version": "1.50.9", + "resolved": "https://registry.npmjs.org/avl-tree-typed/-/avl-tree-typed-1.50.9.tgz", + "integrity": "sha512-0cFjnUr3b0dFD3RM+tqBW9iSeUJo8q25BCG2vF4DG2/YbtQxcYvxrlwW319EQORaqhQivmtqy1YLmRq+9/oUQA==", "dev": true, "dependencies": { - "data-structure-typed": "^1.50.7" + "data-structure-typed": "^1.50.9" } }, "node_modules/babel-jest": { @@ -3306,12 +3306,12 @@ } }, "node_modules/binary-tree-typed": { - "version": "1.50.7", - "resolved": "https://registry.npmjs.org/binary-tree-typed/-/binary-tree-typed-1.50.7.tgz", - "integrity": "sha512-L1kVL9q+1jsXyTNuZ/PJrBD1HUK4MyWFOwQmH4coy7WmOlTg2z2+ZuXCgmT8X/ADYFoKc9hq94niS/Yvy6RpOg==", + "version": "1.50.9", + "resolved": "https://registry.npmjs.org/binary-tree-typed/-/binary-tree-typed-1.50.9.tgz", + "integrity": "sha512-OVI+Azj8cDifYRp8jKANiQySFF5Zxk9RbUr58YDswgKZ9z1snucLkTvauDXqr9wtkA42OxT3Fhdc5OohB0t6wg==", "dev": true, "dependencies": { - "data-structure-typed": "^1.50.7" + "data-structure-typed": "^1.50.9" } }, "node_modules/brace-expansion": { @@ -3390,12 +3390,12 @@ } }, "node_modules/bst-typed": { - "version": "1.50.7", - "resolved": "https://registry.npmjs.org/bst-typed/-/bst-typed-1.50.7.tgz", - "integrity": "sha512-grhnOajT8DBZYivgT5Q+qVQKpBbUPIyMJ2KVOx2EBH68l1pFA78zlf/BJWhEL+UcLwDqIJ6DpbvqcyTAjcfE9A==", + "version": "1.50.9", + "resolved": "https://registry.npmjs.org/bst-typed/-/bst-typed-1.50.9.tgz", + "integrity": "sha512-d4neM/KL4BBqfBoot5MumOenL61pWHBG3aP9nQQoVtwn6mpn8yXWV4+tTXbRlzJ9bXEpCL6v7BrbD+tJNqyzHw==", "dev": true, "dependencies": { - "data-structure-typed": "^1.50.7" + "data-structure-typed": "^1.50.9" } }, "node_modules/buffer-from": { @@ -3838,9 +3838,9 @@ } }, "node_modules/data-structure-typed": { - "version": "1.50.7", - "resolved": "https://registry.npmjs.org/data-structure-typed/-/data-structure-typed-1.50.7.tgz", - "integrity": "sha512-TPLHMD4yxQFp4YbigA7i4zAVsQwZEarmYah2KXMmhczzasDXt+bbYLg7/BlRkq58N55Qr8UZuI5MAlH2YKaibQ==", + "version": "1.50.9", + "resolved": "https://registry.npmjs.org/data-structure-typed/-/data-structure-typed-1.50.9.tgz", + "integrity": "sha512-16vbeS+PSNW+ZwjAAtA7AMKrywbn8JpoCOXwl5sHbrErLATp+ejuRr46yH9nJ7Q7/qgvv3mlPLyhp4ux8pq4bg==", "dev": true }, "node_modules/debug": { @@ -5363,12 +5363,12 @@ } }, "node_modules/heap-typed": { - "version": "1.50.7", - "resolved": "https://registry.npmjs.org/heap-typed/-/heap-typed-1.50.7.tgz", - "integrity": "sha512-124SW17qSl+7aVp0d4gdFVTusW/Lq+x8S89yvyTUfSj6YadqUjP0EKblDx4oShiYC91g3YRPKqKV5juN2SDx5w==", + "version": "1.50.9", + "resolved": "https://registry.npmjs.org/heap-typed/-/heap-typed-1.50.9.tgz", + "integrity": "sha512-XG5KHlDktK3A3t2swtBVW2PRmp4RwHYHZODCN6NIQragXxlEJK7Illts0a8tb32NYlwVNSEQTSxReqx6iQn94A==", "dev": true, "dependencies": { - "data-structure-typed": "^1.50.7" + "data-structure-typed": "^1.50.9" } }, "node_modules/html-escaper": { diff --git a/package.json b/package.json index beda901..a15f1eb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "data-structure-typed", - "version": "1.50.8", + "version": "1.50.9", "description": "Javascript Data Structure. Heap, Binary Tree, Red Black Tree, Linked List, Deque, Trie, HashMap, Directed Graph, Undirected Graph, Binary Search Tree(BST), AVL Tree, Priority Queue, Graph, Queue, Tree Multiset, Singly Linked List, Doubly Linked List, Max Heap, Max Priority Queue, Min Heap, Min Priority Queue, Stack. Benchmark compared with C++ STL. API aligned with ES6 and Java.util. Usability is comparable to Python", "main": "dist/cjs/index.js", "module": "dist/mjs/index.js", @@ -34,7 +34,7 @@ "format:test": "prettier --write 'test/**/*.{js,ts}'", "format": "npm run format:src && npm run format:test", "check:exist-latest": "sh scripts/check_exist_remotely.sh", - "ci": "env && git fetch --tags && npm run inspect && npm run lint && npm run build && npm run test:unit && npm run changelog", + "ci": "env && git fetch --tags && npm run update:subs && npm run inspect && npm run lint && npm run build && npm run test:unit && npm run changelog", "update:subs": "npm i avl-tree-typed binary-tree-typed bst-typed heap-typed data-structure-typed --save-dev", "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", "changelog": "auto-changelog", @@ -66,11 +66,11 @@ "@typescript-eslint/eslint-plugin": "^6.7.4", "@typescript-eslint/parser": "^6.7.4", "auto-changelog": "^2.4.0", - "avl-tree-typed": "^1.50.7", + "avl-tree-typed": "^1.50.9", "benchmark": "^2.1.4", - "binary-tree-typed": "^1.50.7", - "bst-typed": "^1.50.7", - "data-structure-typed": "^1.50.7", + "binary-tree-typed": "^1.50.9", + "bst-typed": "^1.50.9", + "data-structure-typed": "^1.50.9", "dependency-cruiser": "^14.1.0", "doctoc": "^2.2.1", "eslint": "^8.50.0", @@ -79,7 +79,7 @@ "eslint-import-resolver-typescript": "^3.6.1", "eslint-plugin-import": "^2.28.1", "fast-glob": "^3.3.1", - "heap-typed": "^1.50.7", + "heap-typed": "^1.50.9", "istanbul-badges-readme": "^1.8.5", "jest": "^29.7.0", "js-sdsl": "^4.4.2", diff --git a/test/integration/avl-tree.test.ts b/test/integration/avl-tree.test.ts index faac053..4a6d967 100644 --- a/test/integration/avl-tree.test.ts +++ b/test/integration/avl-tree.test.ts @@ -44,7 +44,7 @@ describe('AVL Tree Test', () => { expect(subTreeSum).toBe(70); let lesserSum = 0; - tree.lesserOrGreaterTraverse(node => (lesserSum += node.key), CP.lt, 10); + tree.lesserOrGreaterTraverse(node => (lesserSum += node.key), 'LT', 10); expect(lesserSum).toBe(45); // 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. diff --git a/test/integration/bst.test.ts b/test/integration/bst.test.ts index 5d2ead6..ad3440b 100644 --- a/test/integration/bst.test.ts +++ b/test/integration/bst.test.ts @@ -38,7 +38,7 @@ describe('Individual package BST operations test', () => { expect(subTreeSum).toBe(70); let lesserSum = 0; - bst.lesserOrGreaterTraverse(node => (lesserSum += node.key), CP.lt, 10); + bst.lesserOrGreaterTraverse(node => (lesserSum += node.key), 'LT', 10); expect(lesserSum).toBe(45); expect(node15).toBeInstanceOf(BSTNode); @@ -235,7 +235,7 @@ describe('Individual package BST operations test', () => { expect(subTreeSum).toBe(70); let lesserSum = 0; - objBST.lesserOrGreaterTraverse(node => (lesserSum += node.key), CP.lt, 10); + objBST.lesserOrGreaterTraverse(node => (lesserSum += node.key), 'LT', 10); expect(lesserSum).toBe(45); expect(node15).toBeInstanceOf(BSTNode); diff --git a/test/performance/data-structures/binary-tree/avl-tree.test.ts b/test/performance/data-structures/binary-tree/avl-tree.test.ts index 5a928b2..3885c1b 100644 --- a/test/performance/data-structures/binary-tree/avl-tree.test.ts +++ b/test/performance/data-structures/binary-tree/avl-tree.test.ts @@ -3,26 +3,31 @@ import * as Benchmark from 'benchmark'; import { getRandomIntArray, magnitude } from '../../../utils'; const suite = new Benchmark.Suite(); -const avl = new AVLTree(); -const { TEN_THOUSAND } = magnitude; -const arr = getRandomIntArray(TEN_THOUSAND, 0, TEN_THOUSAND, true); +const avlTree = new AVLTree(); +const { HUNDRED_THOUSAND } = magnitude; +const randomArray = getRandomIntArray(HUNDRED_THOUSAND, 0, HUNDRED_THOUSAND - 1, true); suite - .add(`${TEN_THOUSAND.toLocaleString()} add randomly`, () => { - avl.clear(); - for (let i = 0; i < arr.length; i++) avl.add(arr[i]); + .add(`${HUNDRED_THOUSAND.toLocaleString()} add`, () => { + avlTree.clear(); + for (let i = 0; i < randomArray.length; i++) avlTree.add(i); }) - .add(`${TEN_THOUSAND.toLocaleString()} get`, () => { - for (let i = 0; i < arr.length; i++) avl.get(arr[i]); + .add(`${HUNDRED_THOUSAND.toLocaleString()} get`, () => { + for (let i = 0; i < randomArray.length; i++) avlTree.get(randomArray[i]); }) - .add(`${TEN_THOUSAND.toLocaleString()} add & delete randomly`, () => { - avl.clear(); - for (let i = 0; i < arr.length; i++) avl.add(arr[i]); - for (let i = 0; i < arr.length; i++) avl.delete(arr[i]); + .add(`${HUNDRED_THOUSAND.toLocaleString()} iterator`, () => { + const entries = [...avlTree]; + return entries.length === HUNDRED_THOUSAND; }) - .add(`${TEN_THOUSAND.toLocaleString()} addMany`, () => { - avl.clear(); - avl.addMany(arr); + .add(`${HUNDRED_THOUSAND.toLocaleString()} add & delete orderly`, () => { + avlTree.clear(); + for (let i = 0; i < randomArray.length; i++) avlTree.add(i); + for (let i = 0; i < randomArray.length; i++) avlTree.delete(i); + }) + .add(`${HUNDRED_THOUSAND.toLocaleString()} add & delete randomly`, () => { + avlTree.clear(); + for (let i = 0; i < randomArray.length; i++) avlTree.add(randomArray[i]); + for (let i = 0; i < randomArray.length; i++) avlTree.delete(randomArray[i]); }); export { suite };