type InferInput<Model> = Model extends TestModel<infer I, any> ? I : Model;
type InferResult<Model> = Model extends TestModel<any, infer R> ? R : void;
export type TestModel<Input, Result = void> = {
    expected?: Result;
    input: Input;
};
export type TestSuit<Model extends TestModel<Input, Result>, Input = InferInput<Model>, Result = InferResult<Model>> = {
    key: string;
    label: string;
    models: TestModel<Input, Result>[];
    processor: (model: Input) => Promise<Result>;
};
export declare function runTestSuits(testSuits: TestSuit<any, any, any>[]): Promise<void>;
export declare function runTestSuit<Model extends TestModel<Input, Result>, Input = InferInput<Model>, Result = InferResult<Model>>(testSuit: TestSuit<Model, Input, Result>): Promise<void>;
export declare function assertNoTestErrors(): void;
export {};
