From c4c89ae960c42a31c8386dd43f6bdf554ef79029 Mon Sep 17 00:00:00 2001 From: Aras Abbasi Date: Mon, 10 Nov 2025 20:31:31 +0100 Subject: [PATCH 1/9] perf: reduce data retention --- src/task.ts | 5 ++++- src/types.ts | 2 +- src/utils.ts | 4 ++-- test/concurrency-iteration-limit.test.ts | 4 ++-- test/statistics.test.ts | 8 ++++---- 5 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/task.ts b/src/task.ts index 9b732a32..6776d3ac 100644 --- a/src/task.ts +++ b/src/task.ts @@ -515,7 +515,7 @@ export class Task extends EventTarget { const latencyStatisticsMean = latencyStatistics.mean let totalTime = 0 - const throughputSamples = [] as unknown as Samples + let throughputSamples: Samples | undefined = [] as unknown as Samples for (const sample of latencySamples) { if (sample !== 0) { @@ -538,6 +538,9 @@ export class Task extends EventTarget { totalTime, } /* eslint-enable perfectionist/sort-objects */ + + latencySamples = undefined // make it eligible for GC + throughputSamples = undefined // make it eligible for GC } else if (this.#aborted) { // If aborted with no samples, still set the aborted flag this.#result = abortedTaskResult diff --git a/src/types.ts b/src/types.ts index 2211d531..99aa7843 100644 --- a/src/types.ts +++ b/src/types.ts @@ -308,7 +308,7 @@ export interface Statistics { /** * samples */ - samples: number[] + samplesCount: number /** * standard deviation diff --git a/src/utils.ts b/src/utils.ts index edd7f002..2e807728 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -438,7 +438,7 @@ export const getStatisticsSorted = (samples: SortedSamples): Statistics => { p995: quantileSorted(samples, 0.995), p999: quantileSorted(samples, 0.999), rme, - samples, + samplesCount: samples.length, sd, sem, variance: vr, @@ -489,7 +489,7 @@ export const defaultConvertTaskResultForConsoleTable: ConsoleTableConverter = ( 'Latency med (ns)': `${formatNumber(mToNs(task.result.latency.p50), 5, 2)} \xb1 ${formatNumber(mToNs(task.result.latency.mad), 5, 2)}`, 'Throughput avg (ops/s)': `${Math.round(task.result.throughput.mean).toString()} \xb1 ${task.result.throughput.rme.toFixed(2)}%`, 'Throughput med (ops/s)': `${Math.round(task.result.throughput.p50).toString()} \xb1 ${Math.round(task.result.throughput.mad).toString()}`, - Samples: task.result.latency.samples.length, + Samples: task.result.latency.samplesCount, } : state !== 'errored' ? { diff --git a/test/concurrency-iteration-limit.test.ts b/test/concurrency-iteration-limit.test.ts index 6159cd0d..69e9eddc 100644 --- a/test/concurrency-iteration-limit.test.ts +++ b/test/concurrency-iteration-limit.test.ts @@ -31,7 +31,7 @@ test('iteration limit not exceeded with task concurrency', async () => { expect(callCount).toBe(10) expect(task.runs).toBe(10) - expect(task.result.latency.samples.length).toBe(10) + expect(task.result.latency.samplesCount).toBe(10) }) test('iteration limit not exceeded with high concurrency', async () => { @@ -62,7 +62,7 @@ test('iteration limit not exceeded with high concurrency', async () => { expect(callCount).toBe(100) expect(task.runs).toBe(100) - expect(task.result.latency.samples.length).toBe(100) + expect(task.result.latency.samplesCount).toBe(100) }) test('iteration limit edge case - limit equals threshold', async () => { diff --git a/test/statistics.test.ts b/test/statistics.test.ts index 2c46fca3..a5de32f2 100644 --- a/test/statistics.test.ts +++ b/test/statistics.test.ts @@ -25,7 +25,7 @@ test('statistics (async)', async () => { expect(fooTask.result.period).toBeTypeOf('number') // latency statistics expect(fooTask.result.latency).toBeTypeOf('object') - expect(Array.isArray(fooTask.result.latency.samples)).toBe(true) + expect(fooTask.result.latency.samplesCount).toBeTypeOf('number') expect(fooTask.result.latency.min).toBeTypeOf('number') expect(fooTask.result.latency.max).toBeTypeOf('number') expect(fooTask.result.latency.mean).toBeTypeOf('number') @@ -45,7 +45,7 @@ test('statistics (async)', async () => { expect(fooTask.result.latency.p999).toBeTypeOf('number') // throughput statistics expect(fooTask.result.throughput).toBeTypeOf('object') - expect(Array.isArray(fooTask.result.throughput.samples)).toBe(true) + expect(fooTask.result.throughput.samplesCount).toBeTypeOf('number') expect(fooTask.result.throughput.max).toBeTypeOf('number') expect(fooTask.result.throughput.mean).toBeTypeOf('number') expect(fooTask.result.throughput.variance).toBeTypeOf('number') @@ -86,7 +86,7 @@ test('statistics (sync)', () => { expect(fooTask.result.period).toBeTypeOf('number') // latency statistics expect(fooTask.result.latency).toBeTypeOf('object') - expect(Array.isArray(fooTask.result.latency.samples)).toBe(true) + expect(fooTask.result.latency.samplesCount).toBeTypeOf('number') expect(fooTask.result.latency.min).toBeTypeOf('number') expect(fooTask.result.latency.max).toBeTypeOf('number') expect(fooTask.result.latency.mean).toBeTypeOf('number') @@ -106,7 +106,7 @@ test('statistics (sync)', () => { expect(fooTask.result.latency.p999).toBeTypeOf('number') // throughput statistics expect(fooTask.result.throughput).toBeTypeOf('object') - expect(Array.isArray(fooTask.result.throughput.samples)).toBe(true) + expect(fooTask.result.throughput.samplesCount).toBeTypeOf('number') expect(fooTask.result.throughput.max).toBeTypeOf('number') expect(fooTask.result.throughput.mean).toBeTypeOf('number') expect(fooTask.result.throughput.variance).toBeTypeOf('number') From 8fdc92a70498fdff6a42236dbcc2dc13e47b5673 Mon Sep 17 00:00:00 2001 From: Aras Abbasi Date: Mon, 10 Nov 2025 21:29:22 +0100 Subject: [PATCH 2/9] Update src/task.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/task.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/task.ts b/src/task.ts index 6776d3ac..225347c1 100644 --- a/src/task.ts +++ b/src/task.ts @@ -539,8 +539,6 @@ export class Task extends EventTarget { } /* eslint-enable perfectionist/sort-objects */ - latencySamples = undefined // make it eligible for GC - throughputSamples = undefined // make it eligible for GC } else if (this.#aborted) { // If aborted with no samples, still set the aborted flag this.#result = abortedTaskResult From 0999d01b613ce57ec85a13790ca7c47bb8f8875d Mon Sep 17 00:00:00 2001 From: Aras Abbasi Date: Mon, 10 Nov 2025 22:01:21 +0100 Subject: [PATCH 3/9] fix lint --- src/task.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/task.ts b/src/task.ts index 225347c1..202001fe 100644 --- a/src/task.ts +++ b/src/task.ts @@ -515,7 +515,7 @@ export class Task extends EventTarget { const latencyStatisticsMean = latencyStatistics.mean let totalTime = 0 - let throughputSamples: Samples | undefined = [] as unknown as Samples + const throughputSamples: Samples | undefined = [] as unknown as Samples for (const sample of latencySamples) { if (sample !== 0) { @@ -538,7 +538,6 @@ export class Task extends EventTarget { totalTime, } /* eslint-enable perfectionist/sort-objects */ - } else if (this.#aborted) { // If aborted with no samples, still set the aborted flag this.#result = abortedTaskResult From ee030bb07ae9021d5a187b2ff8b4ce842c2503ae Mon Sep 17 00:00:00 2001 From: Aras Abbasi Date: Tue, 11 Nov 2025 12:43:38 +0100 Subject: [PATCH 4/9] add retainSamples option --- README.md | 18 +++++++ src/bench.ts | 3 ++ src/task.ts | 14 ++++-- src/types.ts | 23 ++++++++- src/utils.ts | 13 ++--- test/statistics.test.ts | 105 ++++++++++++++++++++++++++++++++++++++++ 6 files changed, 163 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 2ee535a9..4a1473d4 100644 --- a/README.md +++ b/README.md @@ -157,6 +157,24 @@ bench.concurrency = 'task' // The concurrency mode to determine how tasks are ru await bench.run() ``` +## Retaining Samples + +By default, Tinybench does not retain individual samples (latency measurements) for each task to save memory. + +You can enable samples retention at the bench level by setting the `retainSamples` option to `true` when creating a `Bench` instance: + +```tsts +const bench = new Bench({ retainSamples: true }) +``` + +You can also enable samples retention by setting the `retainSamples` option to `true` when adding a task: + +```ts +bench.add('task with samples', () => { + // Task logic here +}, { retainSamples: true }) +``` + ## Aborting Benchmarks Tinybench supports aborting benchmarks using `AbortSignal` at both the bench and task levels: diff --git a/src/bench.ts b/src/bench.ts index a428bd04..57ca5a05 100644 --- a/src/bench.ts +++ b/src/bench.ts @@ -63,6 +63,8 @@ export class Bench extends EventTarget implements BenchLike { options?: RemoveEventListenerOptionsArgument ) => void + readonly retainSamples: boolean + /** * The JavaScript runtime environment. */ @@ -137,6 +139,7 @@ export class Bench extends EventTarget implements BenchLike { this.teardown = restOptions.teardown ?? emptyFunction this.throws = restOptions.throws ?? false this.signal = restOptions.signal + this.retainSamples = restOptions.retainSamples === true if (this.signal) { this.signal.addEventListener( diff --git a/src/task.ts b/src/task.ts index 9a03bf77..f7b40e8e 100644 --- a/src/task.ts +++ b/src/task.ts @@ -6,22 +6,22 @@ import type { Fn, FnOptions, RemoveEventListenerOptionsArgument, + Samples, TaskEvents, TaskResult, TaskResultRuntimeInfo, } from './types' import { BenchEvent } from './event' -import { withConcurrency } from './utils' import { getStatisticsSorted, invariant, isFnAsyncResource, isPromiseLike, isValidSamples, - type Samples, sortSamples, toError, + withConcurrency } from './utils' const hookNames = ['afterAll', 'beforeAll', 'beforeEach', 'afterEach'] as const @@ -101,6 +101,11 @@ export class Task extends EventTarget { */ #result: TaskResult = notStartedTaskResult + /** + * Retain samples + */ + readonly #retainSamples: boolean + /** * The number of times the task function has been executed */ @@ -119,6 +124,7 @@ export class Task extends EventTarget { this.#fnOpts = fnOpts this.#async = fnOpts.async ?? isFnAsyncResource(fn) this.#signal = fnOpts.signal + this.#retainSamples = fnOpts.retainSamples ?? bench.retainSamples for (const hookName of hookNames) { if (this.#fnOpts[hookName] != null) { @@ -511,7 +517,7 @@ export class Task extends EventTarget { sortSamples(latencySamples) - const latencyStatistics = getStatisticsSorted(latencySamples) + const latencyStatistics = getStatisticsSorted(latencySamples, this.#retainSamples) const latencyStatisticsMean = latencyStatistics.mean let totalTime = 0 @@ -527,7 +533,7 @@ export class Task extends EventTarget { } sortSamples(throughputSamples) - const throughputStatistics = getStatisticsSorted(throughputSamples) + const throughputStatistics = getStatisticsSorted(throughputSamples, this.#bench.retainSamples) /* eslint-disable perfectionist/sort-objects */ this.#result = { diff --git a/src/types.ts b/src/types.ts index c57e32d2..577f65a9 100644 --- a/src/types.ts +++ b/src/types.ts @@ -41,6 +41,7 @@ export interface BenchLike extends EventTarget { listener: EventListener | EventListenerObject | null, options?: RemoveEventListenerOptionsArgument ) => void + retainSamples: boolean runtime: JSRuntime runtimeVersion: string setup: (task: Task, mode: 'run' | 'warmup') => Promise | void @@ -83,6 +84,12 @@ export interface BenchOptions { */ now?: NowFn + /** + * keep samples for statistics calculation + * @default false + */ + retainSamples?: boolean + /** * setup function to run before each benchmark task (cycle) */ @@ -209,6 +216,11 @@ export interface FnOptions { */ beforeEach?: FnHook + /** + * Retain samples for this task, overriding the bench-level retainSamples option + */ + retainSamples?: boolean + /** * An AbortSignal for aborting this specific task * @@ -260,6 +272,13 @@ export interface ResolvedBenchOptions extends BenchOptions { warmupTime: NonNullable } +/** + * A type representing a samples-array with at least one number. + */ +export type Samples = [number, ...number[]] + +export type SortedSamples = Samples & { readonly __sorted__: unique symbol } + /** * The statistics object */ @@ -334,8 +353,10 @@ export interface Statistics { */ rme: number + samples: SortedSamples | undefined + /** - * samples + * samples count */ samplesCount: number diff --git a/src/utils.ts b/src/utils.ts index 2e807728..094fb762 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -5,6 +5,8 @@ import type { Task } from './task' import type { ConsoleTableConverter, Fn, + Samples, + SortedSamples, Statistics, } from './types' @@ -257,13 +259,6 @@ export const isFnAsyncResource = (fn: Fn | null | undefined): boolean => { } } -/** - * A type representing a samples-array with at least one number. - */ -export type Samples = [number, ...number[]] - -export type SortedSamples = Samples & { readonly __sorted__: unique symbol } - /** * Checks if a value is a Samples type. * @param value - value to check @@ -409,9 +404,10 @@ export function absoluteDeviationMedian (samples: SortedSamples, median: number) * Computes the statistics of a sample. * The sample must be sorted. * @param samples - the sorted sample + * @param retainSamples - whether to keep the samples in the statistics * @returns the statistics of the sample */ -export const getStatisticsSorted = (samples: SortedSamples): Statistics => { +export function getStatisticsSorted (samples: SortedSamples, retainSamples: boolean): Statistics { const { mean, vr } = meanAndVariance(samples) const sd = Math.sqrt(vr) const sem = sd / Math.sqrt(samples.length) @@ -438,6 +434,7 @@ export const getStatisticsSorted = (samples: SortedSamples): Statistics => { p995: quantileSorted(samples, 0.995), p999: quantileSorted(samples, 0.999), rme, + samples: retainSamples ? samples : undefined, samplesCount: samples.length, sd, sem, diff --git a/test/statistics.test.ts b/test/statistics.test.ts index a5de32f2..a74564a7 100644 --- a/test/statistics.test.ts +++ b/test/statistics.test.ts @@ -124,3 +124,108 @@ test('statistics (sync)', () => { expect(fooTask.result.throughput.p995).toBeTypeOf('number') expect(fooTask.result.throughput.p999).toBeTypeOf('number') }) + +test('statistics retainSamples true', () => { + const bench = new Bench({ iterations: 32, retainSamples: true, time: 100 }) + bench.add('foo', () => { + // noop + }) + bench.runSync() + + const fooTask = bench.getTask('foo') + expect(fooTask).toBeDefined() + if (!fooTask) return + + expect(fooTask.result).toBeDefined() + + expect(fooTask.result.state).toBe('completed') + if (fooTask.result.state !== 'completed') return + + // latency statistics + expect(fooTask.result.latency).toBeTypeOf('object') + expect(fooTask.result.latency.samples).toBeTypeOf('object') +}) + +test('statistics retainSamples false', () => { + const bench = new Bench({ iterations: 32, retainSamples: false, time: 100 }) + bench.add('foo', () => { + // noop + }) + bench.runSync() + + const fooTask = bench.getTask('foo') + expect(fooTask).toBeDefined() + if (!fooTask) return + + expect(fooTask.result).toBeDefined() + + expect(fooTask.result.state).toBe('completed') + if (fooTask.result.state !== 'completed') return + + // latency statistics + expect(fooTask.result.latency).toBeTypeOf('object') + expect(fooTask.result.latency.samples).toBeTypeOf('undefined') +}) + +test('statistics retainSamples default is false', () => { + const bench = new Bench({ iterations: 32, time: 100 }) + bench.add('foo', () => { + // noop + }) + bench.runSync() + + const fooTask = bench.getTask('foo') + expect(fooTask).toBeDefined() + if (!fooTask) return + + expect(fooTask.result).toBeDefined() + + expect(fooTask.result.state).toBe('completed') + if (fooTask.result.state !== 'completed') return + + // latency statistics + expect(fooTask.result.latency).toBeTypeOf('object') + expect(fooTask.result.latency.samples).toBeTypeOf('undefined') +}) + +test('statistics retainSamples false on bench level but retainSamples true on task level', () => { + const bench = new Bench({ iterations: 32, retainSamples: false, time: 100 }) + bench.add('foo', () => { + // noop + }, { retainSamples: true }) + bench.runSync() + + const fooTask = bench.getTask('foo') + expect(fooTask).toBeDefined() + if (!fooTask) return + + expect(fooTask.result).toBeDefined() + + expect(fooTask.result.state).toBe('completed') + if (fooTask.result.state !== 'completed') return + + // latency statistics + expect(fooTask.result.latency).toBeTypeOf('object') + expect(fooTask.result.latency.samples).toBeTypeOf('object') +}) + +test('statistics retainSamples true on bench level but retainSamples false on task level', () => { + const bench = new Bench({ iterations: 32, retainSamples: true, time: 100 }) + bench.add('foo', () => { + // noop + }, { retainSamples: false }) + bench.runSync() + + const fooTask = bench.getTask('foo') + expect(fooTask).toBeDefined() + if (!fooTask) return + + expect(fooTask.result).toBeDefined() + + expect(fooTask.result.state).toBe('completed') + if (fooTask.result.state !== 'completed') return + + // latency statistics + expect(fooTask.result.latency).toBeTypeOf('object') + expect(fooTask.result.latency.samples).toBeTypeOf('undefined') +}) From 7bc5820b0016e556f609d9eebc7f8ec4899f63fe Mon Sep 17 00:00:00 2001 From: Aras Abbasi Date: Tue, 11 Nov 2025 13:07:52 +0100 Subject: [PATCH 5/9] fix --- src/utils.ts | 2 +- test/utils-absolute-deviation-median.test.ts | 4 +- test/utils-get-statistics-sorted.test.ts | 169 +++++++++++-------- test/utils-mean-and-variance.test.ts | 3 +- test/utils-sort-samples.test.ts | 22 ++- test/utils.ts | 4 +- 6 files changed, 116 insertions(+), 88 deletions(-) diff --git a/src/utils.ts b/src/utils.ts index 094fb762..b7adca71 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -407,7 +407,7 @@ export function absoluteDeviationMedian (samples: SortedSamples, median: number) * @param retainSamples - whether to keep the samples in the statistics * @returns the statistics of the sample */ -export function getStatisticsSorted (samples: SortedSamples, retainSamples: boolean): Statistics { +export function getStatisticsSorted (samples: SortedSamples, retainSamples = false): Statistics { const { mean, vr } = meanAndVariance(samples) const sd = Math.sqrt(vr) const sem = sd / Math.sqrt(samples.length) diff --git a/test/utils-absolute-deviation-median.test.ts b/test/utils-absolute-deviation-median.test.ts index 744c7cb8..50e3f9cf 100644 --- a/test/utils-absolute-deviation-median.test.ts +++ b/test/utils-absolute-deviation-median.test.ts @@ -1,6 +1,8 @@ import { describe, expect, it } from 'vitest' -import { absoluteDeviationMedian, Samples, type SortedSamples } from '../src/utils' +import type { Samples, SortedSamples } from '../src/types' + +import { absoluteDeviationMedian } from '../src/utils' import { toSortedSamples } from './utils' // Helper: calculate median of a sorted array diff --git a/test/utils-get-statistics-sorted.test.ts b/test/utils-get-statistics-sorted.test.ts index c02f3081..92d544f1 100644 --- a/test/utils-get-statistics-sorted.test.ts +++ b/test/utils-get-statistics-sorted.test.ts @@ -2,88 +2,107 @@ import { expect, test } from 'vitest' import { getStatisticsSorted, - type SortedSamples, } from '../src/utils' +import { toSortedSamples } from './utils' test('getStatisticsSorted', () => { - let stats = getStatisticsSorted([ - 1, 2, 3, 4, 5, 6, - ] as unknown as SortedSamples) - expect(stats.min).toBe(1) - expect(stats.max).toBe(6) - expect(stats.df).toBe(5) - expect(stats.critical).toBe(2.57058183661474) - expect(stats.mean).toBe(3.5) - expect(stats.variance).toBe(3.5) - expect(stats.sd).toBe(1.8708286933869707) - expect(stats.sem).toBe(0.7637626158259734) - expect(stats.moe).toBe(1.9633143077276087) - expect(stats.rme).toBe((stats.moe / stats.mean) * 100) - expect(stats.p50).toBe(3.5) - expect(stats.p75).toBe(4.75) - expect(stats.p99).toBe(5.95) - expect(stats.p995).toBe(5.975) - expect(stats.p999).toBe(5.995) - expect(stats.mad).toBe(1.5) - expect(stats.aad).toBe(1.5) - stats = getStatisticsSorted([1, 2, 3, 4, 5, 6, 7] as unknown as SortedSamples) - expect(stats.min).toBe(1) - expect(stats.max).toBe(7) - expect(stats.df).toBe(6) - expect(stats.critical).toBe(2.446911848791681) - expect(stats.mean).toBe(4) - expect(stats.variance).toBe(4.666666666666667) - expect(stats.sd).toBe(2.160246899469287) - expect(stats.sem).toBe(0.816496580927726) - expect(stats.moe).toBe(1.9978951583699485) - expect(stats.rme).toBe((stats.moe / stats.mean) * 100) - expect(stats.p50).toBe(4) - expect(stats.p75).toBe(5.5) - expect(stats.p99).toBe(6.9399999999999995) - expect(stats.p995).toBe(6.97) - expect(stats.p999).toBe(6.994) - expect(stats.mad).toBe(2) - expect(stats.aad).toBe(1.7142857142857142) + let stats = getStatisticsSorted(toSortedSamples([1, 2, 3, 4, 5, 6])) + expect(stats.min, 'min').toBe(1) + expect(stats.max, 'max').toBe(6) + expect(stats.df, 'df').toBe(5) + expect(stats.critical, 'critical').toBe(2.57058183661474) + expect(stats.mean, 'mean').toBe(3.5) + expect(stats.variance, 'variance').toBe(3.5) + expect(stats.sd, 'sd').toBe(1.8708286933869707) + expect(stats.sem, 'sem').toBe(0.7637626158259734) + expect(stats.moe, 'moe').toBe(1.9633143077276087) + expect(stats.rme, 'rme').toBe((stats.moe / stats.mean) * 100) + expect(stats.p50, 'p50').toBe(3.5) + expect(stats.p75, 'p75').toBe(4.75) + expect(stats.p99, 'p99').toBe(5.95) + expect(stats.p995, 'p995').toBe(5.975) + expect(stats.p999, 'p999').toBe(5.995) + expect(stats.mad, 'mad').toBe(1.5) + expect(stats.aad, 'aad').toBe(1.5) + stats = getStatisticsSorted(toSortedSamples([1, 2, 3, 4, 5, 6, 7])) + expect(stats.min, 'min').toBe(1) + expect(stats.max, 'max').toBe(7) + expect(stats.df, 'df').toBe(6) + expect(stats.critical, 'critical').toBe(2.446911848791681) + expect(stats.mean, 'mean').toBe(4) + expect(stats.variance, 'variance').toBe(4.666666666666667) + expect(stats.sd, 'sd').toBe(2.160246899469287) + expect(stats.sem, 'sem').toBe(0.816496580927726) + expect(stats.moe, 'moe').toBe(1.9978951583699485) + expect(stats.rme, 'rme').toBe((stats.moe / stats.mean) * 100) + expect(stats.p50, 'p50').toBe(4) + expect(stats.p75, 'p75').toBe(5.5) + expect(stats.p99, 'p99').toBe(6.9399999999999995) + expect(stats.p995, 'p995').toBe(6.97) + expect(stats.p999, 'p999').toBe(6.994) + expect(stats.mad, 'mad').toBe(2) + expect(stats.aad, 'aad').toBe(1.7142857142857142) }) test('getStatisticsSorted - sample [0]', () => { - const stats = getStatisticsSorted([0] as unknown as SortedSamples) - expect(stats.min).toBe(0) - expect(stats.max).toBe(0) - expect(stats.df).toBe(0) - expect(stats.critical).toBe(12.706204736432102) - expect(stats.mean).toBe(0) - expect(stats.variance).toBe(0) - expect(stats.sd).toBe(0) - expect(stats.sem).toBe(0) - expect(stats.moe).toBe(0) - expect(stats.rme).toBe(Infinity) - expect(stats.p50).toBe(0) - expect(stats.p75).toBe(0) - expect(stats.p99).toBe(0) - expect(stats.p995).toBe(0) - expect(stats.p999).toBe(0) - expect(stats.mad).toBe(0) - expect(stats.aad).toBe(0) + const stats = getStatisticsSorted(toSortedSamples([0])) + expect(stats.min, 'min').toBe(0) + expect(stats.max, 'max').toBe(0) + expect(stats.df, 'df').toBe(0) + expect(stats.critical, 'critical').toBe(12.706204736432102) + expect(stats.mean, 'mean').toBe(0) + expect(stats.variance, 'variance').toBe(0) + expect(stats.sd, 'sd').toBe(0) + expect(stats.sem, 'sem').toBe(0) + expect(stats.moe, 'moe').toBe(0) + expect(stats.rme, 'rme').toBe(Infinity) + expect(stats.p50, 'p50').toBe(0) + expect(stats.p75, 'p75').toBe(0) + expect(stats.p99, 'p99').toBe(0) + expect(stats.p995, 'p995').toBe(0) + expect(stats.p999, 'p999').toBe(0) + expect(stats.mad, 'mad').toBe(0) + expect(stats.aad, 'aad').toBe(0) }) test('getStatisticsSorted - big sample [0, 0, ...]', () => { - const stats = getStatisticsSorted(new Array(2000).fill(0) as unknown as SortedSamples) - expect(stats.min).toBe(0) - expect(stats.max).toBe(0) - expect(stats.df).toBe(1999) - expect(stats.critical).toBe(1.96) - expect(stats.mean).toBe(0) - expect(stats.variance).toBe(0) - expect(stats.sd).toBe(0) - expect(stats.sem).toBe(0) - expect(stats.moe).toBe(0) - expect(stats.rme).toBe(Infinity) - expect(stats.p50).toBe(0) - expect(stats.p75).toBe(0) - expect(stats.p99).toBe(0) - expect(stats.p995).toBe(0) - expect(stats.p999).toBe(0) - expect(stats.mad).toBe(0) - expect(stats.aad).toBe(0) + const stats = getStatisticsSorted(toSortedSamples([0, ...new Array(1999).fill(0)])) + expect(stats.min, 'min').toBe(0) + expect(stats.max, 'max').toBe(0) + expect(stats.df, 'df').toBe(1999) + expect(stats.critical, 'critical').toBe(1.96) + expect(stats.mean, 'mean').toBe(0) + expect(stats.variance, 'variance').toBe(0) + expect(stats.sd, 'sd').toBe(0) + expect(stats.sem, 'sem').toBe(0) + expect(stats.moe, 'moe').toBe(0) + expect(stats.rme, 'rme').toBe(Infinity) + expect(stats.p50, 'p50').toBe(0) + expect(stats.p75, 'p75').toBe(0) + expect(stats.p99, 'p99').toBe(0) + expect(stats.p995, 'p995').toBe(0) + expect(stats.p999, 'p999').toBe(0) + expect(stats.mad, 'mad').toBe(0) + expect(stats.aad, 'aad').toBe(0) +}) + +test('getStatisticsSorted - big sample [0, 1, 2, 3, ...(n+1)[]]', () => { + const stats = getStatisticsSorted(toSortedSamples([0, ...new Array(1999).fill(0).map((_, i) => i + 1)])) + expect(stats.min, 'min').toBe(0) + expect(stats.max, 'max').toBe(1999) + expect(stats.df, 'df').toBe(1999) + expect(stats.critical, 'critical').toBe(1.96) + expect(stats.mean, 'mean').toBe(999.5) + expect(stats.variance, 'variance').toBe(333500) + expect(stats.sd, 'sd').toBe(577.4945887192364) + expect(stats.sem, 'sem').toBe(12.913171570144957) + expect(stats.moe, 'moe').toBe(25.309816277484117) + expect(stats.rme, 'rme').toBe(2.532247751624224) + expect(stats.p50, 'p50').toBeCloseTo(999.5) + expect(stats.p75, 'p75').toBeCloseTo(1499.25) + expect(stats.p99, 'p99').toBeCloseTo(1979.01) + expect(stats.p995, 'p995').toBeCloseTo(1989) + expect(stats.p999, 'p999').toBeCloseTo(1997) + expect(stats.mad, 'mad').toBe(500) + expect(stats.aad, 'aad').toBeCloseTo(500) }) diff --git a/test/utils-mean-and-variance.test.ts b/test/utils-mean-and-variance.test.ts index 9cd77668..6670076d 100644 --- a/test/utils-mean-and-variance.test.ts +++ b/test/utils-mean-and-variance.test.ts @@ -1,6 +1,7 @@ import { describe, expect, it } from 'vitest' -import { meanAndVariance, Samples } from '../src/utils' +import { Samples } from '../src/types' +import { meanAndVariance } from '../src/utils' describe('meanAndVariance()', () => { it('returns 0 for a single sample', () => { diff --git a/test/utils-sort-samples.test.ts b/test/utils-sort-samples.test.ts index 11800464..6bd8b077 100644 --- a/test/utils-sort-samples.test.ts +++ b/test/utils-sort-samples.test.ts @@ -1,18 +1,22 @@ import { expect, test } from 'vitest' import { - type Samples, + isValidSamples, sortSamples } from '../src/utils' test('sortSamples', () => { - const samples: Samples = [1, 2, 3, 4, 5, 0] + const samples: number[] = [1, 2, 3, 4, 5, 0] - expect(sortSamples(samples)).toBe(undefined) // eslint-disable-line - expect(samples[0]).toBe(0) - expect(samples[1]).toBe(1) - expect(samples[2]).toBe(2) - expect(samples[3]).toBe(3) - expect(samples[4]).toBe(4) - expect(samples[5]).toBe(5) + if (isValidSamples(samples)) { + expect(sortSamples(samples)).toBe(undefined) // eslint-disable-line + expect(samples[0]).toBe(0) + expect(samples[1]).toBe(1) + expect(samples[2]).toBe(2) + expect(samples[3]).toBe(3) + expect(samples[4]).toBe(4) + expect(samples[5]).toBe(5) + } else { + throw new Error('Invalid samples') + } }) diff --git a/test/utils.ts b/test/utils.ts index 54e4d9fe..b8b8b09e 100644 --- a/test/utils.ts +++ b/test/utils.ts @@ -1,4 +1,6 @@ -import { type Samples, type SortedSamples, sortFn } from '../src/utils' +import type { Samples, SortedSamples } from '../src/types' + +import { sortFn } from '../src/utils' const nil32 = typeof SharedArrayBuffer !== 'undefined' && typeof Atomics !== 'undefined' && new Int32Array(new SharedArrayBuffer(4)) From ea031f3c4fcbffe21c5f63c11821740507ed849c Mon Sep 17 00:00:00 2001 From: Aras Abbasi Date: Wed, 12 Nov 2025 17:22:18 +0100 Subject: [PATCH 6/9] fix --- src/task.ts | 2 +- src/utils.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/task.ts b/src/task.ts index f7b40e8e..ca7d4b9b 100644 --- a/src/task.ts +++ b/src/task.ts @@ -533,7 +533,7 @@ export class Task extends EventTarget { } sortSamples(throughputSamples) - const throughputStatistics = getStatisticsSorted(throughputSamples, this.#bench.retainSamples) + const throughputStatistics = getStatisticsSorted(throughputSamples, this.#retainSamples) /* eslint-disable perfectionist/sort-objects */ this.#result = { diff --git a/src/utils.ts b/src/utils.ts index 25bfce67..d9ab31bb 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -5,9 +5,9 @@ import type { Task } from './task' import type { ConsoleTableConverter, Fn, + JSRuntime, Samples, SortedSamples, - JSRuntime, Statistics, } from './types' From 9fd8c632eae3f87b907d5ef85d639426133c4d96 Mon Sep 17 00:00:00 2001 From: Aras Abbasi Date: Wed, 12 Nov 2025 17:27:00 +0100 Subject: [PATCH 7/9] fix --- README.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 4a1473d4..68e6b762 100644 --- a/README.md +++ b/README.md @@ -159,15 +159,19 @@ await bench.run() ## Retaining Samples -By default, Tinybench does not retain individual samples (latency measurements) for each task to save memory. +By default Tinybench does not keep the samples for `latency` and `throughput` to +minimize memory usage. Enable sample retention if you need the raw samples for +plotting, custom analysis, or exporting results. -You can enable samples retention at the bench level by setting the `retainSamples` option to `true` when creating a `Bench` instance: +You can enable samples retention at the bench level by setting the +`retainSamples` option to `true` when creating a `Bench` instance: ```tsts const bench = new Bench({ retainSamples: true }) ``` -You can also enable samples retention by setting the `retainSamples` option to `true` when adding a task: +You can also enable samples retention by setting the `retainSamples` option to +`true` when adding a task: ```ts bench.add('task with samples', () => { From 2593aa638961018c224d50a014ae6733df23ff2d Mon Sep 17 00:00:00 2001 From: Aras Abbasi Date: Sat, 15 Nov 2025 21:25:25 +0100 Subject: [PATCH 8/9] fix linting etc. --- docs/assets/hierarchy.js | 2 +- docs/assets/navigation.js | 2 +- docs/assets/search.js | 2 +- docs/classes/Bench.html | 58 ++++++++++--------- docs/classes/Task.html | 24 ++++---- docs/functions/hrtimeNow.html | 2 +- docs/functions/nToMs.html | 2 +- docs/hierarchy.html | 2 +- docs/index.html | 2 +- docs/interfaces/BenchEvent.html | 8 +-- docs/interfaces/BenchLike.html | 38 ++++++------ docs/interfaces/BenchOptions.html | 45 +++++++------- docs/interfaces/EventListenerObject.html | 4 +- docs/interfaces/FnOptions.html | 16 ++--- docs/interfaces/FnReturnedObject.html | 4 +- docs/interfaces/ResolvedBenchOptions.html | 45 +++++++------- docs/interfaces/Statistics.html | 40 +++++++------ docs/interfaces/TaskResultAborted.html | 4 +- .../TaskResultAbortedWithStatistics.html | 12 ++-- docs/interfaces/TaskResultCompleted.html | 12 ++-- docs/interfaces/TaskResultErrored.html | 6 +- docs/interfaces/TaskResultNotStarted.html | 4 +- docs/interfaces/TaskResultRuntimeInfo.html | 6 +- docs/interfaces/TaskResultStarted.html | 4 +- docs/interfaces/TaskResultWithStatistics.html | 10 ++-- docs/types/BenchEvents.html | 2 +- docs/types/BenchEventsWithTask.html | 2 +- docs/types/Concurrency.html | 2 +- docs/types/ConsoleTableConverter.html | 2 +- docs/types/EventListener.html | 2 +- docs/types/Fn.html | 2 +- docs/types/FnHook.html | 2 +- docs/types/Hook.html | 2 +- docs/types/JSRuntime.html | 2 +- docs/types/NowFn.html | 2 +- docs/types/Samples.html | 2 + docs/types/SortedSamples.html | 3 + docs/types/TaskEvents.html | 2 +- docs/types/TaskResult.html | 2 +- docs/variables/now.html | 2 +- src/index.ts | 2 + src/types.ts | 15 ++++- 42 files changed, 219 insertions(+), 183 deletions(-) create mode 100644 docs/types/Samples.html create mode 100644 docs/types/SortedSamples.html diff --git a/docs/assets/hierarchy.js b/docs/assets/hierarchy.js index 5ceb25e0..4e2b5240 100644 --- a/docs/assets/hierarchy.js +++ b/docs/assets/hierarchy.js @@ -1 +1 @@ -window.hierarchyData = "eJydks1OwzAQhN9lzy44fy7yDbgiIRUkDlUOId4qVhy7srdcqrw7MqGhhaImvfhgz8w3a3sP3jkKINdpwllacJYJUTLwuDFYk3Y2gNxDEhdbdQgSHtDWDTBotVUgk/SOwc4bkFCbKgQMt1+Cm4Y6A2zYBAkU1CI6FsNGzyBN+O/UJ93imJwW4pCsLaHfVPUhPOr+BYzieNhoozxakOukjMziD/N5O0w5AfstnUvO+DKyM748Yq8wOPOBakaHc5YJXSI6z4/Qr1VoVxh2hu7fnSdUb5qaF6pIB9L1pRYX3BMLnbzDT+Sj67YGCdXkEqNjIliIs+Arr2D27KcfI89ZVvCy7/tPgswwLg==" \ No newline at end of file +window.hierarchyData = "eJydkjFrwzAQhf/LzUqLJGQXbW3WQiEtdAgeXOuChWUpSJcuwf+9qG5ME1Jid9Fweu9974SOEEOgBHoruGBCSSbLsmIQceewIRt8An0Eng9f9wgantA3LTDorDeguXhgcIgONDSuTgnT/bfgrqXeARuHoIGSWWXHahwMDAQXl6nPtsMpWajilGw9YdzVzSk86/4ETOJ82VpnInrQW15lppKXzJf9uOUM7I90KVlykdnybN8NpuA+0SzocM0yo0tGK/UL/VanboPp4OjxI0RC826pfaWabCLb3Gpxwz2zUMGvFlqHfu+Q0MwuMTlmgsvyKvifT7B49/OPoRSTBa+GYfgCnqkwPA==" \ No newline at end of file diff --git a/docs/assets/navigation.js b/docs/assets/navigation.js index 29685d4f..d41408e6 100644 --- a/docs/assets/navigation.js +++ b/docs/assets/navigation.js @@ -1 +1 @@ -window.navigationData = "eJyVlU9PAjEQxb9Lz0QEBZWbEogahGQh8WA8LMuQrSxT0s4uGuN3N7vA/i1tuc577zfTZrb78csIvokN2BNgELIW2/kUsgELIl8pUO2sfBXSNmIttuG4YoNO9/6vlecWvto0Y2nVlMqwowSQiixHArn2g1PXTK5Cur1+HTLhGzjPSFUrYrYjLlCdpxwNJlA27IQrAgQ5W35BoD+ZxmfCjtE0XK6aER5QLBFWhrHqJhPQAyWiBFbWu9MZTeA5+cQV8UCPK2QTJN08D1Qc0eNSSIKVltVwXYR85xRahrVk3NoNxXYXgf0Muc8NO5JSSCv06HJDTgXNyXe47sLoBvZiJL6FF1wLC7nkdEO7DXzRtBcthvtGFM9hiUk/u8pLWSdcP9x1el09JW1dfbgbtJPFRh0KDGIpAYOfOq0kOVCUiGDhLyMYCkxAEkgNr2mykSsPbp1YEW2kMdbjY7RnnoVoXPOhasvqki651/nxU6iHc8FGmIp987BZ0ZZMN0a/qIXiwjh8ITrGQbExUOyLcOJLnu6MaqPYV5M35VAo08uZlqPrGIPsv9XOxSqgf1vuuhBvShfOhEbw8x8SWjte" \ No newline at end of file +window.navigationData = "eJyVlV1PKjEQhv9Lr8lB8evInRKJGsUESM6F8aIsQ7ayTEk7C8cY/7vZBfazdMpt3/d9Ou1OZ9+/BcF/En1xDxjFoiPWkmLRF1EirQXbzZf/xLRKREcsFc5F/7z396dT5KbSLtuxbNWXyrEPG0AqswoJzEJGh11zuQ7pXV03IS9qCccZmcoi3takNNrjlL3BB8qLfVGWAMG8zT4hcp/M4fNhh+grrlD9iDFQahDmnrKaJh9wDFYnG5izd+cy+sATkqQsqciNK2UfJOu8Mdg0obuZNgRzJ6vlOgn5T1HMFMtkwrYb6NU6Af4MhS8M+2CMNix07wpDjjRNSAZcd2kMA49TJLWCJ1xohlxxhqHDCj6p2pMaI7wjynFYYdLXujYpm4Sz25vzq56bkm1dH9wt2sHCUQcao9QYwOirSatIARSrE5jKWQIDjRswBMbBa5s4cm3gNok1kSMNsRkfIp951Lp1zbtVLutKhuSeJ/un0AwXAkcY6W37sPkil5zIbBK1unS/zKbzSXmMURU5Uta57gdTKiGM3Ut1MXYKx0C9LcMbaVTWu7aLeltPXlRDsck+0qgaXaQY5f/PbiHWAdeX1V2n+tW6wrnQCn78AhtsaCI=" \ No newline at end of file diff --git a/docs/assets/search.js b/docs/assets/search.js index 76a8b7a2..3825f79e 100644 --- a/docs/assets/search.js +++ b/docs/assets/search.js @@ -1 +1 @@ -window.searchData = "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"; \ No newline at end of file +window.searchData = "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"; \ No newline at end of file diff --git a/docs/classes/Bench.html b/docs/classes/Bench.html index a51c8741..9d2fe541 100644 --- a/docs/classes/Bench.html +++ b/docs/classes/Bench.html @@ -1,11 +1,12 @@ Bench | tinybench - v5.1.0
tinybench - v5.1.0
    Preparing search index...

    Class Bench

    The Bench class keeps track of the benchmark tasks and controls them.

    -

    Hierarchy

    • EventTarget
      • Bench

    Implements

    Index

    Constructors

    Hierarchy

    • EventTarget
      • Bench

    Implements

    Index

    Constructors

    Properties

    addEventListener: <K extends BenchEvents>(
        type: K,
        listener: EventListener<K> | EventListenerObject<K, "bench"> | null,
        options?: boolean | AddEventListenerOptions,
    ) => void

    The addEventListener() method of the EventTarget interface sets up a function that will be called whenever the specified event is delivered to the target.

    +

    Constructors

    Properties

    addEventListener: <K extends BenchEvents>(
        type: K,
        listener: EventListener<K> | EventListenerObject<K, "bench"> | null,
        options?: boolean | AddEventListenerOptions,
    ) => void

    The addEventListener() method of the EventTarget interface sets up a function that will be called whenever the specified event is delivered to the target.

    MDN Reference

    -
    concurrency: "task" | "bench" | null = null

    Executes tasks concurrently based on the specified concurrency mode.

    +
    concurrency: "task" | "bench" | null = null

    Executes tasks concurrently based on the specified concurrency mode.

    • When mode is set to null (default), concurrency is disabled.
    • When mode is set to 'task', each task's iterations (calls of a task function) run concurrently.
    • When mode is set to 'bench', different tasks within the bench run concurrently.
    -
    iterations: number

    The amount of executions per task.

    -
    name: string | undefined

    The benchmark name.

    -
    now: () => number

    A function to get a timestamp.

    -
    removeEventListener: <K extends BenchEvents>(
        type: K,
        listener: EventListener<K> | EventListenerObject<K, "bench"> | null,
        options?: boolean | EventListenerOptions,
    ) => void

    Removes a previously registered event listener.

    -
    runtime: JSRuntime

    The JavaScript runtime environment.

    -
    runtimeVersion: string

    The JavaScript runtime version.

    -
    setup: (task: Task, mode: "warmup" | "run") => void | Promise<void>

    A setup function that runs before each task execution.

    -
    signal: AbortSignal | undefined

    An AbortSignal to cancel the benchmark.

    -
    teardown: (task: Task, mode: "warmup" | "run") => void | Promise<void>

    A teardown function that runs after each task execution.

    -
    threshold: number = Infinity

    The maximum number of concurrent tasks to run

    +
    iterations: number

    The amount of executions per task.

    +
    name: string | undefined

    The benchmark name.

    +
    now: () => number

    A function to get a timestamp.

    +
    removeEventListener: <K extends BenchEvents>(
        type: K,
        listener: EventListener<K> | EventListenerObject<K, "bench"> | null,
        options?: boolean | EventListenerOptions,
    ) => void

    Removes a previously registered event listener.

    +
    retainSamples: boolean

    Should samples be retained for further custom processing

    +
    runtime: JSRuntime

    The JavaScript runtime environment.

    +
    runtimeVersion: string

    The JavaScript runtime version.

    +
    setup: (task: Task, mode: "warmup" | "run") => void | Promise<void>

    A setup function that runs before each task execution.

    +
    signal: AbortSignal | undefined

    An AbortSignal to cancel the benchmark.

    +
    teardown: (task: Task, mode: "warmup" | "run") => void | Promise<void>

    A teardown function that runs after each task execution.

    +
    threshold: number = Infinity

    The maximum number of concurrent tasks to run

    Infinity
     
    -
    throws: boolean

    Whether to throw an error if a task function throws

    +
    throws: boolean

    Whether to throw an error if a task function throws

    false
     
    -
    time: number

    The amount of time to run each task.

    -
    warmup: boolean

    Whether to warmup the tasks before running them

    -
    warmupIterations: number

    The amount of warmup iterations per task.

    -
    warmupTime: number

    The amount of time to warmup each task.

    -

    Accessors

    time: number

    The amount of time to run each task.

    +
    warmup: boolean

    Whether to warmup the tasks before running them

    +
    warmupIterations: number

    The amount of warmup iterations per task.

    +
    warmupTime: number

    The amount of time to warmup each task.

    +

    Accessors

    Methods

    Methods

    • add a benchmark task to the task map

      Parameters

      • name: string

        the task name

      • fn: Fn

        the task function

      • fnOpts: FnOptions = {}

        the task function options

      Returns this

      the Bench instance

      if the task already exists

      -
    • The dispatchEvent() method of the EventTarget sends an Event to the object, (synchronously) invoking the affected event listeners in the appropriate order.

      +
    • The dispatchEvent() method of the EventTarget sends an Event to the object, (synchronously) invoking the affected event listeners in the appropriate order.

      MDN Reference

      Parameters

      • event: Event

      Returns boolean

    • get a task based on the task name

      Parameters

      • name: string

        the task name

      Returns Task | undefined

      the Task instance

      -
    • remove a benchmark task from the task map

      +
    • remove a benchmark task from the task map

      Parameters

      • name: string

        the task name

      Returns this

      the Bench instance

      -
    • reset tasks and remove their result

      -

      Returns void

    • reset tasks and remove their result

      +

      Returns void

    • run the added tasks that were registered using the add method

      Returns Promise<Task[]>

      the tasks array

      -
    • run the added tasks that were registered using the add method (sync version)

      +
    • run the added tasks that were registered using the add method (sync version)

      Returns Task[]

      the tasks array

      -
    • table of the tasks results

      Parameters

      • convert: ConsoleTableConverter = defaultConvertTaskResultForConsoleTable

        an optional callback to convert the task result to a table record

      Returns (Record<string, string | number | undefined> | null)[]

      the tasks results as an array of table records

      -
    +
    diff --git a/docs/classes/Task.html b/docs/classes/Task.html index d12d8a5c..f8ee8fb9 100644 --- a/docs/classes/Task.html +++ b/docs/classes/Task.html @@ -1,6 +1,6 @@ Task | tinybench - v5.1.0
    tinybench - v5.1.0
      Preparing search index...

      Class Task

      A class that represents each benchmark task in Tinybench. It keeps track of the results, name, the task function, the number times the task function has been executed, ...

      -

      Hierarchy

      • EventTarget
        • Task
      Index

      Constructors

      Hierarchy

      • EventTarget
        • Task
      Index

      Constructors

      Properties

      Accessors

      name @@ -12,24 +12,24 @@ runSync warmup warmupSync -

      Constructors

      Properties

      addEventListener: <K extends TaskEvents>(
          type: K,
          listener: EventListener<K, "task"> | EventListenerObject<K, "task"> | null,
          options?: boolean | AddEventListenerOptions,
      ) => void

      The addEventListener() method of the EventTarget interface sets up a function that will be called whenever the specified event is delivered to the target.

      +

      Constructors

      Properties

      addEventListener: <K extends TaskEvents>(
          type: K,
          listener: EventListener<K, "task"> | EventListenerObject<K, "task"> | null,
          options?: boolean | AddEventListenerOptions,
      ) => void

      The addEventListener() method of the EventTarget interface sets up a function that will be called whenever the specified event is delivered to the target.

      MDN Reference

      -
      removeEventListener: <K extends TaskEvents>(
          type: K,
          listener: EventListener<K, "task"> | EventListenerObject<K, "task"> | null,
          options?: boolean | EventListenerOptions,
      ) => void

      The removeEventListener() method of the EventTarget interface removes an event listener previously registered with EventTarget.addEventListener() from the target.

      +
      removeEventListener: <K extends TaskEvents>(
          type: K,
          listener: EventListener<K, "task"> | EventListenerObject<K, "task"> | null,
          options?: boolean | EventListenerOptions,
      ) => void

      The removeEventListener() method of the EventTarget interface removes an event listener previously registered with EventTarget.addEventListener() from the target.

      MDN Reference

      -

      Accessors

      • get name(): string

        The name of the task

        +

      Accessors

      • get name(): string

        The name of the task

        Returns string

        the name of the task

        -
      • get runs(): number

        The number of times the task function has been executed

        +
      • get runs(): number

        The number of times the task function has been executed

        Returns number

        the number of times the task function has been executed

        -

      Methods

      • The dispatchEvent() method of the EventTarget sends an Event to the object, (synchronously) invoking the affected event listeners in the appropriate order.

        +

      Methods

      • The dispatchEvent() method of the EventTarget sends an Event to the object, (synchronously) invoking the affected event listeners in the appropriate order.

        MDN Reference

        Parameters

        • event: Event

        Returns boolean

      • Internal

        reset the task to make the Task.runs a zero-value and remove the Task.result object property

        Parameters

        • emit: boolean = true

          whether to emit the reset event or not

          -

        Returns void

      • Internal

        run the current task and write the results in Task.result object property

        +

      Returns void

      • Internal

        run the current task and write the results in Task.result object property

        Returns Promise<Task>

        the current task

        -
      • Internal

        run the current task and write the results in Task.result object property (sync version)

        +
      • Internal

        run the current task and write the results in Task.result object property (sync version)

        Returns this

        the current task

        -
      • Internal

        warmup the current task

        -

        Returns Promise<void>

      • Internal

        warmup the current task (sync version)

        -

        Returns void

      +
      • Internal

        warmup the current task

        +

        Returns Promise<void>

      • Internal

        warmup the current task (sync version)

        +

        Returns void

      diff --git a/docs/functions/hrtimeNow.html b/docs/functions/hrtimeNow.html index d8f60d44..9572d22b 100644 --- a/docs/functions/hrtimeNow.html +++ b/docs/functions/hrtimeNow.html @@ -1,3 +1,3 @@ hrtimeNow | tinybench - v5.1.0
      tinybench - v5.1.0
        Preparing search index...

        Function hrtimeNow

        • Returns the current high resolution timestamp in milliseconds using process.hrtime.bigint().

          Returns number

          the current high resolution timestamp in milliseconds

          -
        +
        diff --git a/docs/functions/nToMs.html b/docs/functions/nToMs.html index 15d52ebe..341591f5 100644 --- a/docs/functions/nToMs.html +++ b/docs/functions/nToMs.html @@ -1,4 +1,4 @@ nToMs | tinybench - v5.1.0
        tinybench - v5.1.0
          Preparing search index...

          Function nToMs

          • Converts nanoseconds to milliseconds.

            Parameters

            • ns: number

              the nanoseconds to convert

            Returns number

            the milliseconds

            -
          +
          diff --git a/docs/hierarchy.html b/docs/hierarchy.html index e89944b5..6c3f78bc 100644 --- a/docs/hierarchy.html +++ b/docs/hierarchy.html @@ -1 +1 @@ -tinybench - v5.1.0
          tinybench - v5.1.0
            Preparing search index...
            +tinybench - v5.1.0
            tinybench - v5.1.0
              Preparing search index...
              diff --git a/docs/index.html b/docs/index.html index 3f3407f6..46fde023 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1 +1 @@ -tinybench - v5.1.0
              tinybench - v5.1.0
                Preparing search index...
                +tinybench - v5.1.0
                tinybench - v5.1.0
                  Preparing search index...
                  diff --git a/docs/interfaces/BenchEvent.html b/docs/interfaces/BenchEvent.html index f6907778..661caefa 100644 --- a/docs/interfaces/BenchEvent.html +++ b/docs/interfaces/BenchEvent.html @@ -1,6 +1,6 @@ BenchEvent | tinybench - v5.1.0
                  tinybench - v5.1.0
                    Preparing search index...

                    Interface BenchEvent<K, M>

                    The BenchEvent class represents events that occur during the benchmarking process.

                    -
                    interface BenchEvent<
                        K extends BenchEvents = BenchEvents,
                        M extends "bench" | "task" = "bench",
                    > {
                        AT_TARGET: 2;
                        bubbles: boolean;
                        BUBBLING_PHASE: 3;
                        cancelable: boolean;
                        cancelBubble: boolean;
                        CAPTURING_PHASE: 1;
                        composed: boolean;
                        currentTarget: EventTarget | null;
                        defaultPrevented: boolean;
                        eventPhase: number;
                        isTrusted: boolean;
                        NONE: 0;
                        returnValue: boolean;
                        srcElement: EventTarget | null;
                        target: EventTarget | null;
                        timeStamp: number;
                        type: K;
                        get error(): K extends "error" ? Error : undefined;
                        get task(): M extends "task"
                            ? Task
                            : K extends BenchEventsWithTask ? Task : undefined;
                        composedPath(): EventTarget[];
                        initEvent(type: string, bubbles?: boolean, cancelable?: boolean): void;
                        preventDefault(): void;
                        stopImmediatePropagation(): void;
                        stopPropagation(): void;
                    }

                    Type Parameters

                    Hierarchy

                    • Event
                      • BenchEvent
                    Index

                    Properties

                    interface BenchEvent<
                        K extends BenchEvents = BenchEvents,
                        M extends "bench" | "task" = "bench",
                    > {
                        AT_TARGET: 2;
                        bubbles: boolean;
                        BUBBLING_PHASE: 3;
                        cancelable: boolean;
                        cancelBubble: boolean;
                        CAPTURING_PHASE: 1;
                        composed: boolean;
                        currentTarget: EventTarget | null;
                        defaultPrevented: boolean;
                        eventPhase: number;
                        isTrusted: boolean;
                        NONE: 0;
                        returnValue: boolean;
                        srcElement: EventTarget | null;
                        target: EventTarget | null;
                        timeStamp: number;
                        type: K;
                        get error(): K extends "error" ? Error : undefined;
                        get task(): M extends "task"
                            ? Task
                            : K extends BenchEventsWithTask ? Task : undefined;
                        composedPath(): EventTarget[];
                        initEvent(type: string, bubbles?: boolean, cancelable?: boolean): void;
                        preventDefault(): void;
                        stopImmediatePropagation(): void;
                        stopPropagation(): void;
                    }

                    Type Parameters

                    Hierarchy

                    • Event
                      • BenchEvent
                    Index

                    Properties

                    type: K

                    The type read-only property of the Event interface returns a string containing the event's type.

                    MDN Reference

                    -

                    Accessors

                    • get error(): K extends "error" ? Error : undefined

                      The error associated with the event.

                      +

                    Accessors

                    • get error(): K extends "error" ? Error : undefined

                      The error associated with the event.

                      Returns K extends "error" ? Error : undefined

                      The error if the event type is one that includes an error; otherwise, undefined.

                      -

                    Methods

                    • The composedPath() method of the Event interface returns the event's path which is an array of the objects on which listeners will be invoked.

                      +

                    Methods

                    • The composedPath() method of the Event interface returns the event's path which is an array of the objects on which listeners will be invoked.

                      MDN Reference

                      Returns EventTarget[]

                    • The Event.initEvent() method is used to initialize the value of an event created using Document.createEvent().

                      Parameters

                      • type: string
                      • Optionalbubbles: boolean
                      • Optionalcancelable: boolean

                      Returns void

                      MDN Reference

                      diff --git a/docs/interfaces/BenchLike.html b/docs/interfaces/BenchLike.html index 743a2c11..98e7065f 100644 --- a/docs/interfaces/BenchLike.html +++ b/docs/interfaces/BenchLike.html @@ -1,9 +1,10 @@ BenchLike | tinybench - v5.1.0
                      tinybench - v5.1.0
                        Preparing search index...

                        Interface BenchLike

                        Used to decouple Bench and Task

                        -
                        interface BenchLike {
                            addEventListener: <K extends BenchEvents>(
                                type: K,
                                listener:
                                    | EventListener<K, "bench">
                                    | EventListenerObject<K, "bench">
                                    | null,
                                options?: boolean | AddEventListenerOptions,
                            ) => void;
                            concurrency: Concurrency;
                            iterations: number;
                            now: NowFn;
                            removeEventListener: <K extends BenchEvents>(
                                type: K,
                                listener:
                                    | EventListener<K, "bench">
                                    | EventListenerObject<K, "bench">
                                    | null,
                                options?: boolean | EventListenerOptions,
                            ) => void;
                            runtime: JSRuntime;
                            runtimeVersion: string;
                            setup: (task: Task, mode: "warmup" | "run") => void | Promise<void>;
                            signal?: AbortSignal;
                            teardown: (task: Task, mode: "warmup" | "run") => void | Promise<void>;
                            threshold: number;
                            throws: boolean;
                            time: number;
                            warmup: boolean;
                            warmupIterations: number;
                            warmupTime: number;
                            dispatchEvent(event: Event): boolean;
                        }

                        Hierarchy

                        • EventTarget
                          • BenchLike

                        Implemented by

                        Index

                        Properties

                        interface BenchLike {
                            addEventListener: <K extends BenchEvents>(
                                type: K,
                                listener:
                                    | EventListener<K, "bench">
                                    | EventListenerObject<K, "bench">
                                    | null,
                                options?: boolean | AddEventListenerOptions,
                            ) => void;
                            concurrency: Concurrency;
                            iterations: number;
                            now: NowFn;
                            removeEventListener: <K extends BenchEvents>(
                                type: K,
                                listener:
                                    | EventListener<K, "bench">
                                    | EventListenerObject<K, "bench">
                                    | null,
                                options?: boolean | EventListenerOptions,
                            ) => void;
                            retainSamples: boolean;
                            runtime: JSRuntime;
                            runtimeVersion: string;
                            setup: (task: Task, mode: "warmup" | "run") => void | Promise<void>;
                            signal?: AbortSignal;
                            teardown: (task: Task, mode: "warmup" | "run") => void | Promise<void>;
                            threshold: number;
                            throws: boolean;
                            time: number;
                            warmup: boolean;
                            warmupIterations: number;
                            warmupTime: number;
                            dispatchEvent(event: Event): boolean;
                        }

                        Hierarchy

                        • EventTarget
                          • BenchLike

                        Implemented by

                        Index

                        Properties

                        addEventListener: <K extends BenchEvents>(
                            type: K,
                            listener:
                                | EventListener<K, "bench">
                                | EventListenerObject<K, "bench">
                                | null,
                            options?: boolean | AddEventListenerOptions,
                        ) => void

                        Adds a listener for the specified event type.

                        -
                        concurrency: Concurrency

                        Executes tasks concurrently based on the specified concurrency mode, if set.

                        +
                        concurrency: Concurrency

                        Executes tasks concurrently based on the specified concurrency mode, if set.

                        • When mode is set to null (default), concurrency is disabled.
                        • When mode is set to 'task', each task's iterations (calls of a task function) run concurrently.
                        • When mode is set to 'bench', different tasks within the bench run concurrently.
                        -
                        iterations: number

                        The amount of executions per task.

                        -
                        now: NowFn

                        A function to get a timestamp.

                        -
                        removeEventListener: <K extends BenchEvents>(
                            type: K,
                            listener:
                                | EventListener<K, "bench">
                                | EventListenerObject<K, "bench">
                                | null,
                            options?: boolean | EventListenerOptions,
                        ) => void

                        Removes a previously registered event listener.

                        -
                        runtime: JSRuntime

                        The JavaScript runtime environment.

                        -
                        runtimeVersion: string

                        The JavaScript runtime version.

                        -
                        setup: (task: Task, mode: "warmup" | "run") => void | Promise<void>

                        A setup function that runs before each task execution.

                        -
                        signal?: AbortSignal

                        An AbortSignal to cancel the benchmark

                        -
                        teardown: (task: Task, mode: "warmup" | "run") => void | Promise<void>

                        A teardown function that runs after each task execution.

                        -
                        threshold: number

                        The maximum number of concurrent tasks to run

                        -
                        throws: boolean

                        Whether to throw an error if a task function throws

                        -
                        time: number

                        The amount of time to run each task.

                        -
                        warmup: boolean

                        Whether to warmup the tasks before running them

                        -
                        warmupIterations: number

                        The amount of warmup iterations per task.

                        -
                        warmupTime: number

                        The amount of time to warmup each task.

                        -

                        Methods

                        • The dispatchEvent() method of the EventTarget sends an Event to the object, (synchronously) invoking the affected event listeners in the appropriate order.

                          +
                        iterations: number

                        The amount of executions per task.

                        +
                        now: NowFn

                        A function to get a timestamp.

                        +
                        removeEventListener: <K extends BenchEvents>(
                            type: K,
                            listener:
                                | EventListener<K, "bench">
                                | EventListenerObject<K, "bench">
                                | null,
                            options?: boolean | EventListenerOptions,
                        ) => void

                        Removes a previously registered event listener.

                        +
                        retainSamples: boolean

                        Should samples be retained for further custom processing

                        +
                        runtime: JSRuntime

                        The JavaScript runtime environment.

                        +
                        runtimeVersion: string

                        The JavaScript runtime version.

                        +
                        setup: (task: Task, mode: "warmup" | "run") => void | Promise<void>

                        A setup function that runs before each task execution.

                        +
                        signal?: AbortSignal

                        An AbortSignal to cancel the benchmark

                        +
                        teardown: (task: Task, mode: "warmup" | "run") => void | Promise<void>

                        A teardown function that runs after each task execution.

                        +
                        threshold: number

                        The maximum number of concurrent tasks to run

                        +
                        throws: boolean

                        Whether to throw an error if a task function throws

                        +
                        time: number

                        The amount of time to run each task.

                        +
                        warmup: boolean

                        Whether to warmup the tasks before running them

                        +
                        warmupIterations: number

                        The amount of warmup iterations per task.

                        +
                        warmupTime: number

                        The amount of time to warmup each task.

                        +

                        Methods

                        • The dispatchEvent() method of the EventTarget sends an Event to the object, (synchronously) invoking the affected event listeners in the appropriate order.

                          MDN Reference

                          -

                          Parameters

                          • event: Event

                          Returns boolean

                        +

                        Parameters

                        • event: Event

                        Returns boolean

                      diff --git a/docs/interfaces/BenchOptions.html b/docs/interfaces/BenchOptions.html index 8b6b63e6..61153fe2 100644 --- a/docs/interfaces/BenchOptions.html +++ b/docs/interfaces/BenchOptions.html @@ -1,8 +1,9 @@ BenchOptions | tinybench - v5.1.0
                      tinybench - v5.1.0
                        Preparing search index...

                        Interface BenchOptions

                        Bench options

                        -
                        interface BenchOptions {
                            concurrency?: Concurrency;
                            iterations?: number;
                            name?: string;
                            now?: NowFn;
                            setup?: Hook;
                            signal?: AbortSignal;
                            teardown?: Hook;
                            threshold?: number;
                            throws?: boolean;
                            time?: number;
                            warmup?: boolean;
                            warmupIterations?: number;
                            warmupTime?: number;
                        }

                        Hierarchy (View Summary)

                        Index

                        Properties

                        interface BenchOptions {
                            concurrency?: Concurrency;
                            iterations?: number;
                            name?: string;
                            now?: NowFn;
                            retainSamples?: boolean;
                            setup?: Hook;
                            signal?: AbortSignal;
                            teardown?: Hook;
                            threshold?: number;
                            throws?: boolean;
                            time?: number;
                            warmup?: boolean;
                            warmupIterations?: number;
                            warmupTime?: number;
                        }

                        Hierarchy (View Summary)

                        Index

                        Properties

                        concurrency? iterations? name? now? +retainSamples? setup? signal? teardown? @@ -18,37 +19,41 @@
                      • When mode is set to 'task', each task's iterations (calls of a task function) run concurrently.
                      • When mode is set to 'bench', different tasks within the bench run concurrently.
                      • -
                        iterations?: number

                        number of times that a task should run if even the time option is finished

                        +
                        iterations?: number

                        number of times that a task should run if even the time option is finished

                        64
                         
                        -
                        name?: string

                        benchmark name

                        -
                        now?: NowFn

                        function to get the current timestamp in milliseconds

                        -
                        setup?: Hook

                        setup function to run before each benchmark task (cycle)

                        -
                        signal?: AbortSignal

                        An AbortSignal for aborting the benchmark

                        -
                        teardown?: Hook

                        teardown function to run after each benchmark task (cycle)

                        -
                        threshold?: number

                        The maximum number of concurrent tasks to run

                        -
                        Infinity
                        +
                        name?: string

                        benchmark name

                        +
                        now?: NowFn

                        function to get the current timestamp in milliseconds

                        +
                        retainSamples?: boolean

                        keep samples for statistics calculation

                        +
                        false
                         
                        -
                        throws?: boolean

                        Throws if a task fails

                        -
                        false
                        +
                        setup?: Hook

                        setup function to run before each benchmark task (cycle)

                        +
                        signal?: AbortSignal

                        An AbortSignal for aborting the benchmark

                        +
                        teardown?: Hook

                        teardown function to run after each benchmark task (cycle)

                        +
                        threshold?: number

                        The maximum number of concurrent tasks to run

                        +
                        Infinity
                         
                        -
                        time?: number

                        time needed for running a benchmark task (milliseconds)

                        -
                        1000
                        +
                        throws?: boolean

                        Throws if a task fails

                        +
                        false
                         
                        -
                        warmup?: boolean

                        warmup benchmark

                        -
                        true
                        +
                        time?: number

                        time needed for running a benchmark task (milliseconds)

                        +
                        1000
                         
                        -
                        warmupIterations?: number

                        warmup iterations

                        -
                        16
                        +
                        warmup?: boolean

                        warmup benchmark

                        +
                        true
                         
                        -
                        warmupTime?: number

                        warmup time (milliseconds)

                        -
                        250
                        +
                        warmupIterations?: number

                        warmup iterations

                        +
                        16
                         
                        -
                        +
                        warmupTime?: number

                        warmup time (milliseconds)

                        +
                        250
                        +
                        + +
                        diff --git a/docs/interfaces/EventListenerObject.html b/docs/interfaces/EventListenerObject.html index 0c5b5df2..2c77f2d1 100644 --- a/docs/interfaces/EventListenerObject.html +++ b/docs/interfaces/EventListenerObject.html @@ -1,6 +1,6 @@ EventListenerObject | tinybench - v5.1.0
                        tinybench - v5.1.0
                          Preparing search index...

                          Interface EventListenerObject<E, M>

                          Both the Task and Bench objects extend the EventTarget object. So you can attach a listeners to different types of events to each class instance using the universal addEventListener and removeEventListener methods.

                          -
                          interface EventListenerObject<
                              E extends BenchEvents,
                              M extends "bench" | "task" = "bench",
                          > {
                              handleEvent(evt: BenchEvent<E, M>): void;
                          }

                          Type Parameters

                          • E extends BenchEvents
                          • M extends "bench" | "task" = "bench"
                          Index

                          Methods

                          interface EventListenerObject<
                              E extends BenchEvents,
                              M extends "bench" | "task" = "bench",
                          > {
                              handleEvent(evt: BenchEvent<E, M>): void;
                          }

                          Type Parameters

                          • E extends BenchEvents
                          • M extends "bench" | "task" = "bench"
                          Index

                          Methods

                          Methods

                          +

                          Parameters

                          Returns void

                          diff --git a/docs/interfaces/FnOptions.html b/docs/interfaces/FnOptions.html index bf7c560d..f5e2911b 100644 --- a/docs/interfaces/FnOptions.html +++ b/docs/interfaces/FnOptions.html @@ -1,16 +1,18 @@ FnOptions | tinybench - v5.1.0
                          tinybench - v5.1.0
                            Preparing search index...

                            Interface FnOptions

                            The task function options

                            -
                            interface FnOptions {
                                afterAll?: FnHook;
                                afterEach?: FnHook;
                                async?: boolean;
                                beforeAll?: FnHook;
                                beforeEach?: FnHook;
                                signal?: AbortSignal;
                            }
                            Index

                            Properties

                            interface FnOptions {
                                afterAll?: FnHook;
                                afterEach?: FnHook;
                                async?: boolean;
                                beforeAll?: FnHook;
                                beforeEach?: FnHook;
                                retainSamples?: boolean;
                                signal?: AbortSignal;
                            }
                            Index

                            Properties

                            afterAll?: FnHook

                            An optional function that is run after all iterations of this task end

                            -
                            afterEach?: FnHook

                            An optional function that is run after each iteration of this task

                            -
                            async?: boolean

                            Whether the provided task function is asynchronous, otherwise it is +

                            afterEach?: FnHook

                            An optional function that is run after each iteration of this task

                            +
                            async?: boolean

                            Whether the provided task function is asynchronous, otherwise it is determined automatically.

                            -
                            beforeAll?: FnHook

                            An optional function that is run before iterations of this task begin

                            -
                            beforeEach?: FnHook

                            An optional function that is run before each iteration of this task

                            -
                            signal?: AbortSignal

                            An AbortSignal for aborting this specific task

                            +
                            beforeAll?: FnHook

                            An optional function that is run before iterations of this task begin

                            +
                            beforeEach?: FnHook

                            An optional function that is run before each iteration of this task

                            +
                            retainSamples?: boolean

                            Retain samples for this task, overriding the bench-level retainSamples option

                            +
                            signal?: AbortSignal

                            An AbortSignal for aborting this specific task

                            If not provided, falls back to BenchOptions.signal

                            -
                            +
                            diff --git a/docs/interfaces/FnReturnedObject.html b/docs/interfaces/FnReturnedObject.html index f7ea5bda..5b0ea7ee 100644 --- a/docs/interfaces/FnReturnedObject.html +++ b/docs/interfaces/FnReturnedObject.html @@ -1,8 +1,8 @@ FnReturnedObject | tinybench - v5.1.0
                            tinybench - v5.1.0
                              Preparing search index...

                              Interface FnReturnedObject

                              A possible object returned by task functions to override default behaviors, like the duration of the function itself.

                              -
                              interface FnReturnedObject {
                                  overriddenDuration?: number;
                              }
                              Index

                              Properties

                              interface FnReturnedObject {
                                  overriddenDuration?: number;
                              }
                              Index

                              Properties

                              overriddenDuration?: number

                              An overridden duration for the task function, to be used instead of the duration measured by tinybench when running the benchmark.

                              This can be useful to measure parts of the execution of a function that are hard to execute independently.

                              -
                              +
                              diff --git a/docs/interfaces/ResolvedBenchOptions.html b/docs/interfaces/ResolvedBenchOptions.html index 38a3e066..64ce5155 100644 --- a/docs/interfaces/ResolvedBenchOptions.html +++ b/docs/interfaces/ResolvedBenchOptions.html @@ -1,8 +1,9 @@ ResolvedBenchOptions | tinybench - v5.1.0
                              tinybench - v5.1.0
                                Preparing search index...

                                Interface ResolvedBenchOptions

                                The resolved benchmark options

                                -
                                interface ResolvedBenchOptions {
                                    concurrency?: Concurrency;
                                    iterations: number;
                                    name?: string;
                                    now: NowFn;
                                    setup: Hook;
                                    signal?: AbortSignal;
                                    teardown: Hook;
                                    threshold?: number;
                                    throws: NonNullable<boolean | undefined>;
                                    time: number;
                                    warmup: NonNullable<boolean | undefined>;
                                    warmupIterations: number;
                                    warmupTime: number;
                                }

                                Hierarchy (View Summary)

                                Index

                                Properties

                                interface ResolvedBenchOptions {
                                    concurrency?: Concurrency;
                                    iterations: number;
                                    name?: string;
                                    now: NowFn;
                                    retainSamples?: boolean;
                                    setup: Hook;
                                    signal?: AbortSignal;
                                    teardown: Hook;
                                    threshold?: number;
                                    throws: NonNullable<boolean | undefined>;
                                    time: number;
                                    warmup: NonNullable<boolean | undefined>;
                                    warmupIterations: number;
                                    warmupTime: number;
                                }

                                Hierarchy (View Summary)

                                Index

                                Properties

                                concurrency? iterations name? now +retainSamples? setup signal? teardown @@ -18,37 +19,41 @@
                              • When mode is set to 'task', each task's iterations (calls of a task function) run concurrently.
                              • When mode is set to 'bench', different tasks within the bench run concurrently.
                              • -
                                iterations: number

                                number of times that a task should run if even the time option is finished

                                +
                                iterations: number

                                number of times that a task should run if even the time option is finished

                                64
                                 
                                -
                                name?: string

                                benchmark name

                                -
                                now: NowFn

                                function to get the current timestamp in milliseconds

                                -
                                setup: Hook

                                setup function to run before each benchmark task (cycle)

                                -
                                signal?: AbortSignal

                                An AbortSignal for aborting the benchmark

                                -
                                teardown: Hook

                                teardown function to run after each benchmark task (cycle)

                                -
                                threshold?: number

                                The maximum number of concurrent tasks to run

                                -
                                Infinity
                                +
                                name?: string

                                benchmark name

                                +
                                now: NowFn

                                function to get the current timestamp in milliseconds

                                +
                                retainSamples?: boolean

                                keep samples for statistics calculation

                                +
                                false
                                 
                                -
                                throws: NonNullable<boolean | undefined>

                                Throws if a task fails

                                -
                                false
                                +
                                setup: Hook

                                setup function to run before each benchmark task (cycle)

                                +
                                signal?: AbortSignal

                                An AbortSignal for aborting the benchmark

                                +
                                teardown: Hook

                                teardown function to run after each benchmark task (cycle)

                                +
                                threshold?: number

                                The maximum number of concurrent tasks to run

                                +
                                Infinity
                                 
                                -
                                time: number

                                time needed for running a benchmark task (milliseconds)

                                -
                                1000
                                +
                                throws: NonNullable<boolean | undefined>

                                Throws if a task fails

                                +
                                false
                                 
                                -
                                warmup: NonNullable<boolean | undefined>

                                warmup benchmark

                                -
                                true
                                +
                                time: number

                                time needed for running a benchmark task (milliseconds)

                                +
                                1000
                                 
                                -
                                warmupIterations: number

                                warmup iterations

                                -
                                16
                                +
                                warmup: NonNullable<boolean | undefined>

                                warmup benchmark

                                +
                                true
                                 
                                -
                                warmupTime: number

                                warmup time (milliseconds)

                                -
                                250
                                +
                                warmupIterations: number

                                warmup iterations

                                +
                                16
                                 
                                -
                                +
                                warmupTime: number

                                warmup time (milliseconds)

                                +
                                250
                                +
                                + +
                                diff --git a/docs/interfaces/Statistics.html b/docs/interfaces/Statistics.html index f1049ff6..40015c3b 100644 --- a/docs/interfaces/Statistics.html +++ b/docs/interfaces/Statistics.html @@ -1,5 +1,5 @@ Statistics | tinybench - v5.1.0
                                tinybench - v5.1.0
                                  Preparing search index...

                                  Interface Statistics

                                  The statistics object

                                  -
                                  interface Statistics {
                                      aad: number;
                                      critical: number;
                                      df: number;
                                      mad: number;
                                      max: number;
                                      mean: number;
                                      min: number;
                                      moe: number;
                                      p50: number;
                                      p75: number;
                                      p99: number;
                                      p995: number;
                                      p999: number;
                                      rme: number;
                                      samples: number[];
                                      sd: number;
                                      sem: number;
                                      variance: number;
                                  }
                                  Index

                                  Properties

                                  aad +
                                  interface Statistics {
                                      aad: number;
                                      critical: number;
                                      df: number;
                                      mad: number;
                                      max: number;
                                      mean: number;
                                      min: number;
                                      moe: number;
                                      p50: number;
                                      p75: number;
                                      p99: number;
                                      p995: number;
                                      p999: number;
                                      rme: number;
                                      samples: SortedSamples | undefined;
                                      samplesCount: number;
                                      sd: number;
                                      sem: number;
                                      variance: number;
                                  }
                                  Index

                                  Properties

                                  Properties

                                  aad: number

                                  mean/average absolute deviation

                                  -
                                  critical: number

                                  critical value

                                  -
                                  df: number

                                  degrees of freedom

                                  -
                                  mad: number

                                  median absolute deviation

                                  -
                                  max: number

                                  the maximum value

                                  -
                                  mean: number

                                  mean/average

                                  -
                                  min: number

                                  the minimum value

                                  -
                                  moe: number

                                  margin of error

                                  -
                                  p50: number

                                  p50/median percentile

                                  -
                                  p75: number

                                  p75 percentile

                                  -
                                  p99: number

                                  p99 percentile

                                  -
                                  p995: number

                                  p995 percentile

                                  -
                                  p999: number

                                  p999 percentile

                                  -
                                  rme: number

                                  relative margin of error

                                  -
                                  samples: number[]

                                  samples

                                  -
                                  sd: number

                                  standard deviation

                                  -
                                  sem: number

                                  standard error of the mean/average (a.k.a. the standard deviation of the distribution of the sample mean/average)

                                  -
                                  variance: number

                                  variance

                                  -
                                  +
                                  critical: number

                                  critical value

                                  +
                                  df: number

                                  degrees of freedom

                                  +
                                  mad: number

                                  median absolute deviation

                                  +
                                  max: number

                                  the maximum value

                                  +
                                  mean: number

                                  mean/average

                                  +
                                  min: number

                                  the minimum value

                                  +
                                  moe: number

                                  margin of error

                                  +
                                  p50: number

                                  p50/median percentile

                                  +
                                  p75: number

                                  p75 percentile

                                  +
                                  p99: number

                                  p99 percentile

                                  +
                                  p995: number

                                  p995 percentile

                                  +
                                  p999: number

                                  p999 percentile

                                  +
                                  rme: number

                                  relative margin of error

                                  +
                                  samples: SortedSamples | undefined

                                  samples used to calculate the statistics

                                  +
                                  samplesCount: number

                                  samples count

                                  +
                                  sd: number

                                  standard deviation

                                  +
                                  sem: number

                                  standard error of the mean/average (a.k.a. the standard deviation of the distribution of the sample mean/average)

                                  +
                                  variance: number

                                  variance

                                  +
                                  diff --git a/docs/interfaces/TaskResultAborted.html b/docs/interfaces/TaskResultAborted.html index e552f961..6408ac52 100644 --- a/docs/interfaces/TaskResultAborted.html +++ b/docs/interfaces/TaskResultAborted.html @@ -1,4 +1,4 @@ TaskResultAborted | tinybench - v5.1.0
                                  tinybench - v5.1.0
                                    Preparing search index...

                                    Interface TaskResultAborted

                                    The task result for aborted tasks.

                                    -
                                    interface TaskResultAborted {
                                        state: "aborted";
                                    }
                                    Index

                                    Properties

                                    interface TaskResultAborted {
                                        state: "aborted";
                                    }
                                    Index

                                    Properties

                                    Properties

                                    state: "aborted"

                                    the task state

                                    -
                                    +
                                    diff --git a/docs/interfaces/TaskResultAbortedWithStatistics.html b/docs/interfaces/TaskResultAbortedWithStatistics.html index 53d3edab..fe40f918 100644 --- a/docs/interfaces/TaskResultAbortedWithStatistics.html +++ b/docs/interfaces/TaskResultAbortedWithStatistics.html @@ -1,12 +1,12 @@ TaskResultAbortedWithStatistics | tinybench - v5.1.0
                                    tinybench - v5.1.0
                                      Preparing search index...

                                      Interface TaskResultAbortedWithStatistics

                                      The task result for aborted tasks, having also statistical data.

                                      -
                                      interface TaskResultAbortedWithStatistics {
                                          latency: Statistics;
                                          period: number;
                                          state: "aborted-with-statistics";
                                          throughput: Statistics;
                                          totalTime: number;
                                      }

                                      Hierarchy (View Summary)

                                      Index

                                      Properties

                                      interface TaskResultAbortedWithStatistics {
                                          latency: Statistics;
                                          period: number;
                                          state: "aborted-with-statistics";
                                          throughput: Statistics;
                                          totalTime: number;
                                      }

                                      Hierarchy (View Summary)

                                      Index

                                      Properties

                                      latency: Statistics

                                      the task latency statistics

                                      -
                                      period: number

                                      how long each operation takes (ms)

                                      -
                                      state: "aborted-with-statistics"

                                      the task state

                                      -
                                      throughput: Statistics

                                      the task throughput statistics

                                      -
                                      totalTime: number

                                      the time to run the task benchmark cycle (ms)

                                      -
                                      +
                                      period: number

                                      how long each operation takes (ms)

                                      +
                                      state: "aborted-with-statistics"

                                      the task state

                                      +
                                      throughput: Statistics

                                      the task throughput statistics

                                      +
                                      totalTime: number

                                      the time to run the task benchmark cycle (ms)

                                      +
                                      diff --git a/docs/interfaces/TaskResultCompleted.html b/docs/interfaces/TaskResultCompleted.html index 4bffc87d..b2844716 100644 --- a/docs/interfaces/TaskResultCompleted.html +++ b/docs/interfaces/TaskResultCompleted.html @@ -1,12 +1,12 @@ TaskResultCompleted | tinybench - v5.1.0
                                      tinybench - v5.1.0
                                        Preparing search index...

                                        Interface TaskResultCompleted

                                        The task result for completed tasks with statistical data.

                                        -
                                        interface TaskResultCompleted {
                                            latency: Statistics;
                                            period: number;
                                            state: "completed";
                                            throughput: Statistics;
                                            totalTime: number;
                                        }

                                        Hierarchy (View Summary)

                                        Index

                                        Properties

                                        interface TaskResultCompleted {
                                            latency: Statistics;
                                            period: number;
                                            state: "completed";
                                            throughput: Statistics;
                                            totalTime: number;
                                        }

                                        Hierarchy (View Summary)

                                        Index

                                        Properties

                                        latency: Statistics

                                        the task latency statistics

                                        -
                                        period: number

                                        how long each operation takes (ms)

                                        -
                                        state: "completed"

                                        the task state

                                        -
                                        throughput: Statistics

                                        the task throughput statistics

                                        -
                                        totalTime: number

                                        the time to run the task benchmark cycle (ms)

                                        -
                                        +
                                        period: number

                                        how long each operation takes (ms)

                                        +
                                        state: "completed"

                                        the task state

                                        +
                                        throughput: Statistics

                                        the task throughput statistics

                                        +
                                        totalTime: number

                                        the time to run the task benchmark cycle (ms)

                                        +
                                        diff --git a/docs/interfaces/TaskResultErrored.html b/docs/interfaces/TaskResultErrored.html index 9f95e7aa..35eb6e9c 100644 --- a/docs/interfaces/TaskResultErrored.html +++ b/docs/interfaces/TaskResultErrored.html @@ -1,6 +1,6 @@ TaskResultErrored | tinybench - v5.1.0
                                        tinybench - v5.1.0
                                          Preparing search index...

                                          Interface TaskResultErrored

                                          The task result for errored tasks

                                          -
                                          interface TaskResultErrored {
                                              error: Error;
                                              state: "errored";
                                          }
                                          Index

                                          Properties

                                          interface TaskResultErrored {
                                              error: Error;
                                              state: "errored";
                                          }
                                          Index

                                          Properties

                                          Properties

                                          error: Error

                                          the error that caused the task to fail

                                          -
                                          state: "errored"

                                          the task state

                                          -
                                          +
                                          state: "errored"

                                          the task state

                                          +
                                          diff --git a/docs/interfaces/TaskResultNotStarted.html b/docs/interfaces/TaskResultNotStarted.html index 508e095d..ac093bb5 100644 --- a/docs/interfaces/TaskResultNotStarted.html +++ b/docs/interfaces/TaskResultNotStarted.html @@ -1,4 +1,4 @@ TaskResultNotStarted | tinybench - v5.1.0
                                          tinybench - v5.1.0
                                            Preparing search index...

                                            Interface TaskResultNotStarted

                                            The task result for not started tasks

                                            -
                                            interface TaskResultNotStarted {
                                                state: "not-started";
                                            }
                                            Index

                                            Properties

                                            interface TaskResultNotStarted {
                                                state: "not-started";
                                            }
                                            Index

                                            Properties

                                            Properties

                                            state: "not-started"

                                            the task state

                                            -
                                            +
                                            diff --git a/docs/interfaces/TaskResultRuntimeInfo.html b/docs/interfaces/TaskResultRuntimeInfo.html index d8a7b5c1..9be64c0c 100644 --- a/docs/interfaces/TaskResultRuntimeInfo.html +++ b/docs/interfaces/TaskResultRuntimeInfo.html @@ -1,6 +1,6 @@ TaskResultRuntimeInfo | tinybench - v5.1.0
                                            tinybench - v5.1.0
                                              Preparing search index...

                                              Interface TaskResultRuntimeInfo

                                              The additional runtime information for task results

                                              -
                                              interface TaskResultRuntimeInfo {
                                                  runtime: JSRuntime;
                                                  runtimeVersion: string;
                                              }
                                              Index

                                              Properties

                                              interface TaskResultRuntimeInfo {
                                                  runtime: JSRuntime;
                                                  runtimeVersion: string;
                                              }
                                              Index

                                              Properties

                                              runtime: JSRuntime

                                              the JavaScript runtime environment

                                              -
                                              runtimeVersion: string

                                              the JavaScript runtime version

                                              -
                                              +
                                              runtimeVersion: string

                                              the JavaScript runtime version

                                              +
                                              diff --git a/docs/interfaces/TaskResultStarted.html b/docs/interfaces/TaskResultStarted.html index 125e9a44..0fe278f7 100644 --- a/docs/interfaces/TaskResultStarted.html +++ b/docs/interfaces/TaskResultStarted.html @@ -1,4 +1,4 @@ TaskResultStarted | tinybench - v5.1.0
                                              tinybench - v5.1.0
                                                Preparing search index...

                                                Interface TaskResultStarted

                                                The task result for started tasks

                                                -
                                                interface TaskResultStarted {
                                                    state: "started";
                                                }
                                                Index

                                                Properties

                                                interface TaskResultStarted {
                                                    state: "started";
                                                }
                                                Index

                                                Properties

                                                Properties

                                                state: "started"

                                                the task state

                                                -
                                                +
                                                diff --git a/docs/interfaces/TaskResultWithStatistics.html b/docs/interfaces/TaskResultWithStatistics.html index 3240b736..c469089e 100644 --- a/docs/interfaces/TaskResultWithStatistics.html +++ b/docs/interfaces/TaskResultWithStatistics.html @@ -1,10 +1,10 @@ TaskResultWithStatistics | tinybench - v5.1.0
                                                tinybench - v5.1.0
                                                  Preparing search index...

                                                  Interface TaskResultWithStatistics

                                                  The statistical data for task results

                                                  -
                                                  interface TaskResultWithStatistics {
                                                      latency: Statistics;
                                                      period: number;
                                                      throughput: Statistics;
                                                      totalTime: number;
                                                  }

                                                  Hierarchy (View Summary)

                                                  Index

                                                  Properties

                                                  interface TaskResultWithStatistics {
                                                      latency: Statistics;
                                                      period: number;
                                                      throughput: Statistics;
                                                      totalTime: number;
                                                  }

                                                  Hierarchy (View Summary)

                                                  Index

                                                  Properties

                                                  latency: Statistics

                                                  the task latency statistics

                                                  -
                                                  period: number

                                                  how long each operation takes (ms)

                                                  -
                                                  throughput: Statistics

                                                  the task throughput statistics

                                                  -
                                                  totalTime: number

                                                  the time to run the task benchmark cycle (ms)

                                                  -
                                                  +
                                                  period: number

                                                  how long each operation takes (ms)

                                                  +
                                                  throughput: Statistics

                                                  the task throughput statistics

                                                  +
                                                  totalTime: number

                                                  the time to run the task benchmark cycle (ms)

                                                  +
                                                  diff --git a/docs/types/BenchEvents.html b/docs/types/BenchEvents.html index c9291939..60061d2b 100644 --- a/docs/types/BenchEvents.html +++ b/docs/types/BenchEvents.html @@ -1,2 +1,2 @@ BenchEvents | tinybench - v5.1.0
                                                  tinybench - v5.1.0
                                                    Preparing search index...

                                                    Type Alias BenchEvents

                                                    BenchEvents:
                                                        | "abort"
                                                        | "add"
                                                        | "complete"
                                                        | "cycle"
                                                        | "error"
                                                        | "remove"
                                                        | "reset"
                                                        | "start"
                                                        | "warmup"

                                                    Bench events

                                                    -
                                                    +
                                                    diff --git a/docs/types/BenchEventsWithTask.html b/docs/types/BenchEventsWithTask.html index 38e74d10..335ea5ba 100644 --- a/docs/types/BenchEventsWithTask.html +++ b/docs/types/BenchEventsWithTask.html @@ -1,2 +1,2 @@ BenchEventsWithTask | tinybench - v5.1.0
                                                    tinybench - v5.1.0
                                                      Preparing search index...

                                                      Type Alias BenchEventsWithTask

                                                      BenchEventsWithTask: Extract<BenchEvents, "add" | "cycle" | "error" | "remove">

                                                      Bench events that have an associated Task

                                                      -
                                                      +
                                                      diff --git a/docs/types/Concurrency.html b/docs/types/Concurrency.html index e5dee8b4..4884b731 100644 --- a/docs/types/Concurrency.html +++ b/docs/types/Concurrency.html @@ -3,4 +3,4 @@
                                                    • When mode is set to 'task', each task's iterations (calls of a task function) run concurrently.
                                                    • When mode is set to 'bench', different tasks within the bench run concurrently.
                                                    • -
                                                      +
                                                      diff --git a/docs/types/ConsoleTableConverter.html b/docs/types/ConsoleTableConverter.html index 8b200338..1255c11f 100644 --- a/docs/types/ConsoleTableConverter.html +++ b/docs/types/ConsoleTableConverter.html @@ -1,2 +1,2 @@ ConsoleTableConverter | tinybench - v5.1.0
                                                      tinybench - v5.1.0
                                                        Preparing search index...

                                                        Type Alias ConsoleTableConverter

                                                        ConsoleTableConverter: (task: Task) => Record<string, number | string>

                                                        Converts a Task to a console.table friendly object

                                                        -

                                                        Type Declaration

                                                          • (task: Task): Record<string, number | string>
                                                          • Parameters

                                                            Returns Record<string, number | string>

                                                        +

                                                        Type Declaration

                                                          • (task: Task): Record<string, number | string>
                                                          • Parameters

                                                            Returns Record<string, number | string>

                                                        diff --git a/docs/types/EventListener.html b/docs/types/EventListener.html index 25e22e3f..57d512f9 100644 --- a/docs/types/EventListener.html +++ b/docs/types/EventListener.html @@ -1,2 +1,2 @@ EventListener | tinybench - v5.1.0
                                                        tinybench - v5.1.0
                                                          Preparing search index...

                                                          Type Alias EventListener<E, M>

                                                          EventListener: (evt: BenchEvent<E, M>) => void

                                                          Event listener

                                                          -

                                                          Type Parameters

                                                          • E extends BenchEvents
                                                          • M extends "bench" | "task" = "bench"

                                                          Type Declaration

                                                          +

                                                          Type Parameters

                                                          • E extends BenchEvents
                                                          • M extends "bench" | "task" = "bench"

                                                          Type Declaration

                                                          diff --git a/docs/types/Fn.html b/docs/types/Fn.html index 77038378..0f7bbcaa 100644 --- a/docs/types/Fn.html +++ b/docs/types/Fn.html @@ -3,4 +3,4 @@ you want to measure a specific part of its execution), you can return an object with a overriddenDuration field. You should still use bench.opts.now() to measure that duration.

                                                          -

                                                          Type Declaration

                                                          +

                                                          Type Declaration

                                                          diff --git a/docs/types/FnHook.html b/docs/types/FnHook.html index 97a83b84..fdbfffe4 100644 --- a/docs/types/FnHook.html +++ b/docs/types/FnHook.html @@ -1,4 +1,4 @@ FnHook | tinybench - v5.1.0
                                                          tinybench - v5.1.0
                                                            Preparing search index...

                                                            Type Alias FnHook

                                                            FnHook: (this: Task, mode?: "run" | "warmup") => Promise<void> | void

                                                            The task hook function signature. If warmup is enabled, the hook will be called twice, once for the warmup and once for the run.

                                                            Type Declaration

                                                              • (this: Task, mode?: "run" | "warmup"): Promise<void> | void
                                                              • Parameters

                                                                • this: Task
                                                                • Optionalmode: "run" | "warmup"

                                                                  the mode where the hook is being called

                                                                  -

                                                                Returns Promise<void> | void

                                                            +

                                                            Returns Promise<void> | void

                                                            diff --git a/docs/types/Hook.html b/docs/types/Hook.html index b099721b..ea2edb57 100644 --- a/docs/types/Hook.html +++ b/docs/types/Hook.html @@ -2,4 +2,4 @@ If warmup is enabled, the hook will be called twice, once for the warmup and once for the run.

                                                            Type Declaration

                                                              • (task?: Task, mode?: "run" | "warmup"): Promise<void> | void
                                                              • Parameters

                                                                • Optionaltask: Task

                                                                  the task instance

                                                                • Optionalmode: "run" | "warmup"

                                                                  the mode where the hook is being called

                                                                  -

                                                                Returns Promise<void> | void

                                                            +

                                                            Returns Promise<void> | void

                                                            diff --git a/docs/types/JSRuntime.html b/docs/types/JSRuntime.html index 11f5339f..17f106cf 100644 --- a/docs/types/JSRuntime.html +++ b/docs/types/JSRuntime.html @@ -1,3 +1,3 @@ JSRuntime | tinybench - v5.1.0
                                                            tinybench - v5.1.0
                                                              Preparing search index...

                                                              Type Alias JSRuntime

                                                              JSRuntime:
                                                                  | "browser"
                                                                  | "bun"
                                                                  | "deno"
                                                                  | "edge-light"
                                                                  | "fastly"
                                                                  | "hermes"
                                                                  | "jsc"
                                                                  | "lagon"
                                                                  | "moddable"
                                                                  | "netlify"
                                                                  | "node"
                                                                  | "quickjs-ng"
                                                                  | "spidermonkey"
                                                                  | "unknown"
                                                                  | "v8"
                                                                  | "workerd"

                                                              The JavaScript runtime environment.

                                                              +
                                                              diff --git a/docs/types/NowFn.html b/docs/types/NowFn.html index a3a5309e..5afcbde2 100644 --- a/docs/types/NowFn.html +++ b/docs/types/NowFn.html @@ -1,2 +1,2 @@ NowFn | tinybench - v5.1.0
                                                              tinybench - v5.1.0
                                                                Preparing search index...

                                                                Type Alias NowFn

                                                                NowFn: () => number

                                                                A function that returns the current timestamp.

                                                                -

                                                                Type Declaration

                                                                  • (): number
                                                                  • Returns number

                                                                +

                                                                Type Declaration

                                                                  • (): number
                                                                  • Returns number

                                                                diff --git a/docs/types/Samples.html b/docs/types/Samples.html new file mode 100644 index 00000000..7f481cbd --- /dev/null +++ b/docs/types/Samples.html @@ -0,0 +1,2 @@ +Samples | tinybench - v5.1.0
                                                                tinybench - v5.1.0
                                                                  Preparing search index...

                                                                  Type Alias Samples

                                                                  Samples: [number, ...number[]]

                                                                  A type representing a samples-array with at least one number.

                                                                  +
                                                                  diff --git a/docs/types/SortedSamples.html b/docs/types/SortedSamples.html new file mode 100644 index 00000000..4d5b1142 --- /dev/null +++ b/docs/types/SortedSamples.html @@ -0,0 +1,3 @@ +SortedSamples | tinybench - v5.1.0
                                                                  tinybench - v5.1.0
                                                                    Preparing search index...

                                                                    Type Alias SortedSamples

                                                                    SortedSamples: Samples & { __sorted__: unique symbol }

                                                                    A type representing a sorted samples-array with at least one number.

                                                                    +

                                                                    Type Declaration

                                                                    • Readonly__sorted__: unique symbol

                                                                      A unique symbol to identify sorted samples

                                                                      +
                                                                    diff --git a/docs/types/TaskEvents.html b/docs/types/TaskEvents.html index d5514a13..c084dbb1 100644 --- a/docs/types/TaskEvents.html +++ b/docs/types/TaskEvents.html @@ -1,2 +1,2 @@ TaskEvents | tinybench - v5.1.0
                                                                    tinybench - v5.1.0
                                                                      Preparing search index...

                                                                      Type Alias TaskEvents

                                                                      TaskEvents: Extract<
                                                                          BenchEvents,
                                                                          "abort"
                                                                          | "complete"
                                                                          | "cycle"
                                                                          | "error"
                                                                          | "reset"
                                                                          | "start"
                                                                          | "warmup",
                                                                      >

                                                                      Task events

                                                                      -
                                                                      +
                                                                      diff --git a/docs/types/TaskResult.html b/docs/types/TaskResult.html index d0240507..204a6107 100644 --- a/docs/types/TaskResult.html +++ b/docs/types/TaskResult.html @@ -1,2 +1,2 @@ TaskResult | tinybench - v5.1.0
                                                                      tinybench - v5.1.0
                                                                        Preparing search index...

                                                                        Type Alias TaskResult

                                                                        The task result

                                                                        -
                                                                        +
                                                                        diff --git a/docs/variables/now.html b/docs/variables/now.html index 64ed00c2..6532898c 100644 --- a/docs/variables/now.html +++ b/docs/variables/now.html @@ -1,4 +1,4 @@ now | tinybench - v5.1.0
                                                                        tinybench - v5.1.0
                                                                          Preparing search index...

                                                                          Variable nowConst

                                                                          now: () => number = ...

                                                                          Returns the current high resolution timestamp in milliseconds using performance.now().

                                                                          Type Declaration

                                                                            • (): number
                                                                            • The performance.now() method returns a high resolution timestamp in milliseconds.

                                                                              MDN Reference

                                                                              -

                                                                              Returns number

                                                                          +

                                                                          Returns number

                                                                          diff --git a/src/index.ts b/src/index.ts index 76cb9012..e819a4b6 100644 --- a/src/index.ts +++ b/src/index.ts @@ -18,6 +18,8 @@ export type { JSRuntime, NowFn, ResolvedBenchOptions, + Samples, + SortedSamples, Statistics, TaskEvents, TaskResult, diff --git a/src/types.ts b/src/types.ts index cdd33d5a..3605a2ee 100644 --- a/src/types.ts +++ b/src/types.ts @@ -73,7 +73,7 @@ export interface BenchLike extends EventTarget { listener: EventListener | EventListenerObject | null, options?: RemoveEventListenerOptionsArgument ) => void - + /** * Should samples be retained for further custom processing */ @@ -391,7 +391,15 @@ export interface ResolvedBenchOptions extends BenchOptions { */ export type Samples = [number, ...number[]] -export type SortedSamples = Samples & { readonly __sorted__: unique symbol } +/** + * A type representing a sorted samples-array with at least one number. + */ +export type SortedSamples = Samples & { + /** + * A unique symbol to identify sorted samples + */ + readonly __sorted__: unique symbol +} /** * The statistics object @@ -467,6 +475,9 @@ export interface Statistics { */ rme: number + /** + * samples used to calculate the statistics + */ samples: SortedSamples | undefined /** From 2b11957b2435e976eeb54aeba876f048be351b29 Mon Sep 17 00:00:00 2001 From: Aras Abbasi Date: Sat, 15 Nov 2025 22:23:19 +0100 Subject: [PATCH 9/9] Update README.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 68e6b762..c47752f4 100644 --- a/README.md +++ b/README.md @@ -166,7 +166,7 @@ plotting, custom analysis, or exporting results. You can enable samples retention at the bench level by setting the `retainSamples` option to `true` when creating a `Bench` instance: -```tsts +```ts const bench = new Bench({ retainSamples: true }) ```