fix: fix median computation
authorJérôme Benoit <jerome.benoit@sap.com>
Mon, 8 May 2023 20:45:36 +0000 (22:45 +0200)
committerJérôme Benoit <jerome.benoit@sap.com>
Mon, 8 May 2023 20:45:36 +0000 (22:45 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
src/utils.ts
tests/utils.test.js

index ed118da6b5e10165d23c2f6820af73e9ed7f02bb..e56c058e5c99a292d1ac2028290ddb2c3f19752f 100644 (file)
@@ -25,12 +25,8 @@ 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]
-  }
-  return (sortedDataSet[middleIndex - 1] + sortedDataSet[middleIndex]) / 2
+  dataSet = [...dataSet].slice().sort((a, b) => a - b)
+  return (dataSet[(dataSet.length - 1) >> 1] + dataSet[dataSet.length >> 1]) / 2
 }
 
 export const isPlainObject = (obj: unknown): boolean =>
index 7d4040ce324ec67a8668d68e38ab1a70eb45e165..c08efbc1981a7acd6084398c0208d9b5d4c6c1fd 100644 (file)
@@ -4,7 +4,7 @@ const { isPlainObject, median } = require('../lib/utils')
 describe('Utils test suite', () => {
   it('Verify median computation', () => {
     const array = [0.25, 4.75, 3.05, 6.04, 1.01, 2.02, 5.03]
-    expect(median(array)).toBe(2.535)
+    expect(median(array)).toBe(3.05)
   })
 
   it('Verify isPlainObject() behavior', () => {