refactor: align statistic helpers return for empty data set
authorJérôme Benoit <jerome.benoit@sap.com>
Mon, 8 May 2023 22:24:33 +0000 (00:24 +0200)
committerJérôme Benoit <jerome.benoit@sap.com>
Mon, 8 May 2023 22:24:33 +0000 (00:24 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
src/utils/Utils.ts
test/utils/UtilsTest.ts

index 717a6e68b6ef76362370474f9f6fa475978e4672..4f89179f1dc5f45ba3b954ff38f1b0ceafe207c5 100644 (file)
@@ -337,6 +337,9 @@ export class Utils {
   }
 
   public static median(dataSet: number[]): number {
+    if (Utils.isEmptyArray(dataSet)) {
+      return 0;
+    }
     if (Array.isArray(dataSet) === true && dataSet.length === 1) {
       return dataSet[0];
     }
@@ -345,12 +348,12 @@ export class Utils {
   }
 
   // TODO: use order statistics tree https://en.wikipedia.org/wiki/Order_statistic_tree
-  public static percentile(dataSet: number[], percentile: number): number | undefined {
+  public static percentile(dataSet: number[], percentile: number): number {
     if (percentile < 0 && percentile > 100) {
       throw new RangeError('Percentile is not between 0 and 100');
     }
     if (Utils.isEmptyArray(dataSet)) {
-      return undefined;
+      return 0;
     }
     const sortedDataSet = dataSet.slice().sort((a, b) => a - b);
     if (percentile === 0 || sortedDataSet.length === 1) {
index 35294d07c2c25477eb5da93abfbcabc2640e7c3d..885f7085dfeea29b38a07e65083dab2865acc1cb 100644 (file)
@@ -331,6 +331,7 @@ describe('Utils test suite', () => {
   });
 
   it('Verify median()', () => {
+    expect(Utils.median([])).toBe(0);
     const array0 = [0.08];
     expect(Utils.median(array0)).toBe(0.08);
     const array1 = [0.25, 4.75, 3.05, 6.04, 1.01, 2.02, 5.03];
@@ -338,7 +339,7 @@ describe('Utils test suite', () => {
   });
 
   it('Verify percentile()', () => {
-    expect(Utils.percentile([], 25)).toBe(undefined);
+    expect(Utils.percentile([], 25)).toBe(0);
     const array0 = [0.08];
     expect(Utils.percentile(array0, 50)).toBe(0.08);
     const array1 = [0.25, 4.75, 3.05, 6.04, 1.01, 2.02, 5.03];