123 lines
2.5 KiB
Go
123 lines
2.5 KiB
Go
package common
|
|
|
|
import (
|
|
"math"
|
|
"time"
|
|
)
|
|
|
|
// Min or max (time.Duration datatype.)
|
|
func MinMaxTimeDuration(array []time.Duration) (time.Duration, time.Duration) {
|
|
if len(array) == 0 {
|
|
return 0 * time.Microsecond, 0 * time.Microsecond
|
|
} else {
|
|
var max time.Duration = array[0]
|
|
var min time.Duration = array[0]
|
|
|
|
for j := 1; j < len(array); j++ {
|
|
value := array[j]
|
|
if max < value {
|
|
max = value
|
|
}
|
|
if min > value {
|
|
min = value
|
|
}
|
|
}
|
|
return min, max
|
|
}
|
|
}
|
|
|
|
// Sum (time.Duration datatype.)
|
|
func SumTimeDuration(array []time.Duration) time.Duration {
|
|
var result time.Duration = 0 * time.Microsecond
|
|
for _, v := range array {
|
|
result += v
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
// Mean (time.Duration datatype.)
|
|
func MeanTimeDuration(array []time.Duration) time.Duration {
|
|
sumArr := float64(SumTimeDuration(array)/time.Microsecond) / float64(len(array))
|
|
|
|
return time.Duration(sumArr) * time.Microsecond
|
|
}
|
|
|
|
// stdDev (time.Duration datatype.)
|
|
func StdDevTimeDuration(array []time.Duration) time.Duration {
|
|
|
|
square := float64(0)
|
|
|
|
for j := 1; j < len(array); j++ {
|
|
square += float64((array[j]-MeanTimeDuration(array))/time.Microsecond) * float64((array[j]-MeanTimeDuration(array))/time.Microsecond)
|
|
}
|
|
|
|
return time.Duration(math.Sqrt(square/float64(len(array)))) * time.Microsecond
|
|
}
|
|
|
|
// Min or max function (int datatype.)
|
|
func MinMax(array []int) (int, int) {
|
|
if len(array) == 0 {
|
|
return 0, 0
|
|
} else {
|
|
var max int = array[0]
|
|
var min int = array[0]
|
|
for _, value := range array {
|
|
if max < value {
|
|
max = value
|
|
}
|
|
if min > value {
|
|
min = value
|
|
}
|
|
}
|
|
return min, max
|
|
}
|
|
}
|
|
|
|
// Sum (int datatype.)
|
|
func Sum(array []int) int {
|
|
var result int = 0
|
|
for _, v := range array {
|
|
result += v
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
// Mean (float64 datatype.)
|
|
func Mean(array []int) float64 {
|
|
if len(array) == 0 {
|
|
return 0.0
|
|
} else {
|
|
sumArr := float64(Sum(array)) / float64(len(array))
|
|
|
|
return float64(sumArr)
|
|
}
|
|
}
|
|
|
|
// stdDev (float64 datatype.)
|
|
func StdDev(array []int) float64 {
|
|
if len(array) == 0 {
|
|
return 0.0
|
|
} else {
|
|
square := float64(0)
|
|
|
|
for _, v := range array {
|
|
square += (float64(v) - Mean(array)) * (float64(v) - Mean(array))
|
|
}
|
|
|
|
return math.Sqrt(square / float64(len(array)))
|
|
}
|
|
}
|
|
|
|
// Takes a slice and looks for an element in it. If found it will
|
|
// return it's key, otherwise it will return -1 and a bool of false.
|
|
func IfPresentInSlice(slice []int, val int) (int, bool) {
|
|
for i, item := range slice {
|
|
if item == val {
|
|
return i, true
|
|
}
|
|
}
|
|
return -1, false
|
|
}
|