/// <reference types="benchmark" />
import Test, { TestProperties } from './Test';
import Deferred from './Deferred';
import Task from '@dojo/core/async/Task';
import Benchmark = require('benchmark');
export default class BenchmarkTest extends Test {
    test: BenchmarkTestFunction;
    benchmark: InternBenchmark;
    constructor(descriptor: BenchmarkTestOptions);
    timeElapsed: number;
    async(_timeout?: number, _numCallsUntilResolution?: number): Deferred<any>;
    run(): Task<void>;
    static async(testFunction: BenchmarkDeferredTestFunction, numCallsUntilResolution?: number): BenchmarkTestFunction;
}
export interface BenchmarkTestFunction {
    (this: BenchmarkTest, test: BenchmarkTest): void | Promise<any>;
    options?: BenchmarkOptions;
}
export interface BenchmarkDeferredTestFunction {
    (this: BenchmarkTest, test: BenchmarkTest, deferred: Deferred<void>): void | Promise<any>;
    options?: BenchmarkOptions;
}
export interface BenchmarkTestProperties extends TestProperties {
    test: BenchmarkTestFunction;
    skip: string;
    numCallsUntilResolution: number;
}
export declare type BenchmarkTestOptions = Partial<BenchmarkTestProperties> & {
    name: string;
    test: BenchmarkTestFunction;
    options?: BenchmarkOptions;
};
export interface BenchmarkOptions extends Benchmark.Options {
    skip?: string;
    numCallsUntilResolution?: number;
}
export interface InternBenchmark extends Benchmark {
    internTest?: BenchmarkTest;
}
