import { FrameworkInfo, TestConfig } from "./framework-types";

export interface TestResult {
  sum: number;
  count: number;
}

export interface TimingResult<T> {
  result: T;
  timing: TestTiming;
}

export interface TestTiming {
  time: number;
}

export function verifyBenchResult(
  perfFramework: FrameworkInfo,
  config: TestConfig,
  timedResult: TimingResult<TestResult>
): void {
  const { testPullCounts, framework } = perfFramework;
  const { expected } = config;
  const { result } = timedResult;

  if (expected.sum) {
    console.assert(
      result.sum == expected.sum,
      `sum ${framework.name} ${config.name} result:${result.sum} expected:${expected.sum}`
    );
  }
  if (
    expected.count &&
    (config.readFraction === 1 || testPullCounts) &&
    testPullCounts !== false
  ) {
    console.assert(
      result.count === expected.count,
      `count ${framework.name} ${config.name} result:${result.count} expected:${expected.count}`
    );
  }
}
