diff --git a/decor/eta.go b/decor/eta.go index f9c755b..a85224c 100644 --- a/decor/eta.go +++ b/decor/eta.go @@ -60,9 +60,6 @@ } v := internal.Round(d.average.Value()) - if math.IsInf(v, 0) || math.IsNaN(v) { - v = 0 - } remaining := d.normalizer(time.Duration((st.Total - st.Current) * int64(v))) hours := int64((remaining / time.Hour) % 60) minutes := int64((remaining / time.Minute) % 60) @@ -89,6 +86,9 @@ workDuration = wd } lastItemEstimate := float64(workDuration) / float64(n) + if math.IsInf(lastItemEstimate, 0) || math.IsNaN(lastItemEstimate) { + return + } d.average.Add(lastItemEstimate) } @@ -160,7 +160,7 @@ var normalized time.Duration var lastCall time.Time return func(remaining time.Duration) time.Duration { - if diff := normalized - remaining; diff <= 0 || diff >= maxTolerate || remaining <= maxTolerate { + if diff := normalized - remaining; diff <= 0 || diff > maxTolerate || remaining < maxTolerate/2 { normalized = remaining lastCall = time.Now() return remaining diff --git a/decor/speed.go b/decor/speed.go index 44cf011..395e5d0 100644 --- a/decor/speed.go +++ b/decor/speed.go @@ -3,6 +3,7 @@ import ( "fmt" "io" + "math" "strconv" "strings" "time" @@ -195,7 +196,10 @@ for _, wd := range wdd { workDuration = wd } - speed := float64(n) / workDuration.Seconds() + speed := float64(n) / workDuration.Seconds() / 1000 + if math.IsInf(speed, 0) || math.IsNaN(speed) { + return + } s.average.Add(speed) }