type TimestampedData,
} from '../types/index.js'
import {
+ average,
buildPerformanceStatisticsMessage,
Configuration,
Constants,
logger,
logPrefix,
max,
- mean,
median,
min,
- nthPercentile,
- stdDeviation,
+ percentile,
+ std,
} from '../utils/index.js'
export class PerformanceStatistics {
.measurementTimeSeries as CircularBuffer<TimestampedData>
)
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- this.statistics.statisticsData.get(entry.name)!.avgTimeMeasurement = mean(timeMeasurementValues)
+ this.statistics.statisticsData.get(entry.name)!.avgTimeMeasurement =
+ average(timeMeasurementValues)
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
this.statistics.statisticsData.get(entry.name)!.medTimeMeasurement =
median(timeMeasurementValues)
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
this.statistics.statisticsData.get(entry.name)!.ninetyFiveThPercentileTimeMeasurement =
- nthPercentile(timeMeasurementValues, 95)
+ percentile(timeMeasurementValues, 95)
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- this.statistics.statisticsData.get(entry.name)!.stdDevTimeMeasurement = stdDeviation(
+ this.statistics.statisticsData.get(entry.name)!.stdTimeMeasurement = std(
timeMeasurementValues,
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
this.statistics.statisticsData.get(entry.name)!.avgTimeMeasurement
-export const mean = (dataSet: number[]): number => {
+export const average = (dataSet: number[]): number => {
if (Array.isArray(dataSet) && dataSet.length === 0) {
return 0
}
args.reduce((maximum, num) => (maximum > num ? maximum : num), Number.NEGATIVE_INFINITY)
// TODO: use order statistics tree https://en.wikipedia.org/wiki/Order_statistic_tree
-export const nthPercentile = (dataSet: number[], percentile: number): number => {
+export const percentile = (dataSet: number[], percentile: number): number => {
if (percentile < 0 && percentile > 100) {
throw new RangeError('Percentile is not between 0 and 100')
}
* @see https://en.wikipedia.org/wiki/Unbiased_estimation_of_standard_deviation
* @internal
*/
-export const stdDeviation = (dataSet: number[], dataSetAverage: number = mean(dataSet)): number => {
+export const std = (dataSet: number[], dataSetAverage: number = average(dataSet)): number => {
if (Array.isArray(dataSet) && (dataSet.length === 0 || dataSet.length === 1)) {
return 0
}
import { expect } from '@std/expect'
import { describe, it } from 'node:test'
-import {
- max,
- mean,
- median,
- min,
- nthPercentile,
- stdDeviation,
-} from '../../src/utils/StatisticUtils.js'
+import { average, max, median, min, percentile, std } from '../../src/utils/StatisticUtils.js'
await describe('StatisticUtils test suite', async () => {
- await it('Verify mean()', () => {
- expect(mean([])).toBe(0)
- expect(mean([0.08])).toBe(0.08)
- expect(mean([0.25, 4.75, 3.05, 6.04, 1.01, 2.02, 5.03])).toBe(3.1642857142857146)
- expect(mean([0.25, 4.75, 3.05, 6.04, 1.01, 2.02])).toBe(2.8533333333333335)
+ await it('Verify average()', () => {
+ expect(average([])).toBe(0)
+ expect(average([0.08])).toBe(0.08)
+ expect(average([0.25, 4.75, 3.05, 6.04, 1.01, 2.02, 5.03])).toBe(3.1642857142857146)
+ expect(average([0.25, 4.75, 3.05, 6.04, 1.01, 2.02])).toBe(2.8533333333333335)
})
await it('Verify median()', () => {
expect(max(-1, 0)).toBe(0)
})
- await it('Verify nthPercentile()', () => {
- expect(nthPercentile([], 25)).toBe(0)
- expect(nthPercentile([0.08], 50)).toBe(0.08)
+ await it('Verify percentile()', () => {
+ expect(percentile([], 25)).toBe(0)
+ expect(percentile([0.08], 50)).toBe(0.08)
const array0 = [0.25, 4.75, 3.05, 6.04, 1.01, 2.02, 5.03]
- expect(nthPercentile(array0, 0)).toBe(0.25)
- expect(nthPercentile(array0, 50)).toBe(3.05)
- expect(nthPercentile(array0, 80)).toBe(4.974)
- expect(nthPercentile(array0, 85)).toBe(5.131)
- expect(nthPercentile(array0, 90)).toBe(5.434)
- expect(nthPercentile(array0, 95)).toBe(5.736999999999999)
- expect(nthPercentile(array0, 100)).toBe(6.04)
+ expect(percentile(array0, 0)).toBe(0.25)
+ expect(percentile(array0, 50)).toBe(3.05)
+ expect(percentile(array0, 80)).toBe(4.974)
+ expect(percentile(array0, 85)).toBe(5.131)
+ expect(percentile(array0, 90)).toBe(5.434)
+ expect(percentile(array0, 95)).toBe(5.736999999999999)
+ expect(percentile(array0, 100)).toBe(6.04)
})
- await it('Verify stdDeviation()', () => {
- expect(stdDeviation([0.25, 4.75, 3.05, 6.04, 1.01, 2.02, 5.03])).toBe(2.1879050645374383)
+ await it('Verify std()', () => {
+ expect(std([0.25, 4.75, 3.05, 6.04, 1.01, 2.02, 5.03])).toBe(2.1879050645374383)
})
})