import * as mathjs from "mathjs";
import { Table } from "@tqman/ink-table";
type ItemStats = {
name: string;
values: number[];
};
export function StatsTable(props: { items: ItemStats[] }) {
const { items } = props;
const tableData = items.map((item) => ({
name: item.name,
...getItemStats(item.values),
}));
return
;
}
type ItemTableStat = {
"25%": string;
median: string;
"75%": string;
average: string;
std: string;
};
function getItemStats(values: number[]): ItemTableStat {
return {
"25%": formatNumber(mathjs.quantileSeq(values, 0.25)),
median: formatNumber(mathjs.median(values)),
"75%": formatNumber(mathjs.quantileSeq(values, 0.75)),
average: formatNumber(mathjs.mean(values)),
std: formatNumber(mathjs.std(values) as unknown as number, ""),
};
}
const formatNumber = (n: number, postfix = "ms") =>
n.toFixed(2) + " " + postfix;