modestbench 0.0.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.
Files changed (275) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/LICENSE.md +55 -0
  3. package/README.md +699 -0
  4. package/dist/bootstrap.cjs +37 -0
  5. package/dist/bootstrap.cjs.map +1 -0
  6. package/dist/bootstrap.d.cts +17 -0
  7. package/dist/bootstrap.d.cts.map +1 -0
  8. package/dist/bootstrap.d.ts +17 -0
  9. package/dist/bootstrap.d.ts.map +1 -0
  10. package/dist/bootstrap.js +33 -0
  11. package/dist/bootstrap.js.map +1 -0
  12. package/dist/cli/commands/history.cjs +459 -0
  13. package/dist/cli/commands/history.cjs.map +1 -0
  14. package/dist/cli/commands/history.d.cts +34 -0
  15. package/dist/cli/commands/history.d.cts.map +1 -0
  16. package/dist/cli/commands/history.d.ts +34 -0
  17. package/dist/cli/commands/history.d.ts.map +1 -0
  18. package/dist/cli/commands/history.js +422 -0
  19. package/dist/cli/commands/history.js.map +1 -0
  20. package/dist/cli/commands/init.cjs +566 -0
  21. package/dist/cli/commands/init.cjs.map +1 -0
  22. package/dist/cli/commands/init.d.cts +26 -0
  23. package/dist/cli/commands/init.d.cts.map +1 -0
  24. package/dist/cli/commands/init.d.ts +26 -0
  25. package/dist/cli/commands/init.d.ts.map +1 -0
  26. package/dist/cli/commands/init.js +562 -0
  27. package/dist/cli/commands/init.js.map +1 -0
  28. package/dist/cli/commands/run.cjs +285 -0
  29. package/dist/cli/commands/run.cjs.map +1 -0
  30. package/dist/cli/commands/run.d.cts +37 -0
  31. package/dist/cli/commands/run.d.cts.map +1 -0
  32. package/dist/cli/commands/run.d.ts +37 -0
  33. package/dist/cli/commands/run.d.ts.map +1 -0
  34. package/dist/cli/commands/run.js +248 -0
  35. package/dist/cli/commands/run.js.map +1 -0
  36. package/dist/cli/index.cjs +523 -0
  37. package/dist/cli/index.cjs.map +1 -0
  38. package/dist/cli/index.d.cts +58 -0
  39. package/dist/cli/index.d.cts.map +1 -0
  40. package/dist/cli/index.d.ts +58 -0
  41. package/dist/cli/index.d.ts.map +1 -0
  42. package/dist/cli/index.js +515 -0
  43. package/dist/cli/index.js.map +1 -0
  44. package/dist/config/manager.cjs +370 -0
  45. package/dist/config/manager.cjs.map +1 -0
  46. package/dist/config/manager.d.cts +46 -0
  47. package/dist/config/manager.d.cts.map +1 -0
  48. package/dist/config/manager.d.ts +46 -0
  49. package/dist/config/manager.d.ts.map +1 -0
  50. package/dist/config/manager.js +333 -0
  51. package/dist/config/manager.js.map +1 -0
  52. package/dist/config/schema.cjs +182 -0
  53. package/dist/config/schema.cjs.map +1 -0
  54. package/dist/config/schema.d.cts +51 -0
  55. package/dist/config/schema.d.cts.map +1 -0
  56. package/dist/config/schema.d.ts +51 -0
  57. package/dist/config/schema.d.ts.map +1 -0
  58. package/dist/config/schema.js +145 -0
  59. package/dist/config/schema.js.map +1 -0
  60. package/dist/constants.cjs +22 -0
  61. package/dist/constants.cjs.map +1 -0
  62. package/dist/constants.d.cts +10 -0
  63. package/dist/constants.d.cts.map +1 -0
  64. package/dist/constants.d.ts +10 -0
  65. package/dist/constants.d.ts.map +1 -0
  66. package/dist/constants.js +19 -0
  67. package/dist/constants.js.map +1 -0
  68. package/dist/core/benchmark-schema.cjs +135 -0
  69. package/dist/core/benchmark-schema.cjs.map +1 -0
  70. package/dist/core/benchmark-schema.d.cts +139 -0
  71. package/dist/core/benchmark-schema.d.cts.map +1 -0
  72. package/dist/core/benchmark-schema.d.ts +139 -0
  73. package/dist/core/benchmark-schema.d.ts.map +1 -0
  74. package/dist/core/benchmark-schema.js +132 -0
  75. package/dist/core/benchmark-schema.js.map +1 -0
  76. package/dist/core/engine.cjs +669 -0
  77. package/dist/core/engine.cjs.map +1 -0
  78. package/dist/core/engine.d.cts +128 -0
  79. package/dist/core/engine.d.cts.map +1 -0
  80. package/dist/core/engine.d.ts +128 -0
  81. package/dist/core/engine.d.ts.map +1 -0
  82. package/dist/core/engine.js +632 -0
  83. package/dist/core/engine.js.map +1 -0
  84. package/dist/core/engines/accurate-engine.cjs +292 -0
  85. package/dist/core/engines/accurate-engine.cjs.map +1 -0
  86. package/dist/core/engines/accurate-engine.d.cts +63 -0
  87. package/dist/core/engines/accurate-engine.d.cts.map +1 -0
  88. package/dist/core/engines/accurate-engine.d.ts +63 -0
  89. package/dist/core/engines/accurate-engine.d.ts.map +1 -0
  90. package/dist/core/engines/accurate-engine.js +288 -0
  91. package/dist/core/engines/accurate-engine.js.map +1 -0
  92. package/dist/core/engines/index.cjs +21 -0
  93. package/dist/core/engines/index.cjs.map +1 -0
  94. package/dist/core/engines/index.d.cts +16 -0
  95. package/dist/core/engines/index.d.cts.map +1 -0
  96. package/dist/core/engines/index.d.ts +16 -0
  97. package/dist/core/engines/index.d.ts.map +1 -0
  98. package/dist/core/engines/index.js +16 -0
  99. package/dist/core/engines/index.js.map +1 -0
  100. package/dist/core/engines/tinybench-engine.cjs +286 -0
  101. package/dist/core/engines/tinybench-engine.cjs.map +1 -0
  102. package/dist/core/engines/tinybench-engine.d.cts +18 -0
  103. package/dist/core/engines/tinybench-engine.d.cts.map +1 -0
  104. package/dist/core/engines/tinybench-engine.d.ts +18 -0
  105. package/dist/core/engines/tinybench-engine.d.ts.map +1 -0
  106. package/dist/core/engines/tinybench-engine.js +282 -0
  107. package/dist/core/engines/tinybench-engine.js.map +1 -0
  108. package/dist/core/error-manager.cjs +303 -0
  109. package/dist/core/error-manager.cjs.map +1 -0
  110. package/dist/core/error-manager.d.cts +77 -0
  111. package/dist/core/error-manager.d.cts.map +1 -0
  112. package/dist/core/error-manager.d.ts +77 -0
  113. package/dist/core/error-manager.d.ts.map +1 -0
  114. package/dist/core/error-manager.js +299 -0
  115. package/dist/core/error-manager.js.map +1 -0
  116. package/dist/core/loader.cjs +287 -0
  117. package/dist/core/loader.cjs.map +1 -0
  118. package/dist/core/loader.d.cts +55 -0
  119. package/dist/core/loader.d.cts.map +1 -0
  120. package/dist/core/loader.d.ts +55 -0
  121. package/dist/core/loader.d.ts.map +1 -0
  122. package/dist/core/loader.js +250 -0
  123. package/dist/core/loader.js.map +1 -0
  124. package/dist/core/stats-utils.cjs +99 -0
  125. package/dist/core/stats-utils.cjs.map +1 -0
  126. package/dist/core/stats-utils.d.cts +50 -0
  127. package/dist/core/stats-utils.d.cts.map +1 -0
  128. package/dist/core/stats-utils.d.ts +50 -0
  129. package/dist/core/stats-utils.d.ts.map +1 -0
  130. package/dist/core/stats-utils.js +94 -0
  131. package/dist/core/stats-utils.js.map +1 -0
  132. package/dist/index.cjs +64 -0
  133. package/dist/index.cjs.map +1 -0
  134. package/dist/index.d.cts +22 -0
  135. package/dist/index.d.cts.map +1 -0
  136. package/dist/index.d.ts +22 -0
  137. package/dist/index.d.ts.map +1 -0
  138. package/dist/index.js +30 -0
  139. package/dist/index.js.map +1 -0
  140. package/dist/progress/manager.cjs +325 -0
  141. package/dist/progress/manager.cjs.map +1 -0
  142. package/dist/progress/manager.d.cts +125 -0
  143. package/dist/progress/manager.d.cts.map +1 -0
  144. package/dist/progress/manager.d.ts +125 -0
  145. package/dist/progress/manager.d.ts.map +1 -0
  146. package/dist/progress/manager.js +321 -0
  147. package/dist/progress/manager.js.map +1 -0
  148. package/dist/reporters/csv.cjs +250 -0
  149. package/dist/reporters/csv.cjs.map +1 -0
  150. package/dist/reporters/csv.d.cts +92 -0
  151. package/dist/reporters/csv.d.cts.map +1 -0
  152. package/dist/reporters/csv.d.ts +92 -0
  153. package/dist/reporters/csv.d.ts.map +1 -0
  154. package/dist/reporters/csv.js +246 -0
  155. package/dist/reporters/csv.js.map +1 -0
  156. package/dist/reporters/human.cjs +516 -0
  157. package/dist/reporters/human.cjs.map +1 -0
  158. package/dist/reporters/human.d.cts +86 -0
  159. package/dist/reporters/human.d.cts.map +1 -0
  160. package/dist/reporters/human.d.ts +86 -0
  161. package/dist/reporters/human.d.ts.map +1 -0
  162. package/dist/reporters/human.js +509 -0
  163. package/dist/reporters/human.js.map +1 -0
  164. package/dist/reporters/index.cjs +17 -0
  165. package/dist/reporters/index.cjs.map +1 -0
  166. package/dist/reporters/index.d.cts +10 -0
  167. package/dist/reporters/index.d.cts.map +1 -0
  168. package/dist/reporters/index.d.ts +10 -0
  169. package/dist/reporters/index.d.ts.map +1 -0
  170. package/dist/reporters/index.js +10 -0
  171. package/dist/reporters/index.js.map +1 -0
  172. package/dist/reporters/json.cjs +215 -0
  173. package/dist/reporters/json.cjs.map +1 -0
  174. package/dist/reporters/json.d.cts +79 -0
  175. package/dist/reporters/json.d.cts.map +1 -0
  176. package/dist/reporters/json.d.ts +79 -0
  177. package/dist/reporters/json.d.ts.map +1 -0
  178. package/dist/reporters/json.js +211 -0
  179. package/dist/reporters/json.js.map +1 -0
  180. package/dist/reporters/registry.cjs +255 -0
  181. package/dist/reporters/registry.cjs.map +1 -0
  182. package/dist/reporters/registry.d.cts +155 -0
  183. package/dist/reporters/registry.d.cts.map +1 -0
  184. package/dist/reporters/registry.d.ts +155 -0
  185. package/dist/reporters/registry.d.ts.map +1 -0
  186. package/dist/reporters/registry.js +249 -0
  187. package/dist/reporters/registry.js.map +1 -0
  188. package/dist/reporters/simple.cjs +328 -0
  189. package/dist/reporters/simple.cjs.map +1 -0
  190. package/dist/reporters/simple.d.cts +51 -0
  191. package/dist/reporters/simple.d.cts.map +1 -0
  192. package/dist/reporters/simple.d.ts +51 -0
  193. package/dist/reporters/simple.d.ts.map +1 -0
  194. package/dist/reporters/simple.js +321 -0
  195. package/dist/reporters/simple.js.map +1 -0
  196. package/dist/schema/modestbench-config.schema.json +162 -0
  197. package/dist/storage/history.cjs +456 -0
  198. package/dist/storage/history.cjs.map +1 -0
  199. package/dist/storage/history.d.cts +99 -0
  200. package/dist/storage/history.d.cts.map +1 -0
  201. package/dist/storage/history.d.ts +99 -0
  202. package/dist/storage/history.d.ts.map +1 -0
  203. package/dist/storage/history.js +452 -0
  204. package/dist/storage/history.js.map +1 -0
  205. package/dist/types/cli.cjs +21 -0
  206. package/dist/types/cli.cjs.map +1 -0
  207. package/dist/types/cli.d.cts +296 -0
  208. package/dist/types/cli.d.cts.map +1 -0
  209. package/dist/types/cli.d.ts +296 -0
  210. package/dist/types/cli.d.ts.map +1 -0
  211. package/dist/types/cli.js +18 -0
  212. package/dist/types/cli.js.map +1 -0
  213. package/dist/types/core.cjs +14 -0
  214. package/dist/types/core.cjs.map +1 -0
  215. package/dist/types/core.d.cts +380 -0
  216. package/dist/types/core.d.cts.map +1 -0
  217. package/dist/types/core.d.ts +380 -0
  218. package/dist/types/core.d.ts.map +1 -0
  219. package/dist/types/core.js +13 -0
  220. package/dist/types/core.js.map +1 -0
  221. package/dist/types/index.cjs +27 -0
  222. package/dist/types/index.cjs.map +1 -0
  223. package/dist/types/index.d.cts +11 -0
  224. package/dist/types/index.d.cts.map +1 -0
  225. package/dist/types/index.d.ts +11 -0
  226. package/dist/types/index.d.ts.map +1 -0
  227. package/dist/types/index.js +11 -0
  228. package/dist/types/index.js.map +1 -0
  229. package/dist/types/interfaces.cjs +10 -0
  230. package/dist/types/interfaces.cjs.map +1 -0
  231. package/dist/types/interfaces.d.cts +381 -0
  232. package/dist/types/interfaces.d.cts.map +1 -0
  233. package/dist/types/interfaces.d.ts +381 -0
  234. package/dist/types/interfaces.d.ts.map +1 -0
  235. package/dist/types/interfaces.js +9 -0
  236. package/dist/types/interfaces.js.map +1 -0
  237. package/dist/types/utility.cjs +92 -0
  238. package/dist/types/utility.cjs.map +1 -0
  239. package/dist/types/utility.d.cts +330 -0
  240. package/dist/types/utility.d.cts.map +1 -0
  241. package/dist/types/utility.d.ts +330 -0
  242. package/dist/types/utility.d.ts.map +1 -0
  243. package/dist/types/utility.js +78 -0
  244. package/dist/types/utility.js.map +1 -0
  245. package/package.json +211 -0
  246. package/src/bootstrap.ts +35 -0
  247. package/src/cli/commands/history.ts +569 -0
  248. package/src/cli/commands/init.ts +658 -0
  249. package/src/cli/commands/run.ts +346 -0
  250. package/src/cli/index.ts +642 -0
  251. package/src/config/manager.ts +387 -0
  252. package/src/config/schema.ts +188 -0
  253. package/src/constants.ts +21 -0
  254. package/src/core/benchmark-schema.ts +185 -0
  255. package/src/core/engine.ts +888 -0
  256. package/src/core/engines/accurate-engine.ts +408 -0
  257. package/src/core/engines/index.ts +16 -0
  258. package/src/core/engines/tinybench-engine.ts +335 -0
  259. package/src/core/error-manager.ts +372 -0
  260. package/src/core/loader.ts +324 -0
  261. package/src/core/stats-utils.ts +135 -0
  262. package/src/index.ts +46 -0
  263. package/src/progress/manager.ts +415 -0
  264. package/src/reporters/csv.ts +368 -0
  265. package/src/reporters/human.ts +707 -0
  266. package/src/reporters/index.ts +10 -0
  267. package/src/reporters/json.ts +302 -0
  268. package/src/reporters/registry.ts +349 -0
  269. package/src/reporters/simple.ts +459 -0
  270. package/src/storage/history.ts +600 -0
  271. package/src/types/cli.ts +312 -0
  272. package/src/types/core.ts +414 -0
  273. package/src/types/index.ts +18 -0
  274. package/src/types/interfaces.ts +451 -0
  275. package/src/types/utility.ts +446 -0
