modestbench 0.5.0 → 0.6.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.
Files changed (82) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/adapters/jest-adapter.cjs +496 -0
  3. package/dist/adapters/jest-adapter.cjs.map +1 -0
  4. package/dist/adapters/jest-adapter.d.cts +42 -0
  5. package/dist/adapters/jest-adapter.d.cts.map +1 -0
  6. package/dist/adapters/jest-adapter.d.ts +42 -0
  7. package/dist/adapters/jest-adapter.d.ts.map +1 -0
  8. package/dist/adapters/jest-adapter.js +459 -0
  9. package/dist/adapters/jest-adapter.js.map +1 -0
  10. package/dist/adapters/jest-hooks.cjs +83 -0
  11. package/dist/adapters/jest-hooks.cjs.map +1 -0
  12. package/dist/adapters/jest-hooks.d.cts +24 -0
  13. package/dist/adapters/jest-hooks.d.cts.map +1 -0
  14. package/dist/adapters/jest-hooks.d.ts +24 -0
  15. package/dist/adapters/jest-hooks.d.ts.map +1 -0
  16. package/dist/adapters/jest-hooks.js +78 -0
  17. package/dist/adapters/jest-hooks.js.map +1 -0
  18. package/dist/adapters/jest-register.cjs +17 -0
  19. package/dist/adapters/jest-register.cjs.map +1 -0
  20. package/dist/adapters/jest-register.d.cts +12 -0
  21. package/dist/adapters/jest-register.d.cts.map +1 -0
  22. package/dist/adapters/jest-register.d.ts +12 -0
  23. package/dist/adapters/jest-register.d.ts.map +1 -0
  24. package/dist/adapters/jest-register.js +15 -0
  25. package/dist/adapters/jest-register.js.map +1 -0
  26. package/dist/adapters/types.cjs.map +1 -1
  27. package/dist/adapters/types.d.cts +5 -1
  28. package/dist/adapters/types.d.cts.map +1 -1
  29. package/dist/adapters/types.d.ts +5 -1
  30. package/dist/adapters/types.d.ts.map +1 -1
  31. package/dist/adapters/types.js.map +1 -1
  32. package/dist/cli/commands/test.cjs +3 -0
  33. package/dist/cli/commands/test.cjs.map +1 -1
  34. package/dist/cli/commands/test.d.cts.map +1 -1
  35. package/dist/cli/commands/test.d.ts.map +1 -1
  36. package/dist/cli/commands/test.js +3 -0
  37. package/dist/cli/commands/test.js.map +1 -1
  38. package/dist/cli/index.cjs +2 -2
  39. package/dist/cli/index.cjs.map +1 -1
  40. package/dist/cli/index.js +2 -2
  41. package/dist/cli/index.js.map +1 -1
  42. package/dist/core/engines/tinybench-engine.cjs +1 -1
  43. package/dist/core/engines/tinybench-engine.cjs.map +1 -1
  44. package/dist/core/engines/tinybench-engine.js +1 -1
  45. package/dist/core/engines/tinybench-engine.js.map +1 -1
  46. package/dist/core/stats-utils.cjs +4 -2
  47. package/dist/core/stats-utils.cjs.map +1 -1
  48. package/dist/core/stats-utils.d.cts +1 -1
  49. package/dist/core/stats-utils.d.cts.map +1 -1
  50. package/dist/core/stats-utils.d.ts +1 -1
  51. package/dist/core/stats-utils.d.ts.map +1 -1
  52. package/dist/core/stats-utils.js +4 -2
  53. package/dist/core/stats-utils.js.map +1 -1
  54. package/dist/formatters/history/compare.cjs.map +1 -1
  55. package/dist/formatters/history/compare.d.cts.map +1 -1
  56. package/dist/formatters/history/compare.d.ts.map +1 -1
  57. package/dist/formatters/history/compare.js.map +1 -1
  58. package/dist/formatters/history/list.cjs.map +1 -1
  59. package/dist/formatters/history/list.d.cts.map +1 -1
  60. package/dist/formatters/history/list.d.ts.map +1 -1
  61. package/dist/formatters/history/list.js.map +1 -1
  62. package/dist/services/config-manager.cjs.map +1 -1
  63. package/dist/services/config-manager.d.cts.map +1 -1
  64. package/dist/services/config-manager.d.ts.map +1 -1
  65. package/dist/services/config-manager.js.map +1 -1
  66. package/dist/services/file-loader.cjs.map +1 -1
  67. package/dist/services/file-loader.d.cts.map +1 -1
  68. package/dist/services/file-loader.d.ts.map +1 -1
  69. package/dist/services/file-loader.js.map +1 -1
  70. package/package.json +32 -13
  71. package/src/adapters/jest-adapter.ts +563 -0
  72. package/src/adapters/jest-hooks.ts +82 -0
  73. package/src/adapters/jest-register.ts +16 -0
  74. package/src/adapters/types.ts +5 -1
  75. package/src/cli/commands/test.ts +3 -0
  76. package/src/cli/index.ts +2 -2
  77. package/src/core/engines/tinybench-engine.ts +1 -1
  78. package/src/core/stats-utils.ts +5 -3
  79. package/src/formatters/history/compare.ts +1 -3
  80. package/src/formatters/history/list.ts +1 -3
  81. package/src/services/config-manager.ts +2 -3
  82. package/src/services/file-loader.ts +2 -3
