Use generic function to compute minimum

This commit is contained in:
Holger Obermaier 2023-08-17 11:41:26 +02:00
parent 89c93185d4
commit ec86a83a27

View File

@ -3,7 +3,6 @@ package metricAggregator
import ( import (
"errors" "errors"
"fmt" "fmt"
"math"
"regexp" "regexp"
"sort" "sort"
"strings" "strings"
@ -45,55 +44,36 @@ func sumfunc(args interface{}) (interface{}, error) {
return 0.0, err return 0.0, err
} }
// Get the minimum value func minAnyType[T float64 | float32 | int | int32 | int64](values []T) (interface{}, error) {
func minfunc(args interface{}) (interface{}, error) { fmt.Println(values)
var err error = nil if len(values) == 0 {
switch values := args.(type) { return 0.0, errors.New("min function requires at least one argument")
case []float64: }
var s float64 = math.MaxFloat64 var minimum T = values[0]
for _, x := range values { for _, value := range values {
if x < s { if value < minimum {
s = x minimum = value
} }
} }
return s, nil return minimum, nil
case []float32:
var s float32 = math.MaxFloat32
for _, x := range values {
if x < s {
s = x
}
}
return s, nil
case []int:
var s int = int(math.MaxInt32)
for _, x := range values {
if x < s {
s = x
}
}
return s, nil
case []int64:
var s int64 = math.MaxInt64
for _, x := range values {
if x < s {
s = x
}
}
return s, nil
case []int32:
var s int32 = math.MaxInt32
for _, x := range values {
if x < s {
s = x
}
}
return s, nil
default:
err = errors.New("function 'min' only on list of values (float64, float32, int, int32, int64)")
} }
return 0.0, err // Get the minimum value
func minfunc(args interface{}) (interface{}, error) {
switch values := args.(type) {
case []float64:
return minAnyType(values)
case []float32:
return minAnyType(values)
case []int:
return minAnyType(values)
case []int64:
return minAnyType(values)
case []int32:
return minAnyType(values)
default:
return 0.0, errors.New("function 'min' only on list of values (float64, float32, int, int32, int64)")
}
} }
// Get the average or mean value // Get the average or mean value