import { Logger } from "@syntest/logging";
import { Encoding } from "../Encoding";
import { ExecutionResult } from "../ExecutionResult";
import { SearchSubject } from "../SearchSubject";
import { ControlFlowBasedObjectiveFunction } from "./ControlFlowBasedObjectiveFunction";
import { ApproachLevel } from "./heuristics/ApproachLevel";
import { BranchDistance } from "./heuristics/BranchDistance";
/**
 * Objective function for the branch criterion.
 *
 * @author Mitchell Olsthoorn
 * @author Annibale Panichella
 * @author Dimitri Stallenberg
 */
export declare class BranchObjectiveFunction<T extends Encoding> extends ControlFlowBasedObjectiveFunction<T> {
    protected static LOGGER: Logger;
    constructor(approachLevel: ApproachLevel, branchDistance: BranchDistance, subject: SearchSubject<T>, id: string);
    /**
     * Calculating the distance for a single encoding
     *
     * This returns a number structured as follows: XX.YYZZZZ
     * Where:
     * - XX is the approach level
     * - YY is the fraction of uncovered statements within the block
     * - ZZZZ is the branch distance from the objective
     *
     * @param encoding
     * @returns
     */
    calculateDistance(encoding: T): number;
    protected _calculateControlFlowDistance(executionResult: ExecutionResult): number;
}
//# sourceMappingURL=BranchObjectiveFunction.d.ts.map