import * as Stream from "stream";
import { Test, TestOptions } from "./Test";
import { Processor } from "./Processor";
export type AsyncCallback = (resolve: () => void, reject: (error: unknown) => void) => void;
export type AsyncSetupCallback<T> = (resolve: () => void, reject: (error: unknown) => void, setup: T) => void;
export type IsoBenchOptions = {
    parallel?: number;
} & TestOptions;
export declare class IsoBench {
    #private;
    readonly name: string;
    processors: Processor[];
    tests: Test[];
    currentTests: Test[];
    options: Required<IsoBenchOptions>;
    running: boolean;
    done: boolean;
    private _waiting;
    constructor(name?: string, options?: IsoBenchOptions);
    static IfMaster(cb: () => void): void;
    addAsync(name: string, callback: AsyncCallback, options?: TestOptions): this;
    addAsync<T>(name: string, callback: AsyncSetupCallback<T>, setup: () => T, options?: TestOptions): this;
    add(name: string, callback: () => void, options?: TestOptions): this;
    add<T>(name: string, callback: (setup: T) => void, setup: () => T, options?: TestOptions): this;
    addProcessor(processorCallback: () => Processor): this;
    consoleLog(): this;
    streamLog(streamCallback: () => Stream.Writable): this;
    endGroup(name: string): this;
    run(): Promise<void>;
    protected wait(): Promise<void>;
    private _start;
}
