Skip to content

Commit ac10598

Browse files
feat: removed sub support
1 parent 10320a1 commit ac10598

File tree

2 files changed

+9
-98
lines changed

2 files changed

+9
-98
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "moving-average"
3-
version = "0.1.5"
3+
version = "0.1.7"
44
edition = "2021"
55
license = "MIT"
66
authors = ["Michael Jaquier <[email protected]>"]

src/lib.rs

Lines changed: 8 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,7 @@
3434
//! assert_eq!(moving_average, 15);
3535
//! ```
3636
37-
use core::panic;
38-
use std::ops::{AddAssign, Deref, SubAssign};
37+
use std::ops::{AddAssign, Deref};
3938

4039
macro_rules! from_size {
4140
($($ty:ty),*) => {
@@ -64,11 +63,6 @@ macro_rules! assign_types {
6463
}
6564
}
6665

67-
impl SubAssign<$ty> for Moving<$ty> {
68-
fn sub_assign(&mut self, other: $ty) {
69-
self.sub(other);
70-
}
71-
}
7266
)*
7367

7468

@@ -159,7 +153,6 @@ unsigned!(usize, u8, u16, u32, u64, u128);
159153

160154
#[derive(Debug, Default)]
161155
pub struct Moving<T> {
162-
current: f64,
163156
count: usize,
164157
mean: f64,
165158
phantom: std::marker::PhantomData<T>,
@@ -183,7 +176,6 @@ where
183176
{
184177
pub fn new() -> Self {
185178
Self {
186-
current: 0.0,
187179
count: 0,
188180
mean: 0.0,
189181
phantom: std::marker::PhantomData,
@@ -192,32 +184,8 @@ where
192184

193185
pub fn add(&mut self, value: T) {
194186
let value = T::to_f64(value);
195-
self.current += value;
196-
self.count += 1;
197-
self.calculate_mean()
198-
}
199-
200-
pub fn sub(&mut self, value: T) {
201-
let value = T::to_f64(value);
202-
if T::is_unsigned() {
203-
// Prevent current from going negative for unsigned types
204-
if self.current >= value {
205-
self.current -= value;
206-
} else {
207-
panic!("Cannot subtract a larger value from a smaller value for unsigned types");
208-
}
209-
} else {
210-
// Allow current to go negative for signed types and floats
211-
self.current -= value;
212-
}
213-
214187
self.count += 1;
215-
216-
self.calculate_mean();
217-
}
218-
219-
pub(crate) fn calculate_mean(&mut self) {
220-
self.mean = self.current / self.count as f64;
188+
self.mean += (value - self.mean) / self.count as f64;
221189
}
222190
}
223191

@@ -229,6 +197,12 @@ impl<T> Deref for Moving<T> {
229197
}
230198
}
231199

200+
impl<T> std::fmt::Display for Moving<T> {
201+
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
202+
write!(f, "{}", self.mean)
203+
}
204+
}
205+
232206
#[cfg(test)]
233207
mod tests {
234208
use super::*;
@@ -242,15 +216,6 @@ mod tests {
242216
assert_eq!(moving_average, 15);
243217
}
244218

245-
#[test]
246-
fn sub_moving_average() {
247-
let mut moving_average: Moving<usize> = Moving::new();
248-
moving_average.add(20);
249-
moving_average.add(20);
250-
moving_average.sub(10);
251-
assert_eq!(moving_average, 10);
252-
}
253-
254219
#[test]
255220
fn float_moving_average() {
256221
let mut moving_average: Moving<f32> = Moving::new();
@@ -259,42 +224,6 @@ mod tests {
259224
assert_eq!(moving_average, 15.0);
260225
}
261226

262-
#[test]
263-
fn float_moving_average_sub() {
264-
let mut moving_average: Moving<f32> = Moving::new();
265-
moving_average.add(20.0);
266-
moving_average.add(20.0);
267-
moving_average.sub(10.0);
268-
assert_eq!(moving_average, 10.0);
269-
}
270-
271-
#[test]
272-
#[should_panic(
273-
expected = "Cannot subtract a larger value from a smaller value for unsigned types"
274-
)]
275-
fn first_operation_sub() {
276-
let mut moving_average: Moving<usize> = Moving::new();
277-
moving_average.sub(10);
278-
}
279-
280-
#[test]
281-
fn first_operation_sub_float() {
282-
let mut moving_average: Moving<f32> = Moving::new();
283-
moving_average.sub(10.0);
284-
assert_eq!(moving_average, -10.0);
285-
}
286-
287-
#[test]
288-
#[should_panic(
289-
expected = "Cannot subtract a larger value from a smaller value for unsigned types"
290-
)]
291-
fn first_operation_sub_then_add() {
292-
let mut moving_average: Moving<usize> = Moving::new();
293-
moving_average.sub(10);
294-
moving_average.add(10);
295-
assert_eq!(moving_average, 5);
296-
}
297-
298227
#[test]
299228
fn assign_add() {
300229
let mut moving_average: Moving<usize> = Moving::new();
@@ -303,24 +232,6 @@ mod tests {
303232
assert_eq!(moving_average, 15);
304233
}
305234

306-
#[test]
307-
fn assign_sub() {
308-
let mut moving_average: Moving<usize> = Moving::new();
309-
moving_average.add(20);
310-
moving_average.add(20);
311-
moving_average -= 10;
312-
assert_eq!(moving_average, 10);
313-
}
314-
315-
#[test]
316-
fn assign_sub_float() {
317-
let mut moving_average: Moving<f32> = Moving::new();
318-
moving_average.add(20.0);
319-
moving_average.add(20.0);
320-
moving_average -= 10.0;
321-
assert_eq!(moving_average, 10.0);
322-
}
323-
324235
#[test]
325236
fn assign_add_float() {
326237
let mut moving_average: Moving<f32> = Moving::new();

0 commit comments

Comments
 (0)