use librebound_sys::{Simulation, ffi};
#[test]
fn two_body_kepler() {
let mut sim = Simulation::new().expect("Simulation::new");
sim.set_exact_finish_time(true);
sim.add_particle(ffi::reb_particle {
m: 1.0,
..Default::default()
});
sim.add_particle(ffi::reb_particle {
x: 1.0,
vy: 1.0,
..Default::default()
});
assert_eq!(sim.n_particles(), 2);
sim.integrate(2.0 * std::f64::consts::PI).unwrap();
assert!((sim.t() - 2.0 * std::f64::consts::PI).abs() < 1e-12);
let particles = sim.particles();
let (x, y) = (particles[1].x, particles[1].y);
assert!(
(x - 1.0).abs() < 1e-8 && y.abs() < 1e-8,
"expected ≈(1.0, 0.0) after one period, got ({x}, {y})"
);
}
#[test]
fn integrate_empty_sim_errors_with_no_particles() {
let mut sim = Simulation::new().expect("Simulation::new");
let err = sim.integrate(1.0).unwrap_err();
assert!(matches!(err, librebound_sys::Error::NoParticles));
}