aboutsummaryrefslogtreecommitdiff
path: root/src/tools/benchmark-builder/benchmark-builder.models.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/benchmark-builder/benchmark-builder.models.ts')
-rw-r--r--src/tools/benchmark-builder/benchmark-builder.models.ts34
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}`;
+}