extra-benchmark 0.2.4 → 0.3.0
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/README.md +5 -5
- package/lib/benchmark.d.ts +1 -1
- package/lib/benchmark.js +25 -36
- package/lib/benchmark.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -17
- package/lib/index.js.map +1 -1
- package/package.json +28 -25
- package/src/benchmark.ts +14 -24
- package/src/index.ts +1 -1
package/README.md
CHANGED
|
@@ -61,9 +61,9 @@ interface IBenchmarkCaseResult {
|
|
|
61
61
|
operationsPerMillisecond: number
|
|
62
62
|
|
|
63
63
|
/* Milliseconds */
|
|
64
|
-
maxiumElapsedTime:
|
|
65
|
-
minimumElapsedTime:
|
|
66
|
-
averageElapsedTime:
|
|
64
|
+
maxiumElapsedTime: number
|
|
65
|
+
minimumElapsedTime: number
|
|
66
|
+
averageElapsedTime: number
|
|
67
67
|
|
|
68
68
|
/* Bytes */
|
|
69
69
|
maximumMemoryIncrements: number
|
|
@@ -89,10 +89,10 @@ class Benchmark {
|
|
|
89
89
|
name: string
|
|
90
90
|
, fn: () => Awaitable<
|
|
91
91
|
// iterate(): afterEach
|
|
92
|
-
| (() => Awaitable<(() => Awaitable<void>)
|
|
92
|
+
| (() => Awaitable<void | (() => Awaitable<void>)>)
|
|
93
93
|
| {
|
|
94
94
|
// iterate(): afterEach
|
|
95
|
-
iterate: () => Awaitable<(() => Awaitable<void>)
|
|
95
|
+
iterate: () => Awaitable<void | (() => Awaitable<void>)>
|
|
96
96
|
beforeEach?: () => Awaitable<void>
|
|
97
97
|
afterAll?: () => Awaitable<void>
|
|
98
98
|
}
|
package/lib/benchmark.d.ts
CHANGED
|
@@ -23,7 +23,7 @@ export declare class Benchmark {
|
|
|
23
23
|
private runs;
|
|
24
24
|
constructor(name: string, options?: IBenchmarkOptions);
|
|
25
25
|
addCase(name: string, fn: () => Awaitable<(() => Awaitable<void | (() => Awaitable<void>)>) | {
|
|
26
|
-
iterate: () => Awaitable<void | (() => void)>;
|
|
26
|
+
iterate: () => Awaitable<void | (() => Awaitable<void>)>;
|
|
27
27
|
beforeEach?: () => Awaitable<void>;
|
|
28
28
|
afterAll?: () => Awaitable<void>;
|
|
29
29
|
}>, options?: IBenchmarkOptions): void;
|
package/lib/benchmark.js
CHANGED
|
@@ -1,27 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class Benchmark {
|
|
1
|
+
import { pass, isFunction } from '@blackglory/prelude';
|
|
2
|
+
import { max, min, sum } from 'extra-utils';
|
|
3
|
+
import { avg } from 'iterable-operator';
|
|
4
|
+
import { performance } from 'perf_hooks';
|
|
5
|
+
export class Benchmark {
|
|
7
6
|
constructor(name, options = {}) {
|
|
7
|
+
var _a, _b;
|
|
8
8
|
this.name = name;
|
|
9
9
|
this.benchmarkCases = [];
|
|
10
|
-
this.warms = options.warms
|
|
11
|
-
this.runs = options.runs
|
|
10
|
+
this.warms = (_a = options.warms) !== null && _a !== void 0 ? _a : 100;
|
|
11
|
+
this.runs = (_b = options.runs) !== null && _b !== void 0 ? _b : 100;
|
|
12
12
|
}
|
|
13
13
|
addCase(name, fn, options = {}) {
|
|
14
14
|
this.benchmarkCases.push({ name, fn, options });
|
|
15
15
|
}
|
|
16
16
|
async *run() {
|
|
17
|
+
var _a, _b, _c, _d;
|
|
17
18
|
for (const benchmarkCase of this.benchmarkCases) {
|
|
18
19
|
const { fn, name, options } = benchmarkCase;
|
|
19
20
|
const result = await fn();
|
|
20
|
-
const iterate =
|
|
21
|
-
const beforeEach =
|
|
22
|
-
const afterAll =
|
|
23
|
-
const warms = options.warms
|
|
24
|
-
const runs = options.runs
|
|
21
|
+
const iterate = isFunction(result) ? result : result.iterate;
|
|
22
|
+
const beforeEach = isFunction(result) ? pass : ((_a = result.beforeEach) !== null && _a !== void 0 ? _a : pass);
|
|
23
|
+
const afterAll = isFunction(result) ? pass : ((_b = result.afterAll) !== null && _b !== void 0 ? _b : pass);
|
|
24
|
+
const warms = (_c = options.warms) !== null && _c !== void 0 ? _c : this.warms;
|
|
25
|
+
const runs = (_d = options.runs) !== null && _d !== void 0 ? _d : this.runs;
|
|
25
26
|
await sample({
|
|
26
27
|
iterate,
|
|
27
28
|
beforeEach,
|
|
@@ -34,27 +35,16 @@ class Benchmark {
|
|
|
34
35
|
});
|
|
35
36
|
await afterAll();
|
|
36
37
|
const elapsedTimes = samples.map(x => x.elapsedTime);
|
|
37
|
-
const maxiumElapsedTime = elapsedTimes.reduce(
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
const
|
|
41
|
-
return cur > min ? min : cur;
|
|
42
|
-
});
|
|
43
|
-
const totalElapsedTime = elapsedTimes.reduce((acc, cur) => {
|
|
44
|
-
return acc + cur;
|
|
45
|
-
});
|
|
46
|
-
const averageElapsedTime = totalElapsedTime / runs;
|
|
38
|
+
const maxiumElapsedTime = elapsedTimes.reduce(max);
|
|
39
|
+
const minimumElapsedTime = elapsedTimes.reduce(min);
|
|
40
|
+
const averageElapsedTime = avg(elapsedTimes);
|
|
41
|
+
const totalElapsedTime = elapsedTimes.reduce(sum);
|
|
47
42
|
const operationsPerMillisecond = runs / totalElapsedTime;
|
|
48
43
|
const operationsPerSecond = runs / (totalElapsedTime / 1000);
|
|
49
44
|
const memoryIncrments = samples.map(x => x.memoryIncrements);
|
|
50
|
-
const maximumMemoryIncrements = memoryIncrments.reduce(
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
const minimumMemoryIncrements = memoryIncrments.reduce((min, cur) => {
|
|
54
|
-
return cur > min ? min : cur;
|
|
55
|
-
});
|
|
56
|
-
const totalMemoryIncrements = memoryIncrments.reduce((average, cur) => average + cur);
|
|
57
|
-
const averageMemoryIncrements = totalMemoryIncrements / memoryIncrments.length;
|
|
45
|
+
const maximumMemoryIncrements = memoryIncrments.reduce(max);
|
|
46
|
+
const minimumMemoryIncrements = memoryIncrments.reduce(min);
|
|
47
|
+
const averageMemoryIncrements = avg(memoryIncrments);
|
|
58
48
|
yield {
|
|
59
49
|
name,
|
|
60
50
|
warms,
|
|
@@ -71,17 +61,16 @@ class Benchmark {
|
|
|
71
61
|
}
|
|
72
62
|
}
|
|
73
63
|
}
|
|
74
|
-
exports.Benchmark = Benchmark;
|
|
75
64
|
async function sample({ iterate, beforeEach, times }) {
|
|
76
65
|
const samples = [];
|
|
77
|
-
for (let i = times; i
|
|
66
|
+
for (let i = 0; i < times; i++) {
|
|
78
67
|
await beforeEach();
|
|
79
68
|
const startRSS = process.memoryUsage().rss;
|
|
80
|
-
const startTime =
|
|
69
|
+
const startTime = performance.now();
|
|
81
70
|
const afterEach = await iterate();
|
|
82
|
-
const endTime =
|
|
71
|
+
const endTime = performance.now();
|
|
83
72
|
const endRSS = process.memoryUsage().rss;
|
|
84
|
-
if (
|
|
73
|
+
if (isFunction(afterEach)) {
|
|
85
74
|
await afterEach();
|
|
86
75
|
}
|
|
87
76
|
const elapsedTime = endTime - startTime;
|
package/lib/benchmark.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"benchmark.js","sourceRoot":"","sources":["../src/benchmark.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"benchmark.js","sourceRoot":"","sources":["../src/benchmark.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from './benchmark';
|
|
1
|
+
export * from './benchmark.js';
|
package/lib/index.js
CHANGED
|
@@ -1,18 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./benchmark"), exports);
|
|
1
|
+
export * from './benchmark.js';
|
|
18
2
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,57 +1,60 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "extra-benchmark",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Lightweight benchmarking library.",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"files": [
|
|
7
7
|
"lib",
|
|
8
8
|
"src"
|
|
9
9
|
],
|
|
10
|
+
"type": "module",
|
|
10
11
|
"main": "lib/index.js",
|
|
11
12
|
"types": "lib/index.d.ts",
|
|
12
13
|
"sideEffects": false,
|
|
14
|
+
"engines": {
|
|
15
|
+
"node": ">=22"
|
|
16
|
+
},
|
|
13
17
|
"repository": "git@github.com:BlackGlory/extra-benchmark.git",
|
|
14
18
|
"author": "BlackGlory <woshenmedoubuzhidao@blackglory.me>",
|
|
15
19
|
"license": "MIT",
|
|
16
20
|
"scripts": {
|
|
21
|
+
"prepare": "ts-patch install -s",
|
|
17
22
|
"lint": "eslint --ext .js,.jsx,.ts,.tsx --quiet src __tests__",
|
|
18
|
-
"test": "
|
|
19
|
-
"
|
|
20
|
-
"test:coverage": "jest --coverage --config jest.config.js",
|
|
21
|
-
"prepublishOnly": "run-s clean build",
|
|
23
|
+
"test": "vitest run",
|
|
24
|
+
"prepublishOnly": "run-s prepare clean build",
|
|
22
25
|
"clean": "rimraf lib",
|
|
23
|
-
"build": "
|
|
24
|
-
"build:compile": "tsc --project tsconfig.build.json --module commonjs",
|
|
25
|
-
"build:patch": "tscpaths -p tsconfig.build.json -s ./src -o ./lib",
|
|
26
|
+
"build": "tsc --project tsconfig.build.json",
|
|
26
27
|
"release": "standard-version"
|
|
27
28
|
},
|
|
28
29
|
"husky": {
|
|
29
30
|
"hooks": {
|
|
30
|
-
"pre-commit": "run-s lint build test",
|
|
31
|
+
"pre-commit": "run-s prepare lint build test",
|
|
31
32
|
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
|
|
32
33
|
}
|
|
33
34
|
},
|
|
34
35
|
"devDependencies": {
|
|
35
|
-
"@commitlint/cli": "^
|
|
36
|
-
"@commitlint/config-conventional": "^
|
|
37
|
-
"@
|
|
38
|
-
"@types/node": "
|
|
39
|
-
"
|
|
40
|
-
"@typescript-eslint/parser": "^5.44.0",
|
|
41
|
-
"eslint": "^8.28.0",
|
|
36
|
+
"@commitlint/cli": "^20.4.1",
|
|
37
|
+
"@commitlint/config-conventional": "^20.4.1",
|
|
38
|
+
"@eslint/js": "^10.0.1",
|
|
39
|
+
"@types/node": "22",
|
|
40
|
+
"eslint": "^10.0.0",
|
|
42
41
|
"husky": "^4.3.8",
|
|
43
|
-
"iterable-operator": "^2.5.0",
|
|
44
|
-
"jest": "^29.3.1",
|
|
45
42
|
"npm-run-all": "^4.1.5",
|
|
46
|
-
"return-style": "^
|
|
47
|
-
"rimraf": "^
|
|
43
|
+
"return-style": "^3.0.1",
|
|
44
|
+
"rimraf": "^6.1.2",
|
|
48
45
|
"standard-version": "^9.5.0",
|
|
49
|
-
"ts-
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"typescript": "^
|
|
46
|
+
"ts-patch": "^3.3.0",
|
|
47
|
+
"tslib": "^2.8.1",
|
|
48
|
+
"typescript": "^5.9.3",
|
|
49
|
+
"typescript-eslint": "^8.55.0",
|
|
50
|
+
"typescript-transform-paths": "^3.5.6",
|
|
51
|
+
"vite": "^7.3.1",
|
|
52
|
+
"vite-tsconfig-paths": "^6.1.1",
|
|
53
|
+
"vitest": "^4.0.18"
|
|
53
54
|
},
|
|
54
55
|
"dependencies": {
|
|
55
|
-
"@blackglory/prelude": "^0.
|
|
56
|
+
"@blackglory/prelude": "^0.4.0",
|
|
57
|
+
"extra-utils": "^5.20.0",
|
|
58
|
+
"iterable-operator": "^5.1.0"
|
|
56
59
|
}
|
|
57
60
|
}
|
package/src/benchmark.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { pass, Awaitable, isFunction } from '@blackglory/prelude'
|
|
2
|
+
import { max, min, sum } from 'extra-utils'
|
|
3
|
+
import { avg } from 'iterable-operator'
|
|
2
4
|
import { performance } from 'perf_hooks'
|
|
3
5
|
|
|
4
6
|
export interface IBenchmarkOptions {
|
|
@@ -31,9 +33,9 @@ export interface IBenchmarkCaseResult {
|
|
|
31
33
|
interface IBenchmarkCase {
|
|
32
34
|
name: string
|
|
33
35
|
fn: () => Awaitable<
|
|
34
|
-
| (() => Awaitable<void | (() => void)>) // iterate
|
|
36
|
+
| (() => Awaitable<void | (() => Awaitable<void>)>) // iterate
|
|
35
37
|
| {
|
|
36
|
-
iterate: () => Awaitable<void | (() => void)>
|
|
38
|
+
iterate: () => Awaitable<void | (() => Awaitable<void>)>
|
|
37
39
|
beforeEach?: () => Awaitable<void>
|
|
38
40
|
afterAll?: () => Awaitable<void>
|
|
39
41
|
}
|
|
@@ -64,7 +66,7 @@ export class Benchmark {
|
|
|
64
66
|
| (() => Awaitable<void | (() => Awaitable<void>)>)
|
|
65
67
|
| {
|
|
66
68
|
// iterate(): afterEach
|
|
67
|
-
iterate: () => Awaitable<void | (() => void)>
|
|
69
|
+
iterate: () => Awaitable<void | (() => Awaitable<void>)>
|
|
68
70
|
beforeEach?: () => Awaitable<void>
|
|
69
71
|
afterAll?: () => Awaitable<void>
|
|
70
72
|
}
|
|
@@ -101,29 +103,18 @@ export class Benchmark {
|
|
|
101
103
|
await afterAll()
|
|
102
104
|
|
|
103
105
|
const elapsedTimes = samples.map(x => x.elapsedTime)
|
|
104
|
-
const maxiumElapsedTime = elapsedTimes.reduce(
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
const minimumElapsedTime = elapsedTimes.reduce((min, cur) => {
|
|
108
|
-
return cur > min ? min : cur
|
|
109
|
-
})
|
|
110
|
-
const totalElapsedTime = elapsedTimes.reduce((acc, cur) => {
|
|
111
|
-
return acc + cur
|
|
112
|
-
})
|
|
113
|
-
const averageElapsedTime = totalElapsedTime / runs
|
|
106
|
+
const maxiumElapsedTime = elapsedTimes.reduce(max)
|
|
107
|
+
const minimumElapsedTime = elapsedTimes.reduce(min)
|
|
108
|
+
const averageElapsedTime = avg(elapsedTimes)
|
|
114
109
|
|
|
110
|
+
const totalElapsedTime = elapsedTimes.reduce(sum)
|
|
115
111
|
const operationsPerMillisecond = runs / totalElapsedTime
|
|
116
112
|
const operationsPerSecond = runs / (totalElapsedTime / 1000)
|
|
117
113
|
|
|
118
114
|
const memoryIncrments = samples.map(x => x.memoryIncrements)
|
|
119
|
-
const maximumMemoryIncrements = memoryIncrments.reduce(
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
const minimumMemoryIncrements = memoryIncrments.reduce((min, cur) => {
|
|
123
|
-
return cur > min ? min : cur
|
|
124
|
-
})
|
|
125
|
-
const totalMemoryIncrements = memoryIncrments.reduce((average, cur) => average + cur)
|
|
126
|
-
const averageMemoryIncrements = totalMemoryIncrements / memoryIncrments.length
|
|
115
|
+
const maximumMemoryIncrements = memoryIncrments.reduce(max)
|
|
116
|
+
const minimumMemoryIncrements = memoryIncrments.reduce(min)
|
|
117
|
+
const averageMemoryIncrements = avg(memoryIncrments)
|
|
127
118
|
|
|
128
119
|
yield {
|
|
129
120
|
name
|
|
@@ -147,11 +138,10 @@ async function sample({ iterate, beforeEach, times }: {
|
|
|
147
138
|
iterate: () => Awaitable<void | (() => Awaitable<void>)>
|
|
148
139
|
, beforeEach: () => Awaitable<void>
|
|
149
140
|
, times: number
|
|
150
|
-
}
|
|
151
|
-
): Promise<ISample[]> {
|
|
141
|
+
}): Promise<ISample[]> {
|
|
152
142
|
const samples: ISample[] = []
|
|
153
143
|
|
|
154
|
-
for (let i = times; i
|
|
144
|
+
for (let i = 0; i < times; i++) {
|
|
155
145
|
await beforeEach()
|
|
156
146
|
|
|
157
147
|
const startRSS = process.memoryUsage().rss
|
package/src/index.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from './benchmark'
|
|
1
|
+
export * from './benchmark.js'
|