use russell_lab::{approx_eq, StrError};
use russell_ode::prelude::*;
fn main() -> Result<(), StrError> {
let (system, x0, mut y0, mut args) = Samples::amplifier1t();
let x1 = 0.05;
let mut params = Params::new(Method::Radau5);
params.step.h_ini = 1e-6;
params.set_tolerances(1e-4, 1e-4, None)?;
let mut out = Output::new();
out.set_dense_recording(true, 0.001, &[0, 4])?;
let y = &mut y0;
let mut solver = OdeSolver::new(params, &system)?;
solver.solve(y, x0, x1, None, Some(&mut out), &mut args)?;
approx_eq(y[0], -2.226517868073645E-02, 1e-10);
approx_eq(y[1], 3.068700099735197E+00, 1e-10);
approx_eq(y[2], 2.898340496450958E+00, 1e-9);
approx_eq(y[3], 2.033525366489690E+00, 1e-7);
approx_eq(y[4], -2.269179823457655E+00, 1e-7);
let stat = solver.stats();
println!("{}", stat);
Ok(())
}