fix: Average Time (#201)

This commit is contained in:
Maciej Hirsz
2019-11-25 15:06:37 +01:00
committed by GitHub
parent 41fd866e2b
commit 550e96432f
+3 -3
View File
@@ -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::iter::Sum;
use std::convert::TryFrom; use std::convert::TryFrom;
@@ -10,7 +10,7 @@ pub struct NumStats<T> {
sum: T, sum: T,
} }
impl<T: NumOps + Zero + Bounded + Copy + Sum + TryFrom<usize>> NumStats<T> { impl<T: Saturating + NumOps + Zero + Bounded + Copy + Sum + TryFrom<usize>> NumStats<T> {
pub fn new(size: usize) -> Self { pub fn new(size: usize) -> Self {
NumStats { NumStats {
stack: vec![T::zero(); size].into_boxed_slice(), stack: vec![T::zero(); size].into_boxed_slice(),
@@ -22,7 +22,7 @@ impl<T: NumOps + Zero + Bounded + Copy + Sum + TryFrom<usize>> NumStats<T> {
pub fn push(&mut self, val: T) { pub fn push(&mut self, val: T) {
let slot = &mut self.stack[self.index % self.stack.len()]; 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; *slot = val;