diff --git a/goextVersion.go b/goextVersion.go index 43eb628..9dbce73 100644 --- a/goextVersion.go +++ b/goextVersion.go @@ -1,5 +1,5 @@ package goext -const GoextVersion = "0.0.585" +const GoextVersion = "0.0.586" -const GoextVersionTimestamp = "2025-07-04T11:46:00+0200" +const GoextVersionTimestamp = "2025-07-04T13:56:53+0200" diff --git a/timeext/time.go b/timeext/time.go index 3ba5240..93aea78 100644 --- a/timeext/time.go +++ b/timeext/time.go @@ -148,12 +148,16 @@ func Avg(v ...time.Time) time.Time { return time.Time{} } - var sum int64 + t0 := v[0].UnixNano() + + var dsum int64 for _, t := range v { - sum += t.UnixNano() + dsum += t.UnixNano() - t0 } - return time.Unix(0, sum/int64(len(v))) + tAvg := t0 + (dsum / int64(len(v))) + + return time.Unix(0, tAvg) } func Median(v ...time.Time) time.Time { diff --git a/timeext/time_test.go b/timeext/time_test.go index 13dfc4d..1fb9c14 100644 --- a/timeext/time_test.go +++ b/timeext/time_test.go @@ -242,6 +242,25 @@ func TestAvg_MultipleValues(t *testing.T) { } } +func TestAvg_ManyValues(t *testing.T) { + t1 := time.Date(2022, 1, 1, 0, 0, 0, 0, time.UTC) + t2 := time.Date(2022, 1, 2, 0, 0, 0, 0, time.UTC) + t3 := time.Date(2022, 1, 3, 0, 0, 0, 0, time.UTC) + t4 := time.Date(2022, 1, 4, 0, 0, 0, 0, time.UTC) + t5 := time.Date(2022, 1, 5, 0, 0, 0, 0, time.UTC) + t6 := time.Date(2022, 1, 6, 0, 0, 0, 0, time.UTC) + t7 := time.Date(2022, 1, 7, 0, 0, 0, 0, time.UTC) + t8 := time.Date(2022, 1, 8, 0, 0, 0, 0, time.UTC) + t9 := time.Date(2022, 1, 9, 0, 0, 0, 0, time.UTC) + + expected := time.Date(2022, 1, 5, 0, 0, 0, 0, time.UTC) + result := Avg(t1, t2, t3, t4, t5, t6, t7, t8, t9) + + if !result.Equal(expected) { + t.Errorf("Expected %v but got %v", expected, result) + } +} + func TestAvg_TwoValues(t *testing.T) { t1 := time.Date(2022, 1, 1, 0, 0, 0, 0, time.UTC) t2 := time.Date(2022, 1, 3, 0, 0, 0, 0, time.UTC)