aboutsummaryrefslogtreecommitdiff
path: root/src/tools/benchmark-builder/benchmark-builder.models.ts
blob: 0bf3456b559d51a4e67ce8247bb98d8626afcacf (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import _ from 'lodash';

export { computeAverage, computeVariance, arrayToMarkdownTable };

function computeAverage({ data }: { data: number[] }) {
  if (data.length === 0) {
    return 0;
  }

  return _.sum(data) / data.length;
}

function computeVariance({ data }: { data: number[] }) {
  const mean = computeAverage({ data });

  const squaredDiffs = data.map(value => (value - mean) ** 2);

  return computeAverage({ data: squaredDiffs });
}

function arrayToMarkdownTable({ data, headerMap = {} }: { data: Record<string, unknown>[]; headerMap?: Record<string, string> }) {
  if (!Array.isArray(data) || data.length === 0) {
    return '';
  }

  const headers = Object.keys(data[0]);
  const rows = data.map(obj => Object.values(obj));

  const headerRow = `| ${headers.map(header => headerMap[header] ?? header).join(' | ')} |`;
  const separatorRow = `| ${headers.map(() => '---').join(' | ')} |`;
  const dataRows = rows.map(row => `| ${row.join(' | ')} |`).join('\n');

  return `${headerRow}\n${separatorRow}\n${dataRows}`;
}