diff options
Diffstat (limited to 'src/tools/benchmark-builder/benchmark-builder.models.ts')
-rw-r--r-- | src/tools/benchmark-builder/benchmark-builder.models.ts | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/tools/benchmark-builder/benchmark-builder.models.ts b/src/tools/benchmark-builder/benchmark-builder.models.ts new file mode 100644 index 0000000..be8f965 --- /dev/null +++ b/src/tools/benchmark-builder/benchmark-builder.models.ts @@ -0,0 +1,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) => Math.pow(value - mean, 2)); + + return computeAverage({ data: squaredDiffs }); +} + +function arrayToMarkdownTable({ data, headerMap = {} }: { data: 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}`; +} |