feat: add median task run time statistic
[poolifier.git] / src / utils.ts
index 809ca38b6bdb17d9f92274bc822543d61bf7a9f4..d85c5ba58b4988fad867a9b35f9dca5bb5bb2b45 100644 (file)
@@ -4,3 +4,21 @@
 export const EMPTY_FUNCTION: () => void = Object.freeze(() => {
   /* Intentionally empty */
 })
+
+/**
+ * Returns the median of the given data set.
+ *
+ * @param dataSet - Data set.
+ * @returns The median of the given data set.
+ */
+export const median = (dataSet: number[]): number => {
+  if (Array.isArray(dataSet) && dataSet.length === 1) {
+    return dataSet[0]
+  }
+  const sortedDataSet = dataSet.slice().sort((a, b) => a - b)
+  const middleIndex = Math.floor(sortedDataSet.length / 2)
+  if (sortedDataSet.length % 2 === 0) {
+    return sortedDataSet[middleIndex / 2]
+  }
+  return (sortedDataSet[middleIndex - 1] + sortedDataSet[middleIndex]) / 2
+}