@@ -0,0 +1,288 @@
1
+ /**
2
+ * AccurateEngine - High-accuracy benchmark execution implementation
3
+ *
4
+ * Concrete implementation of ModestBenchEngine using measurement techniques
5
+ * adapted from bench-node for improved accuracy. Uses V8 optimization guards
6
+ * and array-based sample collection with IQR outlier removal.
7
+ *
8
+ * **Requirements:**
9
+ *
10
+ * - Node.js >= 20
11
+ * - --allow-natives-syntax flag (for V8 optimization guards)
12
+ *
13
+ * **Key Features:**
14
+ *
15
+ * - V8NeverOptimize guards prevent JIT optimization artifacts
16
+ * - Adaptive iteration calculation based on operation duration
17
+ * - IQR-based outlier removal for improved stability
18
+ * - Comprehensive statistics (mean, stdDev, variance, CV, percentiles)
19
+ * - Full ModestBench feature support (progress, abort, filtering)
20
+ */
21
+ import { ModestBenchEngine } from "../engine.js";
22
+ import { calculateStatistics, removeOutliersIQR } from "../stats-utils.js";
23
+ /**
24
+ * AccurateEngine - High-accuracy benchmarking with V8 optimization guards
25
+ */
26
+ export class AccurateEngine extends ModestBenchEngine {
27
+ /**
28
+ * Maximum iterations per round to prevent overwhelming Node.js test runner
29
+ * and excessive memory usage
30
+ */
31
+ static MAX_ITERATIONS_PER_ROUND = 10000;
32
+ hasCheckedNativeSyntax = false;
33
+ nativeSyntaxErrorShown = false;
34
+ nativeSyntaxSupported = false;
35
+ /**
36
+ * Execute a single benchmark task using accurate measurement techniques
37
+ *
38
+ * This is the main integration point with ModestBench's engine abstraction.
39
+ */
40
+ async executeBenchmarkTask(taskName, taskData, config, _reporters = [], signal) {
41
+ try {
42
+ if (!taskData.fn || typeof taskData.fn !== 'function') {
43
+ throw new Error('Benchmark task must have a "fn" function property');
44
+ }
45
+ // Check for V8 native syntax support
46
+ const useOptGuards = this.checkNativeSyntax();
47
+ // Show helpful error if native syntax not available
48
+ if (!useOptGuards && !this.nativeSyntaxErrorShown) {
49
+ if (!config.quiet) {
50
+ console.warn('\n⚠️ AccurateEngine requires --allow-natives-syntax flag for best accuracy.', '\nRunning in fallback mode (reduced accuracy).', '\n\nTo enable V8 optimization guards:', '\n node --allow-natives-syntax --test', '\n or add to package.json: "test": "node --allow-natives-syntax ..."', '\n');
51
+ }
52
+ this.nativeSyntaxErrorShown = true;
53
+ }
54
+ // Execute benchmark with or without opt guards
55
+ const rawSamples = useOptGuards
56
+ ? await this.executeBenchmarkWithOptGuards(taskData.fn, config, signal)
57
+ : await this.executeBenchmarkBasic(taskData.fn, config, signal);
58
+ // Check if aborted
59
+ if (signal?.aborted) {
60
+ return {
61
+ cv: 0,
62
+ error: new Error('Benchmark aborted by user signal'),
63
+ iterations: rawSamples.length,
64
+ marginOfError: 0,
65
+ max: 0,
66
+ mean: 0,
67
+ metadata: taskData.metadata ?? {},
68
+ min: 0,
69
+ name: taskName,
70
+ opsPerSecond: 0,
71
+ p95: 0,
72
+ p99: 0,
73
+ stdDev: 0,
74
+ ...(taskData.tags ? { tags: taskData.tags } : {}),
75
+ variance: 0,
76
+ };
77
+ }
78
+ // Remove outliers using IQR method
79
+ const samples = removeOutliersIQR(rawSamples);
80
+ // Calculate statistics
81
+ const stats = calculateStatistics(samples);
82
+ // Transform to TaskResult
83
+ const taskResult = {
84
+ cv: stats.cv,
85
+ iterations: samples.length,
86
+ marginOfError: stats.marginOfError,
87
+ max: stats.max,
88
+ mean: stats.mean, // nanoseconds
89
+ metadata: taskData.metadata ?? {},
90
+ min: stats.min,
91
+ name: taskName,
92
+ opsPerSecond: 1e9 / stats.mean, // Convert ns to ops/sec
93
+ p95: stats.p95,
94
+ p99: stats.p99,
95
+ stdDev: stats.stdDev,
96
+ variance: stats.variance,
97
+ ...(taskData.tags ? { tags: taskData.tags } : {}),
98
+ };
99
+ return taskResult;
100
+ }
101
+ catch (error) {
102
+ const executionError = error instanceof Error ? error : new Error(String(error));
103
+ const errorResult = {
104
+ cv: 0,
105
+ error: executionError,
106
+ iterations: 0,
107
+ marginOfError: 0,
108
+ max: 0,
109
+ mean: 0,
110
+ metadata: taskData.metadata ?? {},
111
+ min: 0,
112
+ name: taskName,
113
+ opsPerSecond: 0,
114
+ p95: 0,
115
+ p99: 0,
116
+ stdDev: 0,
117
+ ...(taskData.tags ? { tags: taskData.tags } : {}),
118
+ variance: 0,
119
+ };
120
+ return errorResult;
121
+ }
122
+ }
123
+ /**
124
+ * Calculate initial iterations based on benchmark characteristics Adapted
125
+ * from bench-node's getInitialIterations algorithm
126
+ */
127
+ async calculateInitialIterations(fn, targetTime) {
128
+ // eslint-disable-next-line @typescript-eslint/unbound-method
129
+ const timer = process.hrtime.bigint;
130
+ const MIN_RESOLUTION = 0.5; // nanoseconds
131
+ const SCALE = 1e9; // ns to seconds
132
+ // Run a quick test with 30 iterations
133
+ const testIterations = 30;
134
+ const start = timer();
135
+ for (let i = 0; i < testIterations; i++) {
136
+ fn();
137
+ }
138
+ const duration = Number(timer() - start);
139
+ const durationPerOp = Math.max(MIN_RESOLUTION, duration / testIterations);
140
+ // Calculate how many iterations we need for targetTime
141
+ const totalOpsForTargetTime = targetTime / (durationPerOp / SCALE);
142
+ return Math.min(Number.MAX_SAFE_INTEGER, Math.max(1, Math.round(totalOpsForTargetTime)));
143
+ }
144
+ /**
145
+ * Check if V8 native syntax is available
146
+ */
147
+ checkNativeSyntax() {
148
+ if (this.hasCheckedNativeSyntax) {
149
+ return this.nativeSyntaxSupported;
150
+ }
151
+ try {
152
+ // Try to use a V8 intrinsic - this is the definitive test
153
+ // Must create AND execute the function to test if syntax is available
154
+ // SAFETY: This string is hardcoded and never influenced by user input.
155
+ // We use new Function() specifically to test V8 intrinsics support.
156
+ // eslint-disable-next-line @typescript-eslint/no-implied-eval, @typescript-eslint/no-unsafe-call
157
+ new Function('%NeverOptimizeFunction(() => {})')();
158
+ this.nativeSyntaxSupported = true;
159
+ }
160
+ catch {
161
+ this.nativeSyntaxSupported = false;
162
+ }
163
+ this.hasCheckedNativeSyntax = true;
164
+ return this.nativeSyntaxSupported;
165
+ }
166
+ /**
167
+ * Execute benchmark WITHOUT V8 optimization guards (fallback)
168
+ */
169
+ async executeBenchmarkBasic(fn, config, signal) {
170
+ // eslint-disable-next-line @typescript-eslint/unbound-method
171
+ const timer = process.hrtime.bigint;
172
+ const samples = [];
173
+ const SCALE = 1e9;
174
+ const targetTime = config.time / 1000;
175
+ const initialIterations = await this.calculateInitialIterations(fn, targetTime);
176
+ if (config.warmup > 0) {
177
+ const warmupTime = Math.min(config.warmup / 1000, 0.05);
178
+ await this.runWarmup(fn, initialIterations, warmupTime);
179
+ }
180
+ const maxDuration = (config.time / 1000) * SCALE;
181
+ let timeSpent = 0;
182
+ let iterations = initialIterations;
183
+ while (timeSpent < maxDuration || samples.length < config.iterations) {
184
+ if (signal?.aborted) {
185
+ break;
186
+ }
187
+ const start = timer();
188
+ for (let i = 0; i < iterations; i++) {
189
+ fn();
190
+ }
191
+ const duration = Number(timer() - start);
192
+ const durationPerOp = duration / iterations;
193
+ samples.push(durationPerOp);
194
+ timeSpent += duration;
195
+ if (samples.length % 100 === 0) {
196
+ this.progressManager.forceUpdate();
197
+ }
198
+ const remainingTime = Math.max(0, (maxDuration - timeSpent) / SCALE);
199
+ iterations = Math.round(remainingTime / (durationPerOp / SCALE));
200
+ iterations = Math.max(1, Math.min(AccurateEngine.MAX_ITERATIONS_PER_ROUND, iterations));
201
+ }
202
+ return samples;
203
+ }
204
+ /**
205
+ * Execute benchmark WITH V8 optimization guards (more accurate)
206
+ */
207
+ async executeBenchmarkWithOptGuards(fn, config, signal) {
208
+ // eslint-disable-next-line @typescript-eslint/unbound-method
209
+ const timer = process.hrtime.bigint;
210
+ const samples = [];
211
+ const SCALE = 1e9;
212
+ // Calculate iterations based on config
213
+ const targetTime = config.time / 1000; // ms to seconds
214
+ const initialIterations = await this.calculateInitialIterations(fn, targetTime);
215
+ // Run warmup
216
+ if (config.warmup > 0) {
217
+ const warmupTime = Math.min(config.warmup / 1000, 0.05); // Max 50ms warmup
218
+ await this.runWarmup(fn, initialIterations, warmupTime);
219
+ }
220
+ // Create DoNotOptimize wrapper using V8 intrinsics
221
+ // This prevents V8 from optimizing away the benchmark code
222
+ // eslint-disable-next-line @typescript-eslint/no-implied-eval
223
+ const DoNotOptimize = new Function('x', 'return x');
224
+ // eslint-disable-next-line @typescript-eslint/no-implied-eval
225
+ const NeverOptimize = new Function('fn', '%NeverOptimizeFunction(fn); return fn;');
226
+ // eslint-disable-next-line new-cap, @typescript-eslint/no-unsafe-call
227
+ const guardedDoNotOptimize = NeverOptimize(DoNotOptimize);
228
+ const maxDuration = (config.time / 1000) * SCALE;
229
+ let timeSpent = 0;
230
+ let iterations = initialIterations;
231
+ // Main benchmark loop
232
+ while (timeSpent < maxDuration || samples.length < config.iterations) {
233
+ if (signal?.aborted) {
234
+ break;
235
+ }
236
+ const start = timer();
237
+ for (let i = 0; i < iterations; i++) {
238
+ const result = fn();
239
+ guardedDoNotOptimize(result); // Prevent optimization
240
+ }
241
+ const duration = Number(timer() - start);
242
+ const durationPerOp = duration / iterations;
243
+ samples.push(durationPerOp);
244
+ timeSpent += duration;
245
+ // Update progress every 100 samples
246
+ if (samples.length % 100 === 0) {
247
+ this.progressManager.forceUpdate();
248
+ }
249
+ // Adjust iterations for next round
250
+ const remainingTime = Math.max(0, (maxDuration - timeSpent) / SCALE);
251
+ iterations = Math.round(remainingTime / (durationPerOp / SCALE));
252
+ iterations = Math.max(1, Math.min(AccurateEngine.MAX_ITERATIONS_PER_ROUND, iterations));
253
+ }
254
+ return samples;
255
+ }
256
+ /**
257
+ * Run warmup phase Adapted from bench-node's runWarmup algorithm
258
+ */
259
+ async runWarmup(
260
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
261
+ fn, initialIterations, warmupTime) {
262
+ // eslint-disable-next-line @typescript-eslint/unbound-method
263
+ const timer = process.hrtime.bigint;
264
+ const MIN_RESOLUTION = 0.5;
265
+ const SCALE = 1e9;
266
+ const maxDuration = warmupTime * SCALE;
267
+ const minSamples = 10;
268
+ let timeSpent = 0n;
269
+ let samples = 0;
270
+ let iterations = Math.min(initialIterations, AccurateEngine.MAX_ITERATIONS_PER_ROUND);
271
+ while (Number(timeSpent) < maxDuration || samples <= minSamples) {
272
+ const start = timer();
273
+ for (let i = 0; i < iterations; i++) {
274
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call
275
+ fn();
276
+ }
277
+ const duration = timer() - start;
278
+ timeSpent += duration;
279
+ samples++;
280
+ // Adjust iterations for next round
281
+ const durationPerOp = Math.max(MIN_RESOLUTION, Number(duration) / iterations);
282
+ const remainingTime = Math.max(0, (maxDuration - Number(timeSpent)) / SCALE);
283
+ iterations = Math.round(remainingTime / (durationPerOp / SCALE));
284
+ iterations = Math.max(1, Math.min(AccurateEngine.MAX_ITERATIONS_PER_ROUND, iterations));
285
+ }
286
+ }
287
+ }
288
+ //# sourceMappingURL=accurate-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accurate-engine.js","sourceRoot":"","sources":["../../../src/core/engines/accurate-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ /**
3
+ * Benchmark Engine Implementations
4
+ *
5
+ * Concrete implementations of the ModestBenchEngine abstract class using
6
+ * different underlying benchmark libraries.
7
+ *
8
+ * Available engines:
9
+ *
10
+ * - TinybenchEngine: Default engine using tinybench library
11
+ * - AccurateEngine: High-accuracy engine with V8 optimization guards
12
+ *
13
+ * @packageDocumentation
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.TinybenchEngine = exports.AccurateEngine = void 0;
17
+ var accurate_engine_js_1 = require("./accurate-engine.cjs");
18
+ Object.defineProperty(exports, "AccurateEngine", { enumerable: true, get: function () { return accurate_engine_js_1.AccurateEngine; } });
19
+ var tinybench_engine_js_1 = require("./tinybench-engine.cjs");
20
+ Object.defineProperty(exports, "TinybenchEngine", { enumerable: true, get: function () { return tinybench_engine_js_1.TinybenchEngine; } });
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/engines/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;;AAEH,4DAAsD;AAA7C,oHAAA,cAAc,OAAA;AACvB,8DAAwD;AAA/C,sHAAA,eAAe,OAAA"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Benchmark Engine Implementations
3
+ *
4
+ * Concrete implementations of the ModestBenchEngine abstract class using
5
+ * different underlying benchmark libraries.
6
+ *
7
+ * Available engines:
8
+ *
9
+ * - TinybenchEngine: Default engine using tinybench library
10
+ * - AccurateEngine: High-accuracy engine with V8 optimization guards
11
+ *
12
+ * @packageDocumentation
13
+ */
14
+ export { AccurateEngine } from "./accurate-engine.cjs";
15
+ export { TinybenchEngine } from "./tinybench-engine.cjs";
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/engines/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,cAAc,EAAE,8BAA6B;AACtD,OAAO,EAAE,eAAe,EAAE,+BAA8B"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Benchmark Engine Implementations
3
+ *
4
+ * Concrete implementations of the ModestBenchEngine abstract class using
5
+ * different underlying benchmark libraries.
6
+ *
7
+ * Available engines:
8
+ *
9
+ * - TinybenchEngine: Default engine using tinybench library
10
+ * - AccurateEngine: High-accuracy engine with V8 optimization guards
11
+ *
12
+ * @packageDocumentation
13
+ */
14
+ export { AccurateEngine } from "./accurate-engine.js";
15
+ export { TinybenchEngine } from "./tinybench-engine.js";
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/engines/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,cAAc,EAAE,6BAA6B;AACtD,OAAO,EAAE,eAAe,EAAE,8BAA8B"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Benchmark Engine Implementations
3
+ *
4
+ * Concrete implementations of the ModestBenchEngine abstract class using
5
+ * different underlying benchmark libraries.
6
+ *
7
+ * Available engines:
8
+ *
9
+ * - TinybenchEngine: Default engine using tinybench library
10
+ * - AccurateEngine: High-accuracy engine with V8 optimization guards
11
+ *
12
+ * @packageDocumentation
13
+ */
14
+ export { AccurateEngine } from "./accurate-engine.js";
15
+ export { TinybenchEngine } from "./tinybench-engine.js";
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/engines/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,cAAc,EAAE,6BAA6B;AACtD,OAAO,EAAE,eAAe,EAAE,8BAA8B"}