#[cfg(test)]
pub mod test_pid {
use discrete_pid::pid::*;
use discrete_pid::time::Millis;
pub fn make_controller() -> (FuncPidController<f64>, PidContext<Millis, f64>) {
let config = PidConfig::default();
let controller = FuncPidController::new(config);
let ctx = PidContext::new_uninit();
(controller, ctx)
}
pub fn make_stateful_controller() -> PidController<Millis, f64> {
let config = PidConfig::default();
PidController::new_uninit(config)
}
pub fn tune<R>(
pid: &mut FuncPidController<f64>,
f: impl FnOnce(&mut PidConfig<f64>) -> R,
) -> R {
let mut config = *pid.config();
let result = f(&mut config);
pid.set_config(config);
result
}
pub fn tune_stateful<R>(
pid: &mut PidController<Millis, f64>,
f: impl FnOnce(&mut PidConfig<f64>) -> R,
) -> R {
let mut config = *pid.config();
let result = f(&mut config);
pid.set_config(config);
result
}
}