cranpose-foundation 0.1.164

Modifiers, nodes, and foundation elements for Cranpose
Documentation
use super::*;

#[test]
fn test_empty_tracker_returns_zero() {
    let tracker = VelocityTracker1D::new();
    assert_eq!(tracker.calculate_velocity(), 0.0);
}

#[test]
fn test_single_point_returns_zero() {
    let mut tracker = VelocityTracker1D::new();
    tracker.add_data_point(0, 100.0);
    assert_eq!(tracker.calculate_velocity(), 0.0);
}

#[test]
fn test_constant_velocity() {
    let mut tracker = VelocityTracker1D::new();
    tracker.add_data_point(0, 0.0);
    tracker.add_data_point(10, 100.0);
    tracker.add_data_point(20, 200.0);
    tracker.add_data_point(30, 300.0);

    let velocity = tracker.calculate_velocity();
    assert!(
        (velocity - 10000.0).abs() < 1000.0,
        "Expected ~10000, got {velocity}"
    );
}

#[test]
fn test_reset() {
    let mut tracker = VelocityTracker1D::new();
    tracker.add_data_point(0, 0.0);
    tracker.add_data_point(10, 100.0);

    tracker.reset();

    assert_eq!(tracker.calculate_velocity(), 0.0);
}

#[test]
fn test_negative_velocity() {
    let mut tracker = VelocityTracker1D::new();
    tracker.add_data_point(0, 300.0);
    tracker.add_data_point(10, 200.0);
    tracker.add_data_point(20, 100.0);

    let velocity = tracker.calculate_velocity();
    assert!(velocity < 0.0, "Expected negative velocity, got {velocity}");
}

#[test]
fn test_velocity_capped() {
    let mut tracker = VelocityTracker1D::new();
    tracker.add_data_point(0, 0.0);
    tracker.add_data_point(1, 10_000.0);

    let velocity = tracker.calculate_velocity_with_max(8_000.0);
    assert_eq!(velocity, 8_000.0);

    tracker.reset();
    tracker.add_data_point(0, 10_000.0);
    tracker.add_data_point(1, 0.0);

    let velocity = tracker.calculate_velocity_with_max(8_000.0);
    assert_eq!(velocity, -8_000.0);
}

#[test]
fn test_old_samples_ignored() {
    let mut tracker = VelocityTracker1D::new();
    tracker.add_data_point(0, 0.0);
    tracker.add_data_point(150, 100.0);
    tracker.add_data_point(160, 200.0);
    tracker.add_data_point(170, 300.0);

    let velocity = tracker.calculate_velocity();
    assert!(
        velocity.abs() > 0.0,
        "Should calculate velocity from recent samples"
    );
}

#[test]
fn test_gap_over_stopped_threshold_returns_zero() {
    let mut tracker = VelocityTracker1D::new();
    tracker.add_data_point(0, 0.0);
    tracker.add_data_point(ASSUME_STOPPED_MS + 1, 100.0);

    let velocity = tracker.calculate_velocity();
    assert_eq!(velocity, 0.0);
}