import { promises as fs } from 'fs'
import { join } from 'path'

import { Summary } from 'benny/lib/internal/common-types'

import { benchAsync } from './async'
import { benchBuffer } from './buffer'
import { benchCreateArray } from './create-array'
import { benchGetArray } from './get-array-from-js'
import { benchGetSetProperty } from './get-set-property'
import { benchNoop } from './noop'
import { benchPlus } from './plus'
import { benchQuery } from './query'

async function run() {
  const output = [
    await benchNoop(),
    await benchPlus(),
    await benchBuffer(),
    await benchCreateArray(),
    await benchGetArray(),
    await benchGetSetProperty(),
    await benchAsync(),
    await benchQuery(),
  ]
    .map(formatSummary)
    .join('\n')

  await fs.writeFile(join(process.cwd(), 'bench.txt'), output, 'utf8')
}

function formatSummary(summary: Summary): string {
  return summary.results
    .map(
      (result) =>
        `${summary.name}#${result.name} x ${result.ops} ops/sec ±${result.margin}% (${result.samples} runs sampled)`,
    )
    .join('\n')
}

run().catch((e) => {
  console.error(e)
})