modestbench 0.3.2 → 0.5.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 +44 -0
- package/README.md +45 -2
- package/dist/adapters/ava-adapter.cjs +421 -0
- package/dist/adapters/ava-adapter.cjs.map +1 -0
- package/dist/adapters/ava-adapter.d.cts +39 -0
- package/dist/adapters/ava-adapter.d.cts.map +1 -0
- package/dist/adapters/ava-adapter.d.ts +39 -0
- package/dist/adapters/ava-adapter.d.ts.map +1 -0
- package/dist/adapters/ava-adapter.js +384 -0
- package/dist/adapters/ava-adapter.js.map +1 -0
- package/dist/adapters/ava-hooks.cjs +66 -0
- package/dist/adapters/ava-hooks.cjs.map +1 -0
- package/dist/adapters/ava-hooks.d.cts +24 -0
- package/dist/adapters/ava-hooks.d.cts.map +1 -0
- package/dist/adapters/ava-hooks.d.ts +24 -0
- package/dist/adapters/ava-hooks.d.ts.map +1 -0
- package/dist/adapters/ava-hooks.js +61 -0
- package/dist/adapters/ava-hooks.js.map +1 -0
- package/dist/adapters/ava-register.cjs +16 -0
- package/dist/adapters/ava-register.cjs.map +1 -0
- package/dist/adapters/ava-register.d.cts +11 -0
- package/dist/adapters/ava-register.d.cts.map +1 -0
- package/dist/adapters/ava-register.d.ts +11 -0
- package/dist/adapters/ava-register.d.ts.map +1 -0
- package/dist/adapters/ava-register.js +14 -0
- package/dist/adapters/ava-register.js.map +1 -0
- package/dist/adapters/mocha-adapter.cjs +254 -0
- package/dist/adapters/mocha-adapter.cjs.map +1 -0
- package/dist/adapters/mocha-adapter.d.cts +26 -0
- package/dist/adapters/mocha-adapter.d.cts.map +1 -0
- package/dist/adapters/mocha-adapter.d.ts +26 -0
- package/dist/adapters/mocha-adapter.d.ts.map +1 -0
- package/dist/adapters/mocha-adapter.js +217 -0
- package/dist/adapters/mocha-adapter.js.map +1 -0
- package/dist/adapters/node-test-adapter.cjs +335 -0
- package/dist/adapters/node-test-adapter.cjs.map +1 -0
- package/dist/adapters/node-test-adapter.d.cts +41 -0
- package/dist/adapters/node-test-adapter.d.cts.map +1 -0
- package/dist/adapters/node-test-adapter.d.ts +41 -0
- package/dist/adapters/node-test-adapter.d.ts.map +1 -0
- package/dist/adapters/node-test-adapter.js +298 -0
- package/dist/adapters/node-test-adapter.js.map +1 -0
- package/dist/adapters/node-test-hooks.cjs +72 -0
- package/dist/adapters/node-test-hooks.cjs.map +1 -0
- package/dist/adapters/node-test-hooks.d.cts +24 -0
- package/dist/adapters/node-test-hooks.d.cts.map +1 -0
- package/dist/adapters/node-test-hooks.d.ts +24 -0
- package/dist/adapters/node-test-hooks.d.ts.map +1 -0
- package/dist/adapters/node-test-hooks.js +67 -0
- package/dist/adapters/node-test-hooks.js.map +1 -0
- package/dist/adapters/node-test-register.cjs +7 -0
- package/dist/adapters/node-test-register.cjs.map +1 -0
- package/dist/adapters/node-test-register.d.cts +2 -0
- package/dist/adapters/node-test-register.d.cts.map +1 -0
- package/dist/adapters/node-test-register.d.ts +2 -0
- package/dist/adapters/node-test-register.d.ts.map +1 -0
- package/dist/adapters/node-test-register.js +5 -0
- package/dist/adapters/node-test-register.js.map +1 -0
- package/dist/adapters/types.cjs +152 -0
- package/dist/adapters/types.cjs.map +1 -0
- package/dist/adapters/types.d.cts +112 -0
- package/dist/adapters/types.d.cts.map +1 -0
- package/dist/adapters/types.d.ts +112 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +148 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/cli/commands/init.cjs +21 -17
- package/dist/cli/commands/init.cjs.map +1 -1
- package/dist/cli/commands/init.d.cts.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +21 -17
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/run.cjs +6 -2
- package/dist/cli/commands/run.cjs.map +1 -1
- package/dist/cli/commands/run.js +6 -2
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/test.cjs +392 -0
- package/dist/cli/commands/test.cjs.map +1 -0
- package/dist/cli/commands/test.d.cts +38 -0
- package/dist/cli/commands/test.d.cts.map +1 -0
- package/dist/cli/commands/test.d.ts +38 -0
- package/dist/cli/commands/test.d.ts.map +1 -0
- package/dist/cli/commands/test.js +388 -0
- package/dist/cli/commands/test.js.map +1 -0
- package/dist/cli/index.cjs +72 -1
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.d.cts.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +73 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/constants.cjs +13 -1
- package/dist/constants.cjs.map +1 -1
- package/dist/constants.d.cts +12 -0
- package/dist/constants.d.cts.map +1 -1
- package/dist/constants.d.ts +12 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +12 -0
- package/dist/constants.js.map +1 -1
- package/dist/core/engine.cjs +4 -0
- package/dist/core/engine.cjs.map +1 -1
- package/dist/core/engine.d.cts.map +1 -1
- package/dist/core/engine.d.ts.map +1 -1
- package/dist/core/engine.js +4 -0
- package/dist/core/engine.js.map +1 -1
- package/dist/core/engines/tinybench-engine.cjs +163 -131
- package/dist/core/engines/tinybench-engine.cjs.map +1 -1
- package/dist/core/engines/tinybench-engine.d.cts +6 -0
- package/dist/core/engines/tinybench-engine.d.cts.map +1 -1
- package/dist/core/engines/tinybench-engine.d.ts +6 -0
- package/dist/core/engines/tinybench-engine.d.ts.map +1 -1
- package/dist/core/engines/tinybench-engine.js +163 -131
- package/dist/core/engines/tinybench-engine.js.map +1 -1
- package/dist/core/stats-utils.cjs +4 -2
- package/dist/core/stats-utils.cjs.map +1 -1
- package/dist/core/stats-utils.d.cts +1 -1
- package/dist/core/stats-utils.d.cts.map +1 -1
- package/dist/core/stats-utils.d.ts +1 -1
- package/dist/core/stats-utils.d.ts.map +1 -1
- package/dist/core/stats-utils.js +4 -2
- package/dist/core/stats-utils.js.map +1 -1
- package/dist/errors/base.cjs +2 -1
- package/dist/errors/base.cjs.map +1 -1
- package/dist/errors/base.d.cts.map +1 -1
- package/dist/errors/base.d.ts.map +1 -1
- package/dist/errors/base.js +2 -1
- package/dist/errors/base.js.map +1 -1
- package/dist/formatters/history/compare.cjs.map +1 -1
- package/dist/formatters/history/compare.d.cts.map +1 -1
- package/dist/formatters/history/compare.d.ts.map +1 -1
- package/dist/formatters/history/compare.js.map +1 -1
- package/dist/formatters/history/list.cjs.map +1 -1
- package/dist/formatters/history/list.d.cts.map +1 -1
- package/dist/formatters/history/list.d.ts.map +1 -1
- package/dist/formatters/history/list.js.map +1 -1
- package/dist/reporters/human.cjs +83 -27
- package/dist/reporters/human.cjs.map +1 -1
- package/dist/reporters/human.d.cts +1 -0
- package/dist/reporters/human.d.cts.map +1 -1
- package/dist/reporters/human.d.ts +1 -0
- package/dist/reporters/human.d.ts.map +1 -1
- package/dist/reporters/human.js +83 -27
- package/dist/reporters/human.js.map +1 -1
- package/dist/reporters/simple.cjs +68 -21
- package/dist/reporters/simple.cjs.map +1 -1
- package/dist/reporters/simple.d.cts +1 -0
- package/dist/reporters/simple.d.cts.map +1 -1
- package/dist/reporters/simple.d.ts +1 -0
- package/dist/reporters/simple.d.ts.map +1 -1
- package/dist/reporters/simple.js +68 -21
- package/dist/reporters/simple.js.map +1 -1
- package/dist/services/config-manager.cjs +1 -1
- package/dist/services/config-manager.cjs.map +1 -1
- package/dist/services/config-manager.d.cts.map +1 -1
- package/dist/services/config-manager.d.ts.map +1 -1
- package/dist/services/config-manager.js +2 -2
- package/dist/services/config-manager.js.map +1 -1
- package/dist/services/file-loader.cjs.map +1 -1
- package/dist/services/file-loader.d.cts.map +1 -1
- package/dist/services/file-loader.d.ts.map +1 -1
- package/dist/services/file-loader.js.map +1 -1
- package/package.json +63 -35
- package/src/adapters/ava-adapter.ts +553 -0
- package/src/adapters/ava-hooks.ts +65 -0
- package/src/adapters/ava-register.ts +15 -0
- package/src/adapters/mocha-adapter.ts +284 -0
- package/src/adapters/node-test-adapter.ts +391 -0
- package/src/adapters/node-test-hooks.ts +71 -0
- package/src/adapters/node-test-register.ts +5 -0
- package/src/adapters/types.ts +281 -0
- package/src/cli/commands/init.ts +25 -17
- package/src/cli/commands/run.ts +9 -2
- package/src/cli/commands/test.ts +546 -0
- package/src/cli/index.ts +81 -1
- package/src/constants.ts +15 -0
- package/src/core/engine.ts +5 -0
- package/src/core/engines/tinybench-engine.ts +213 -141
- package/src/core/stats-utils.ts +5 -3
- package/src/errors/base.ts +3 -2
- package/src/formatters/history/compare.ts +1 -3
- package/src/formatters/history/list.ts +1 -3
- package/src/reporters/human.ts +107 -36
- package/src/reporters/simple.ts +81 -22
- package/src/services/config-manager.ts +4 -5
- package/src/services/file-loader.ts +2 -3
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ModestBench Test Adapter Command
|
|
4
|
+
*
|
|
5
|
+
* Run existing test files as benchmarks by capturing test definitions and
|
|
6
|
+
* executing them through a lightweight benchmark runner.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.handleTestCommand = void 0;
|
|
10
|
+
const node_os_1 = require("node:os");
|
|
11
|
+
const node_os_2 = require("node:os");
|
|
12
|
+
const node_path_1 = require("node:path");
|
|
13
|
+
const node_perf_hooks_1 = require("node:perf_hooks");
|
|
14
|
+
const ava_adapter_js_1 = require("../../adapters/ava-adapter.cjs");
|
|
15
|
+
const mocha_adapter_js_1 = require("../../adapters/mocha-adapter.cjs");
|
|
16
|
+
const node_test_adapter_js_1 = require("../../adapters/node-test-adapter.cjs");
|
|
17
|
+
const types_js_1 = require("../../adapters/types.cjs");
|
|
18
|
+
const cli_js_1 = require("../../types/cli.cjs");
|
|
19
|
+
const core_js_1 = require("../../types/core.cjs");
|
|
20
|
+
const type_guards_js_1 = require("../../utils/type-guards.cjs");
|
|
21
|
+
/**
|
|
22
|
+
* Get a minimal default config for test runs
|
|
23
|
+
*/
|
|
24
|
+
const getDefaultTestConfig = (iterations, warmup, verbose) => ({
|
|
25
|
+
bail: false,
|
|
26
|
+
exclude: [],
|
|
27
|
+
excludeTags: [],
|
|
28
|
+
iterations,
|
|
29
|
+
limitBy: 'iterations',
|
|
30
|
+
metadata: {},
|
|
31
|
+
pattern: [],
|
|
32
|
+
quiet: false,
|
|
33
|
+
reporterConfig: {},
|
|
34
|
+
reporters: ['human'],
|
|
35
|
+
tags: [],
|
|
36
|
+
thresholds: {},
|
|
37
|
+
time: 1000,
|
|
38
|
+
timeout: 30000,
|
|
39
|
+
verbose,
|
|
40
|
+
warmup,
|
|
41
|
+
});
|
|
42
|
+
/**
|
|
43
|
+
* Default iteration count for test benchmarks
|
|
44
|
+
*/
|
|
45
|
+
const DEFAULT_ITERATIONS = 100;
|
|
46
|
+
/**
|
|
47
|
+
* Default warmup iterations
|
|
48
|
+
*/
|
|
49
|
+
const DEFAULT_WARMUP = 5;
|
|
50
|
+
/**
|
|
51
|
+
* Handle test command - run test files as benchmarks
|
|
52
|
+
*/
|
|
53
|
+
const handleTestCommand = async (context, options) => {
|
|
54
|
+
const verbose = options.verbose ?? false;
|
|
55
|
+
const quiet = options.quiet ?? false;
|
|
56
|
+
const iterations = options.iterations ?? DEFAULT_ITERATIONS;
|
|
57
|
+
const warmup = options.warmup ?? DEFAULT_WARMUP;
|
|
58
|
+
// Get the reporter (default to human unless JSON requested)
|
|
59
|
+
const reporterName = options.json ? 'json' : 'human';
|
|
60
|
+
const reporter = context.reporterRegistry.get(reporterName);
|
|
61
|
+
try {
|
|
62
|
+
// Select the appropriate adapter
|
|
63
|
+
const adapter = selectAdapter(options.framework);
|
|
64
|
+
if (verbose && !quiet) {
|
|
65
|
+
console.error(`Using ${options.framework} adapter`);
|
|
66
|
+
}
|
|
67
|
+
// Resolve file paths
|
|
68
|
+
const cwd = options.cwd ?? process.cwd();
|
|
69
|
+
const patterns = options.pattern ?? [];
|
|
70
|
+
if (patterns.length === 0) {
|
|
71
|
+
console.error('Error: At least one test file path is required');
|
|
72
|
+
return cli_js_1.ExitCodes.CONFIG_ERROR;
|
|
73
|
+
}
|
|
74
|
+
// Build config for the run
|
|
75
|
+
const config = getDefaultTestConfig(iterations, warmup, verbose);
|
|
76
|
+
// Initialize run tracking
|
|
77
|
+
const runStartTime = new Date();
|
|
78
|
+
const fileResults = [];
|
|
79
|
+
let hasFailures = false;
|
|
80
|
+
// Build initial run for onStart (will be updated at end)
|
|
81
|
+
const runId = (0, core_js_1.createRunId)(crypto.randomUUID());
|
|
82
|
+
const initialRun = buildBenchmarkRun([], config, runStartTime, runStartTime, runId);
|
|
83
|
+
// Notify reporter of start
|
|
84
|
+
await reporter?.onStart?.(initialRun);
|
|
85
|
+
for (const pattern of patterns) {
|
|
86
|
+
const filePath = (0, node_path_1.resolve)(cwd, pattern);
|
|
87
|
+
const fileStartTime = new Date();
|
|
88
|
+
if (verbose && !quiet) {
|
|
89
|
+
console.error(`\nCapturing tests from: ${filePath}`);
|
|
90
|
+
}
|
|
91
|
+
await reporter?.onFileStart?.(filePath);
|
|
92
|
+
try {
|
|
93
|
+
const captured = await adapter.capture(filePath);
|
|
94
|
+
if (verbose && !quiet) {
|
|
95
|
+
const testCount = countAllTests(captured);
|
|
96
|
+
console.error(` Found ${testCount} test(s)`);
|
|
97
|
+
}
|
|
98
|
+
// Convert to benchmark definition
|
|
99
|
+
const benchmarkDef = (0, types_js_1.capturedToBenchmark)(captured);
|
|
100
|
+
// Run benchmarks and collect suite results
|
|
101
|
+
const suiteResults = [];
|
|
102
|
+
// Execute benchmarks for each suite
|
|
103
|
+
for (const [suiteName, suite] of Object.entries(benchmarkDef.suites)) {
|
|
104
|
+
const suiteStartTime = new Date();
|
|
105
|
+
const taskResults = [];
|
|
106
|
+
await reporter?.onSuiteStart?.(suiteName);
|
|
107
|
+
// Run setup if present
|
|
108
|
+
if (suite.setup) {
|
|
109
|
+
try {
|
|
110
|
+
await suite.setup();
|
|
111
|
+
}
|
|
112
|
+
catch (setupError) {
|
|
113
|
+
const err = (0, type_guards_js_1.isError)(setupError)
|
|
114
|
+
? setupError
|
|
115
|
+
: new Error(String(setupError));
|
|
116
|
+
await reporter?.onError?.(err);
|
|
117
|
+
hasFailures = true;
|
|
118
|
+
if (options.bail) {
|
|
119
|
+
return cli_js_1.ExitCodes.BENCHMARK_FAILURES;
|
|
120
|
+
}
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// Run each benchmark
|
|
125
|
+
for (const [benchName, bench] of Object.entries(suite.benchmarks)) {
|
|
126
|
+
await reporter?.onTaskStart?.(benchName);
|
|
127
|
+
const result = await runBenchmark(benchName, bench.fn, iterations, warmup);
|
|
128
|
+
// Convert to TaskResult format
|
|
129
|
+
const taskResult = convertToTaskResult(result);
|
|
130
|
+
taskResults.push(taskResult);
|
|
131
|
+
// Notify reporter
|
|
132
|
+
await reporter?.onTaskResult?.(taskResult);
|
|
133
|
+
if (result.error) {
|
|
134
|
+
hasFailures = true;
|
|
135
|
+
if (options.bail) {
|
|
136
|
+
// Run teardown before bailing
|
|
137
|
+
if (suite.teardown) {
|
|
138
|
+
try {
|
|
139
|
+
await suite.teardown();
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
// Ignore teardown errors when bailing
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return cli_js_1.ExitCodes.BENCHMARK_FAILURES;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
// Run teardown if present
|
|
150
|
+
if (suite.teardown) {
|
|
151
|
+
try {
|
|
152
|
+
await suite.teardown();
|
|
153
|
+
}
|
|
154
|
+
catch (teardownError) {
|
|
155
|
+
const err = (0, type_guards_js_1.isError)(teardownError)
|
|
156
|
+
? teardownError
|
|
157
|
+
: new Error(String(teardownError));
|
|
158
|
+
await reporter?.onError?.(err);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
const suiteEndTime = new Date();
|
|
162
|
+
const suiteResult = {
|
|
163
|
+
duration: suiteEndTime.getTime() - suiteStartTime.getTime(),
|
|
164
|
+
endTime: suiteEndTime,
|
|
165
|
+
name: suiteName,
|
|
166
|
+
startTime: suiteStartTime,
|
|
167
|
+
tasks: taskResults,
|
|
168
|
+
};
|
|
169
|
+
suiteResults.push(suiteResult);
|
|
170
|
+
await reporter?.onSuiteEnd?.(suiteResult);
|
|
171
|
+
}
|
|
172
|
+
const fileEndTime = new Date();
|
|
173
|
+
const fileResult = {
|
|
174
|
+
duration: fileEndTime.getTime() - fileStartTime.getTime(),
|
|
175
|
+
endTime: fileEndTime,
|
|
176
|
+
filePath,
|
|
177
|
+
startTime: fileStartTime,
|
|
178
|
+
suites: suiteResults,
|
|
179
|
+
};
|
|
180
|
+
fileResults.push(fileResult);
|
|
181
|
+
await reporter?.onFileEnd?.(fileResult);
|
|
182
|
+
}
|
|
183
|
+
catch (captureError) {
|
|
184
|
+
const err = (0, type_guards_js_1.isError)(captureError)
|
|
185
|
+
? captureError
|
|
186
|
+
: new Error(String(captureError));
|
|
187
|
+
await reporter?.onError?.(err);
|
|
188
|
+
hasFailures = true;
|
|
189
|
+
if (options.bail) {
|
|
190
|
+
return cli_js_1.ExitCodes.BENCHMARK_FAILURES;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// Build final run result
|
|
195
|
+
const runEndTime = new Date();
|
|
196
|
+
const run = buildBenchmarkRun(fileResults, config, runStartTime, runEndTime, runId);
|
|
197
|
+
// Notify reporter of end
|
|
198
|
+
await reporter?.onEnd?.(run);
|
|
199
|
+
return hasFailures ? cli_js_1.ExitCodes.BENCHMARK_FAILURES : cli_js_1.ExitCodes.SUCCESS;
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
const err = (0, type_guards_js_1.isError)(error) ? error : new Error(String(error));
|
|
203
|
+
await reporter?.onError?.(err);
|
|
204
|
+
return cli_js_1.ExitCodes.RUNTIME_ERROR;
|
|
205
|
+
}
|
|
206
|
+
};
|
|
207
|
+
exports.handleTestCommand = handleTestCommand;
|
|
208
|
+
/**
|
|
209
|
+
* Run a benchmark for a single test function
|
|
210
|
+
*/
|
|
211
|
+
const runBenchmark = async (name, fn, iterations, warmup) => {
|
|
212
|
+
const times = [];
|
|
213
|
+
try {
|
|
214
|
+
// Warmup phase
|
|
215
|
+
for (let i = 0; i < warmup; i++) {
|
|
216
|
+
await fn();
|
|
217
|
+
}
|
|
218
|
+
// Measurement phase
|
|
219
|
+
for (let i = 0; i < iterations; i++) {
|
|
220
|
+
const start = node_perf_hooks_1.performance.now();
|
|
221
|
+
await fn();
|
|
222
|
+
const end = node_perf_hooks_1.performance.now();
|
|
223
|
+
times.push(end - start);
|
|
224
|
+
}
|
|
225
|
+
// Calculate statistics
|
|
226
|
+
const totalTime = times.reduce((a, b) => a + b, 0);
|
|
227
|
+
const mean = totalTime / times.length;
|
|
228
|
+
const min = Math.min(...times);
|
|
229
|
+
const max = Math.max(...times);
|
|
230
|
+
// Standard deviation
|
|
231
|
+
const squaredDiffs = times.map((t) => Math.pow(t - mean, 2));
|
|
232
|
+
const avgSquaredDiff = squaredDiffs.reduce((a, b) => a + b, 0) / squaredDiffs.length;
|
|
233
|
+
const stdDev = Math.sqrt(avgSquaredDiff);
|
|
234
|
+
// Ops per second
|
|
235
|
+
const opsPerSecond = mean > 0 ? 1000 / mean : 0;
|
|
236
|
+
return {
|
|
237
|
+
iterations,
|
|
238
|
+
max,
|
|
239
|
+
mean,
|
|
240
|
+
min,
|
|
241
|
+
name,
|
|
242
|
+
opsPerSecond,
|
|
243
|
+
stdDev,
|
|
244
|
+
totalTime,
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
return {
|
|
249
|
+
error: (0, type_guards_js_1.isError)(error) ? error : new Error(String(error)),
|
|
250
|
+
iterations: 0,
|
|
251
|
+
max: 0,
|
|
252
|
+
mean: 0,
|
|
253
|
+
min: 0,
|
|
254
|
+
name,
|
|
255
|
+
opsPerSecond: 0,
|
|
256
|
+
stdDev: 0,
|
|
257
|
+
totalTime: 0,
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
|
+
/**
|
|
262
|
+
* Convert internal TestBenchmarkResult to standard TaskResult format
|
|
263
|
+
*
|
|
264
|
+
* Note: Times are converted from milliseconds to nanoseconds
|
|
265
|
+
*/
|
|
266
|
+
const convertToTaskResult = (result) => {
|
|
267
|
+
const MS_TO_NS = 1_000_000;
|
|
268
|
+
// Calculate coefficient of variation (stdDev/mean × 100)
|
|
269
|
+
const cv = result.mean > 0 ? (result.stdDev / result.mean) * 100 : 0;
|
|
270
|
+
// Estimate margin of error (using 95% confidence, ~1.96 * stdErr)
|
|
271
|
+
const stdErr = result.stdDev / Math.sqrt(result.iterations);
|
|
272
|
+
const marginOfError = result.mean > 0 ? ((1.96 * stdErr) / result.mean) * 100 : 0;
|
|
273
|
+
// Variance in ns² = (stdDev in ms)² × (MS_TO_NS)²
|
|
274
|
+
// This is equivalent to (stdDev × MS_TO_NS)² since variance = stdDev²
|
|
275
|
+
const variance = result.stdDev * result.stdDev * MS_TO_NS * MS_TO_NS;
|
|
276
|
+
return {
|
|
277
|
+
cv,
|
|
278
|
+
error: result.error,
|
|
279
|
+
iterations: result.iterations,
|
|
280
|
+
marginOfError,
|
|
281
|
+
max: result.max * MS_TO_NS,
|
|
282
|
+
mean: result.mean * MS_TO_NS,
|
|
283
|
+
min: result.min * MS_TO_NS,
|
|
284
|
+
name: result.name,
|
|
285
|
+
opsPerSecond: result.opsPerSecond,
|
|
286
|
+
// Percentile approximations: without storing all timing samples, we estimate
|
|
287
|
+
// p95/p99 as fractions of max. These are NOT true percentiles from the distribution.
|
|
288
|
+
p95: result.max * MS_TO_NS * 0.95,
|
|
289
|
+
p99: result.max * MS_TO_NS * 0.99,
|
|
290
|
+
stdDev: result.stdDev * MS_TO_NS,
|
|
291
|
+
variance,
|
|
292
|
+
};
|
|
293
|
+
};
|
|
294
|
+
/**
|
|
295
|
+
* Build the final BenchmarkRun result structure
|
|
296
|
+
*/
|
|
297
|
+
const buildBenchmarkRun = (files, config, startTime, endTime, runId) => {
|
|
298
|
+
// Collect all task results for summary
|
|
299
|
+
const allTasks = [];
|
|
300
|
+
for (const file of files) {
|
|
301
|
+
for (const suite of file.suites) {
|
|
302
|
+
allTasks.push(...suite.tasks);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
// Find fastest and slowest
|
|
306
|
+
const validTasks = allTasks.filter((t) => !t.error && t.opsPerSecond > 0);
|
|
307
|
+
const fastest = validTasks.length > 0
|
|
308
|
+
? validTasks.reduce((a, b) => (a.opsPerSecond > b.opsPerSecond ? a : b))
|
|
309
|
+
: null;
|
|
310
|
+
const slowest = validTasks.length > 0
|
|
311
|
+
? validTasks.reduce((a, b) => (a.opsPerSecond < b.opsPerSecond ? a : b))
|
|
312
|
+
: null;
|
|
313
|
+
// Calculate summary
|
|
314
|
+
const summary = {
|
|
315
|
+
failedTasks: allTasks.filter((t) => t.error).length,
|
|
316
|
+
fastest,
|
|
317
|
+
overallMean: validTasks.length > 0
|
|
318
|
+
? validTasks.reduce((sum, t) => sum + t.mean, 0) / validTasks.length
|
|
319
|
+
: 0,
|
|
320
|
+
passedTasks: validTasks.length,
|
|
321
|
+
slowest,
|
|
322
|
+
totalFiles: files.length,
|
|
323
|
+
totalOperations: allTasks.reduce((sum, t) => sum + t.iterations, 0),
|
|
324
|
+
totalSuites: files.reduce((sum, f) => sum + f.suites.length, 0),
|
|
325
|
+
totalTasks: allTasks.length,
|
|
326
|
+
};
|
|
327
|
+
return {
|
|
328
|
+
config,
|
|
329
|
+
duration: endTime.getTime() - startTime.getTime(),
|
|
330
|
+
endTime,
|
|
331
|
+
environment: {
|
|
332
|
+
arch: process.arch,
|
|
333
|
+
availableMemory: (0, node_os_2.freemem)(),
|
|
334
|
+
cpu: {
|
|
335
|
+
cores: (0, node_os_2.cpus)().length,
|
|
336
|
+
model: (0, node_os_2.cpus)()[0]?.model ?? 'unknown',
|
|
337
|
+
speed: (0, node_os_2.cpus)()[0]?.speed ?? 0,
|
|
338
|
+
},
|
|
339
|
+
env: {},
|
|
340
|
+
hostname: (0, node_os_1.hostname)(),
|
|
341
|
+
memory: {
|
|
342
|
+
free: (0, node_os_2.freemem)(),
|
|
343
|
+
total: (0, node_os_2.totalmem)(),
|
|
344
|
+
used: (0, node_os_2.totalmem)() - (0, node_os_2.freemem)(),
|
|
345
|
+
},
|
|
346
|
+
nodeVersion: process.version,
|
|
347
|
+
platform: process.platform,
|
|
348
|
+
},
|
|
349
|
+
files,
|
|
350
|
+
id: runId,
|
|
351
|
+
startTime,
|
|
352
|
+
summary,
|
|
353
|
+
};
|
|
354
|
+
};
|
|
355
|
+
/**
|
|
356
|
+
* Select the appropriate adapter for the framework
|
|
357
|
+
*/
|
|
358
|
+
const selectAdapter = (framework) => {
|
|
359
|
+
switch (framework) {
|
|
360
|
+
case 'ava':
|
|
361
|
+
return new ava_adapter_js_1.AvaAdapter();
|
|
362
|
+
case 'mocha':
|
|
363
|
+
return new mocha_adapter_js_1.MochaAdapter();
|
|
364
|
+
case 'node-test':
|
|
365
|
+
return new node_test_adapter_js_1.NodeTestAdapter();
|
|
366
|
+
default: {
|
|
367
|
+
const _exhaustive = framework;
|
|
368
|
+
throw new Error(`Unknown framework: ${_exhaustive}`);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
};
|
|
372
|
+
/**
|
|
373
|
+
* Count all tests in a captured file
|
|
374
|
+
*/
|
|
375
|
+
const countAllTests = (captured) => {
|
|
376
|
+
let count = captured.rootTests.length;
|
|
377
|
+
for (const suite of captured.rootSuites) {
|
|
378
|
+
count += countTestsInSuite(suite);
|
|
379
|
+
}
|
|
380
|
+
return count;
|
|
381
|
+
};
|
|
382
|
+
/**
|
|
383
|
+
* Count tests in a suite recursively
|
|
384
|
+
*/
|
|
385
|
+
const countTestsInSuite = (suite) => {
|
|
386
|
+
let count = suite.tests.length;
|
|
387
|
+
for (const child of suite.children) {
|
|
388
|
+
count += countTestsInSuite(child);
|
|
389
|
+
}
|
|
390
|
+
return count;
|
|
391
|
+
};
|
|
392
|
+
//# sourceMappingURL=test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../../src/cli/commands/test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ModestBench Test Adapter Command
|
|
3
|
+
*
|
|
4
|
+
* Run existing test files as benchmarks by capturing test definitions and
|
|
5
|
+
* executing them through a lightweight benchmark runner.
|
|
6
|
+
*/
|
|
7
|
+
import type { CliContext } from "../index.cjs";
|
|
8
|
+
import { type TestFramework } from "../../adapters/types.cjs";
|
|
9
|
+
/**
|
|
10
|
+
* Test command options
|
|
11
|
+
*/
|
|
12
|
+
export interface TestOptions {
|
|
13
|
+
/** Bail on first failure */
|
|
14
|
+
bail?: boolean;
|
|
15
|
+
/** Working directory */
|
|
16
|
+
cwd?: string;
|
|
17
|
+
/** Test framework to use */
|
|
18
|
+
framework: TestFramework;
|
|
19
|
+
/** Number of iterations per test */
|
|
20
|
+
iterations?: number;
|
|
21
|
+
/** Output JSON */
|
|
22
|
+
json?: boolean;
|
|
23
|
+
/** Disable color */
|
|
24
|
+
noColor?: boolean;
|
|
25
|
+
/** Test file paths or patterns */
|
|
26
|
+
pattern?: string[];
|
|
27
|
+
/** Quiet mode */
|
|
28
|
+
quiet?: boolean;
|
|
29
|
+
/** Verbose output */
|
|
30
|
+
verbose?: boolean;
|
|
31
|
+
/** Warmup iterations */
|
|
32
|
+
warmup?: number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Handle test command - run test files as benchmarks
|
|
36
|
+
*/
|
|
37
|
+
export declare const handleTestCommand: (context: CliContext, options: TestOptions) => Promise<number>;
|
|
38
|
+
//# sourceMappingURL=test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAeH,OAAO,KAAK,EAAE,UAAU,EAAE,qBAAoB;AAK9C,OAAO,EAKL,KAAK,aAAa,EACnB,iCAAgC;AAyCjC;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,4BAA4B;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,wBAAwB;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,SAAS,EAAE,aAAa,CAAC;IACzB,oCAAoC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,oBAAoB;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,iBAAiB;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,qBAAqB;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wBAAwB;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA0BD;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAC5B,SAAS,UAAU,EACnB,SAAS,WAAW,KACnB,OAAO,CAAC,MAAM,CAuMhB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ModestBench Test Adapter Command
|
|
3
|
+
*
|
|
4
|
+
* Run existing test files as benchmarks by capturing test definitions and
|
|
5
|
+
* executing them through a lightweight benchmark runner.
|
|
6
|
+
*/
|
|
7
|
+
import type { CliContext } from "../index.js";
|
|
8
|
+
import { type TestFramework } from "../../adapters/types.js";
|
|
9
|
+
/**
|
|
10
|
+
* Test command options
|
|
11
|
+
*/
|
|
12
|
+
export interface TestOptions {
|
|
13
|
+
/** Bail on first failure */
|
|
14
|
+
bail?: boolean;
|
|
15
|
+
/** Working directory */
|
|
16
|
+
cwd?: string;
|
|
17
|
+
/** Test framework to use */
|
|
18
|
+
framework: TestFramework;
|
|
19
|
+
/** Number of iterations per test */
|
|
20
|
+
iterations?: number;
|
|
21
|
+
/** Output JSON */
|
|
22
|
+
json?: boolean;
|
|
23
|
+
/** Disable color */
|
|
24
|
+
noColor?: boolean;
|
|
25
|
+
/** Test file paths or patterns */
|
|
26
|
+
pattern?: string[];
|
|
27
|
+
/** Quiet mode */
|
|
28
|
+
quiet?: boolean;
|
|
29
|
+
/** Verbose output */
|
|
30
|
+
verbose?: boolean;
|
|
31
|
+
/** Warmup iterations */
|
|
32
|
+
warmup?: number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Handle test command - run test files as benchmarks
|
|
36
|
+
*/
|
|
37
|
+
export declare const handleTestCommand: (context: CliContext, options: TestOptions) => Promise<number>;
|
|
38
|
+
//# sourceMappingURL=test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAeH,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB;AAK9C,OAAO,EAKL,KAAK,aAAa,EACnB,gCAAgC;AAyCjC;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,4BAA4B;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,wBAAwB;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,SAAS,EAAE,aAAa,CAAC;IACzB,oCAAoC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,oBAAoB;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,iBAAiB;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,qBAAqB;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wBAAwB;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA0BD;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAC5B,SAAS,UAAU,EACnB,SAAS,WAAW,KACnB,OAAO,CAAC,MAAM,CAuMhB,CAAC"}
|