/// <reference types="benchmark" />
import Executor from '../executors/Executor';
import Reporter, { ReporterProperties } from './Reporter';
import Test from '../Test';
import Suite from '../Suite';
import _Benchmark = require('benchmark');
export default class Benchmark extends Reporter implements BenchmarkReporterProperties {
    baseline: BenchmarkBaseline;
    filename: string;
    mode: string;
    sessions: {
        [sessionId: string]: {
            suites: {
                [suiteId: string]: {
                    numBenchmarks: number;
                    numFailedBenchmarks: number;
                };
            };
            environment?: BenchmarkEnvironment;
            [key: string]: any;
        };
    };
    verbosity: number;
    thresholds: BenchmarkThresholds;
    constructor(executor: Executor, config?: BenchmarkReporterOptions);
    _getSession(testOrSuite: Test | Suite): {
        [key: string]: any;
        suites: {
            [suiteId: string]: {
                numBenchmarks: number;
                numFailedBenchmarks: number;
            };
        };
        environment?: BenchmarkEnvironment;
    };
    runEnd(): void;
    suiteEnd(suite: Suite): void;
    suiteStart(suite: Suite): void;
    testPass(test: Test, benchmark?: BenchmarkData): void;
    testFail(test: Test): void;
}
export interface BenchmarkData {
    times: _Benchmark.Times;
    hz: number;
    stats: {
        rme: number;
        moe: number;
        mean: number;
    };
}
export interface BenchmarkThresholds {
    warn?: {
        rme?: number;
        hz?: number;
        mean?: number;
    };
    fail?: {
        rme?: number;
        hz?: number;
        mean?: number;
    };
}
export interface BenchmarkEnvironment {
    client: string;
    version: string;
    platform: string;
    id?: string;
    tests?: {
        [testId: string]: BenchmarkData;
    };
    stats?: _Benchmark.Stats;
}
export interface BenchmarkBaseline {
    environments?: {
        [key: string]: BenchmarkEnvironment;
    };
    [key: string]: any;
}
export interface BenchmarkReporterProperties extends ReporterProperties {
    filename: string;
    mode: string;
    thresholds: BenchmarkThresholds;
    verbosity: number;
}
export declare type BenchmarkReporterOptions = Partial<BenchmarkReporterProperties>;