@@ -376,7 +376,7 @@ export class TinybenchEngine extends ModestBenchEngine {
376
376
  return {
377
377
  cv: result.latency.rme, // Use relative margin of error as CV approximation
378
378
  iterations: result.latency.samplesCount,
379
- marginOfError: result.latency.moe,
379
+ marginOfError: result.latency.rme, // rme is already a percentage
380
380
  max: result.latency.max,
381
381
  mean: result.latency.mean,
382
382
  metadata: taskData.metadata ?? {},
@@ -11,7 +11,7 @@
11
11
  export interface SampleStatistics {
12
12
  /** Coefficient of variation (stdDev/mean × 100) */
13
13
  readonly cv: number;
14
- /** Margin of error at 95% confidence */
14
+ /** Relative margin of error at 95% confidence (as percentage) */
15
15
  readonly marginOfError: number;
16
16
  /** Maximum value */
17
17
  readonly max: number;
@@ -79,10 +79,12 @@ export const calculateStatistics = (samples: number[]): SampleStatistics => {
79
79
  // Coefficient of Variation
80
80
  const cv = mean === 0 || samples.length < 2 ? 0 : (stdDev / mean) * 100;
81
81
 
82
- // Margin of Error (95% confidence)
82
+ // Relative Margin of Error (95% confidence) - as percentage
83
+ // Formula: (Z * stdDev / sqrt(n)) / mean * 100
83
84
  const Z = 1.96;
84
- const marginOfError =
85
+ const absoluteMoe =
85
86
  samples.length === 0 ? 0 : (Z * stdDev) / Math.sqrt(samples.length);
87
+ const marginOfError = mean === 0 ? 0 : (absoluteMoe / mean) * 100;
86
88
 
87
89
  // Percentiles (using standard formula: floor((n-1) * p))
88
90
  const p95 = samples[Math.floor((samples.length - 1) * 0.95)] ?? 0;
@@ -13,9 +13,7 @@ import { ansiChars } from '../../utils/ansi.js';
13
13
  /**
14
14
  * Formatter for history compare command
15
15
  */
16
- export class HistoryCompareFormatter
17
- implements HistoryFormatter<CompareResult>
18
- {
16
+ export class HistoryCompareFormatter implements HistoryFormatter<CompareResult> {
19
17
  /**
20
18
  * Format as human-readable comparison
21
19
  */
@@ -12,9 +12,7 @@ import { ansiChars, colorize } from '../../utils/ansi.js';
12
12
  /**
13
13
  * Formatter for history list command
14
14
  */
15
- export class HistoryListFormatter
16
- implements HistoryFormatter<HistoryListResult>
17
- {
15
+ export class HistoryListFormatter implements HistoryFormatter<HistoryListResult> {
18
16
  /**
19
17
  * Format as CSV
20
18
  */
@@ -320,9 +320,8 @@ export class ModestBenchConfigurationManager implements ConfigurationManager {
320
320
  '.ts': async (filepath: string): Promise<unknown> => {
321
321
  // Use cosmiconfig-typescript-loader to load TypeScript files
322
322
  // This works without tsx in the import chain
323
- const { TypeScriptLoader: createTypeScriptLoader } = await import(
324
- 'cosmiconfig-typescript-loader'
325
- );
323
+ const { TypeScriptLoader: createTypeScriptLoader } =
324
+ await import('cosmiconfig-typescript-loader');
326
325
  const loader = createTypeScriptLoader();
327
326
  const { readFile } = await import('node:fs/promises');
328
327
  const content = await readFile(filepath, 'utf-8');
@@ -142,9 +142,8 @@ export class BenchmarkFileLoader implements FileLoader {
142
142
 
143
143
  if (ext === '.ts' || ext === '.mts' || ext === '.cts') {
144
144
  // For TypeScript files, use cosmiconfig-typescript-loader
145
- const { TypeScriptLoader: createTypeScriptLoader } = await import(
146
- 'cosmiconfig-typescript-loader'
147
- );
145
+ const { TypeScriptLoader: createTypeScriptLoader } =
146
+ await import('cosmiconfig-typescript-loader');
148
147
  const loader = createTypeScriptLoader();
149
148
  module = (await loader(filePath, content)) as {
150
149
  [key: string]: unknown;