diff --git a/backend/src/util/num_stats.rs b/backend/src/util/num_stats.rs index d425585..6c80b46 100644 --- a/backend/src/util/num_stats.rs +++ b/backend/src/util/num_stats.rs @@ -1,4 +1,4 @@ -use num_traits::{Zero, NumOps, Bounded}; +use num_traits::{Zero, NumOps, Bounded, ops::saturating::Saturating}; use std::iter::Sum; use std::convert::TryFrom; @@ -10,7 +10,7 @@ pub struct NumStats { sum: T, } -impl> NumStats { +impl> NumStats { pub fn new(size: usize) -> Self { NumStats { stack: vec![T::zero(); size].into_boxed_slice(), @@ -22,7 +22,7 @@ impl> NumStats { pub fn push(&mut self, val: T) { let slot = &mut self.stack[self.index % self.stack.len()]; - self.sum = self.sum - *slot + val; + self.sum = (self.sum + val).saturating_sub(*slot); *slot = val;