use roplat::node::*;
#[cfg(test)]
mod tests {
use super::*;
#[tokio::test]
async fn test_moving_average() {
let mut filter = filter::MovingAverage::<f64>::new(3);
let result = filter.process(10.0).await.unwrap();
assert_eq!(result, 10.0);
let result = filter.process(20.0).await.unwrap();
assert_eq!(result, 15.0);
let result = filter.process(30.0).await.unwrap();
assert_eq!(result, 20.0);
let result = filter.process(40.0).await.unwrap();
assert_eq!(result, 30.0); }
#[tokio::test]
async fn test_exponential_moving_average() {
let mut filter = filter::ExponentialMovingAverage::<f64>::new(0.5);
let result = filter.process(10.0).await.unwrap();
assert_eq!(result, 10.0);
let result = filter.process(20.0).await.unwrap();
assert_eq!(result, 15.0);
let result = filter.process(30.0).await.unwrap();
assert_eq!(result, 22.5); }
#[tokio::test]
async fn test_median_filter() {
let mut filter = filter::MedianFilter::<f64>::new(3);
let _ = filter.process(10.0).await.unwrap();
let _ = filter.process(20.0).await.unwrap();
let result = filter.process(30.0).await.unwrap();
assert_eq!(result, 20.0);
let result = filter.process(1000.0).await.unwrap(); assert_eq!(result, 30.0);
}
#[tokio::test]
async fn test_rate_limiter() {
let mut limiter = filter::RateLimiter::<f64>::new(5.0);
let result = limiter.process(10.0).await.unwrap();
assert_eq!(result, 10.0);
let result = limiter.process(14.0).await.unwrap();
assert_eq!(result, 14.0);
let result = limiter.process(25.0).await.unwrap();
assert_eq!(result, 19.0); }
#[tokio::test]
async fn test_deadzone_filter() {
let mut filter = filter::DeadzoneFilter::<f64>::new(2.0);
let result = filter.process(10.0).await.unwrap();
assert_eq!(result, 10.0);
let result = filter.process(11.0).await.unwrap();
assert_eq!(result, 10.0);
let result = filter.process(15.0).await.unwrap();
assert_eq!(result, 15.0);
}
#[tokio::test]
async fn test_low_pass_filter() {
let mut filter = filter::LowPassFilter::<f64>::new(1.0);
let result = filter.process(10.0).await.unwrap();
assert_eq!(result, 10.0);
let result = filter.process(20.0).await.unwrap();
assert_eq!(result, 15.0); }
#[tokio::test]
async fn test_filter_chain() {
let mut ma = filter::MovingAverage::<f64>::new(3);
let mut limiter = filter::RateLimiter::<f64>::new(5.0);
let inputs = vec![10.0, 20.0, 30.0, 100.0];
for input in inputs {
let filtered = ma.process(input).await.unwrap();
let _ = limiter.process(filtered).await.unwrap();
}
let result = limiter.process(50.0).await.unwrap();
assert!(result <= 55.0); }
}