]> Piment Noir Git Repositories - e-mobility-charging-stations-simulator.git/commitdiff
refactor: improve stats utils input guards
authorJérôme Benoit <jerome.benoit@sap.com>
Wed, 20 Aug 2025 23:58:52 +0000 (01:58 +0200)
committerJérôme Benoit <jerome.benoit@sap.com>
Wed, 20 Aug 2025 23:58:52 +0000 (01:58 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
src/utils/StatisticUtils.ts

index 7ade29c10387d602cac0a2bbdf2c9d815a812898..759660643b4fc8e6a5641263bf547b70285f8ddd 100644 (file)
@@ -1,18 +1,18 @@
 export const average = (dataSet: number[]): number => {
-  if (Array.isArray(dataSet) && dataSet.length === 0) {
+  if (!Array.isArray(dataSet) || dataSet.length === 0) {
     return 0
   }
-  if (Array.isArray(dataSet) && dataSet.length === 1) {
+  if (dataSet.length === 1) {
     return dataSet[0]
   }
   return dataSet.reduce((accumulator, number) => accumulator + number, 0) / dataSet.length
 }
 
 export const median = (dataSet: number[]): number => {
-  if (Array.isArray(dataSet) && dataSet.length === 0) {
+  if (!Array.isArray(dataSet) || dataSet.length === 0) {
     return 0
   }
-  if (Array.isArray(dataSet) && dataSet.length === 1) {
+  if (dataSet.length === 1) {
     return dataSet[0]
   }
   const sortedDataSet = dataSet.slice().sort((a, b) => a - b)
@@ -29,10 +29,13 @@ export const max = (...args: number[]): number =>
 
 // TODO: use order statistics tree https://en.wikipedia.org/wiki/Order_statistic_tree
 export const percentile = (dataSet: number[], percentile: number): number => {
+  if (!Array.isArray(dataSet)) {
+    throw new TypeError('Data set must be an array')
+  }
   if (percentile < 0 || percentile > 100) {
     throw new RangeError('Percentile is not between 0 and 100')
   }
-  if (Array.isArray(dataSet) && dataSet.length === 0) {
+  if (dataSet.length === 0) {
     return 0
   }
   const sortedDataSet = dataSet.slice().sort((a, b) => a - b)
@@ -63,7 +66,10 @@ export const percentile = (dataSet: number[], percentile: number): number => {
  * @internal
  */
 export const std = (dataSet: number[], dataSetAverage: number = average(dataSet)): number => {
-  if (Array.isArray(dataSet) && dataSet.length <= 1) {
+  if (!Array.isArray(dataSet)) {
+    throw new TypeError('Data set must be an array')
+  }
+  if (dataSet.length <= 1) {
     return 0
   }
   return Math.sqrt(