X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Futils.ts;h=d39bfa02c8498ed54d8bebc8d9ace5a7a7fd756f;hb=dc021bcca72f8b4d185d96a301579612fba2793b;hp=7927c9738c39d2ad1a417e4a2afdc552ece34caa;hpb=c3f0a07446e3751eed1df850525672f75562429f;p=poolifier.git diff --git a/src/utils.ts b/src/utils.ts index 7927c973..d39bfa02 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -44,6 +44,7 @@ export const DEFAULT_MEASUREMENT_STATISTICS_REQUIREMENTS: MeasurementStatisticsR * Always returns a value greater than zero. * * @returns The host OS optimized maximum pool size. + * @internal */ export const availableParallelism = (): number => { let availableParallelism = 1 @@ -64,6 +65,7 @@ export const availableParallelism = (): number => { // * @param retryNumber - The number of retries that have already been attempted // * @param maxDelayRatio - The maximum ratio of the delay that can be randomized // * @returns Delay in milliseconds +// * @internal // */ // export const exponentialDelay = ( // retryNumber = 0, @@ -74,11 +76,32 @@ export const availableParallelism = (): number => { // return delay + randomSum // } +/** + * Computes the average of the given data set. + * + * @param dataSet - Data set. + * @returns The average of the given data set. + * @internal + */ +export const average = (dataSet: number[]): number => { + if (Array.isArray(dataSet) && dataSet.length === 0) { + return 0 + } + if (Array.isArray(dataSet) && dataSet.length === 1) { + return dataSet[0] + } + return ( + dataSet.reduce((accumulator, number) => accumulator + number, 0) / + dataSet.length + ) +} + /** * Computes the median of the given data set. * * @param dataSet - Data set. * @returns The median of the given data set. + * @internal */ export const median = (dataSet: number[]): number => { if (Array.isArray(dataSet) && dataSet.length === 0) { @@ -127,6 +150,7 @@ export const isPlainObject = (obj: unknown): boolean => * @param killBehavior - Which kind of kill behavior to detect. * @param value - Any value. * @returns `true` if `value` was strictly equals to `killBehavior`, otherwise `false`. + * @internal */ export const isKillBehavior = ( killBehavior: KB, @@ -154,12 +178,12 @@ export const isAsyncFunction = ( * @param measurementRequirements - The measurement statistics requirements. * @param measurementValue - The measurement value. * @param numberOfMeasurements - The number of measurements. + * @internal */ export const updateMeasurementStatistics = ( measurementStatistics: MeasurementStatistics, measurementRequirements: MeasurementStatisticsRequirements, - measurementValue: number, - numberOfMeasurements: number + measurementValue: number ): void => { if (measurementRequirements.aggregate) { measurementStatistics.aggregate = @@ -172,13 +196,17 @@ export const updateMeasurementStatistics = ( measurementValue, measurementStatistics.maximum ?? -Infinity ) - if (measurementRequirements.average && numberOfMeasurements !== 0) { - measurementStatistics.average = - measurementStatistics.aggregate / numberOfMeasurements - } - if (measurementRequirements.median && measurementValue != null) { + if ( + (measurementRequirements.average || measurementRequirements.median) && + measurementValue != null + ) { measurementStatistics.history.push(measurementValue) - measurementStatistics.median = median(measurementStatistics.history) + if (measurementRequirements.average) { + measurementStatistics.average = average(measurementStatistics.history) + } + if (measurementRequirements.median) { + measurementStatistics.median = median(measurementStatistics.history) + } } } } @@ -193,7 +221,7 @@ export const updateMeasurementStatistics = ( export const once = ( // eslint-disable-next-line @typescript-eslint/no-explicit-any fn: (...args: any[]) => void, - context = this + context: unknown // eslint-disable-next-line @typescript-eslint/no-explicit-any ): ((...args: any[]) => void) => { let called = false