use dwarfplanetsfactory::physics::gravity;
use dwarfplanetsfactory::physics::thermal;
use dwarfplanetsfactory::types::KuiperBelt;
use dwarfplanetsfactory::types::Sednoid;
fn main() {
let kb = KuiperBelt::new(5.88e5, 39.5, 0.25);
let mass = kb.mass();
let e_bind = gravity::binding_energy(mass, kb.radius);
assert!(e_bind > 0.0);
let tidal_sun = gravity::solar_tidal_acceleration(kb.radius, kb.semi_major_axis);
assert!(tidal_sun > 0.0);
let tidal_nep = gravity::neptune_tidal_acceleration(kb.radius, 9.5);
assert!(tidal_nep > 0.0);
let rh = gravity::hill_radius(kb.semi_major_axis, mass);
assert!(rh > 0.0);
let roche = gravity::roche_limit(6.96e8, 1408.0, kb.density);
assert!(roche > 0.0);
let soe = gravity::specific_orbital_energy(kb.semi_major_axis);
assert!(soe < 0.0);
let v_peri = gravity::orbital_velocity(
kb.semi_major_axis * (1.0 - kb.eccentricity),
kb.semi_major_axis,
);
let v_aph = gravity::orbital_velocity(
kb.semi_major_axis * (1.0 + kb.eccentricity),
kb.semi_major_axis,
);
assert!(v_peri > v_aph);
let ang_mom = gravity::specific_angular_momentum(kb.semi_major_axis, kb.eccentricity);
assert!(ang_mom > 0.0);
let t_eq = thermal::equilibrium_temp(39.5, 0.1);
assert!(t_eq > 30.0 && t_eq < 80.0);
let t_peri = thermal::temp_at_perihelion(39.5, 0.25, 0.1);
let t_aph = thermal::temp_at_aphelion(39.5, 0.25, 0.1);
assert!(t_peri > t_aph);
let n2_rate = thermal::n2_sublimation_rate(t_eq);
assert!(n2_rate >= 0.0);
let co_rate = thermal::co_sublimation_rate(t_eq);
assert!(co_rate >= 0.0);
let sed = Sednoid::new(5.0e5, 500.0, 0.85);
let t_sed = thermal::equilibrium_temp(sed.semi_major_axis, sed.albedo);
assert!(t_sed < t_eq);
let grav_sed = sed.surface_gravity();
let esc_sed = sed.escape_velocity();
assert!(grav_sed > 0.0);
assert!(esc_sed > 0.0);
}