// import module velocity dan rstest
use phyrust::config::{Float, EPSILON};
use phyrust::core::velocity::Velocity;
use rstest::rstest;

struct Custom {
    distance: Float,
    time: Float,
}

impl Velocity for Custom {
    fn get_distance(&self) -> Float {
        self.distance
    }
    fn get_time(&self) -> Float {
        self.time
    }
}

#[rstest]
#[case(10.0, 2.0, 5.0)] // pada kasus normal
#[case(0.0, 5.0, 0.0)] // pada kasus dengan s = 0 dan t = 5
#[case(10.0, 0.0, 0.0)] // pada kasus dengan s= 10 dan t = 0

fn test_velocity_trait(#[case] s: Float, #[case] t: Float, #[case] expected: Float) {
    let result = Custom {
        distance: s,
        time: t,
    };
    assert!((result.calculate_velocity() - expected).abs() <= EPSILON)
}
