use planetsfactory::config::parameters::*;
use planetsfactory::physics::atmospheres::*;
use planetsfactory::physics::gravitation::{self, *};
use planetsfactory::physics::interiors::*;
#[test]
fn gravity_surface_acceleration_earth() {
let g = PlanetaryGravity::new(EARTH_MASS, EARTH_RADIUS);
let a = g.surface_acceleration();
assert!(a > 9.7 && a < 9.9);
}
#[test]
fn gravity_escape_velocity_earth() {
let g = PlanetaryGravity::new(EARTH_MASS, EARTH_RADIUS);
let v = g.escape_velocity();
assert!(v > 1.1e4 && v < 1.2e4);
}
#[test]
fn gravity_orbital_velocity() {
let g = PlanetaryGravity::new(SOLAR_MASS, SOLAR_RADIUS);
let v = g.orbital_velocity(AU);
assert!(v > 2.9e4 && v < 3.1e4);
}
#[test]
fn gravity_orbital_period_earth() {
let g = PlanetaryGravity::new(SOLAR_MASS, SOLAR_RADIUS);
let p = g.orbital_period(AU);
assert!((p / YEAR - 1.0).abs() < 0.01);
}
#[test]
fn gravity_tidal_acceleration_positive() {
let g = PlanetaryGravity::new(EARTH_MASS, EARTH_RADIUS);
assert!(g.tidal_acceleration(3.844e8, 6.371e6) > 0.0);
}
#[test]
fn gravity_synchronous_orbit() {
let g = PlanetaryGravity::new(EARTH_MASS, EARTH_RADIUS);
let r = g.synchronous_orbit_radius(86164.1);
assert!(r > 4.2e7 && r < 4.3e7);
}
#[test]
fn two_body_force_positive() {
let f = two_body_force(EARTH_MASS, SOLAR_MASS, AU);
assert!(f > 3.5e22 && f < 3.6e22);
}
#[test]
fn hill_sphere_earth() {
let r = hill_sphere(AU, EARTH_MASS, SOLAR_MASS);
assert!(r > 1.4e9 && r < 1.6e9);
}
#[test]
fn roche_limit_positive() {
let rl = gravitation::roche_limit(EARTH_RADIUS, 5515.0, 3346.0);
assert!(rl > EARTH_RADIUS);
}
#[test]
fn tisserand_parameter_value() {
let t = tisserand_parameter(2.5 * AU, 5.2 * AU, 0.1, 0.1);
assert!(t > 2.0 && t < 4.0);
}
#[test]
fn atmosphere_earth_scale_height() {
let a = Atmosphere::earth();
assert!(a.scale_height > 7000.0 && a.scale_height < 10000.0);
}
#[test]
fn atmosphere_venus_higher_pressure() {
let v = Atmosphere::venus();
let e = Atmosphere::earth();
assert!(v.surface_pressure > e.surface_pressure);
}
#[test]
fn atmosphere_mars_low_pressure() {
let m = Atmosphere::mars();
assert!(m.surface_pressure < 1000.0);
}
#[test]
fn atmosphere_pressure_decreases_with_altitude() {
let a = Atmosphere::earth();
let p0 = a.pressure_at_altitude(0.0);
let p10 = a.pressure_at_altitude(10000.0);
assert!(p10 < p0);
}
#[test]
fn jeans_escape_parameter_earth_hydrogen() {
let lambda = jeans_escape_parameter(EARTH_MASS, EARTH_RADIUS, 1000.0, 1.67e-27);
assert!(lambda > 5.0);
}
#[test]
fn greenhouse_temperature_rise_increases() {
let t1 = greenhouse_temperature_rise(1.0);
let t2 = greenhouse_temperature_rise(10.0);
assert!(t2 > t1);
}
#[test]
fn interior_earth_core_radius() {
let i = PlanetaryInterior::earth();
let rc = i.core_radius();
assert!(rc > 3.0e6 && rc < 4.0e6);
}
#[test]
fn interior_earth_central_pressure() {
let i = PlanetaryInterior::earth();
let p = i.central_pressure();
assert!(p > 1e11);
}
#[test]
fn interior_moment_of_inertia_earth() {
let i = PlanetaryInterior::earth();
let moi = i.moment_of_inertia_factor();
assert!(moi > 0.3 && moi < 0.4);
}
#[test]
fn interior_binding_energy_positive() {
let i = PlanetaryInterior::earth();
assert!(i.gravitational_binding_energy() > 0.0);
}
#[test]
fn interior_mars_smaller_core() {
let e = PlanetaryInterior::earth();
let m = PlanetaryInterior::mars();
assert!(m.core_radius() < e.core_radius());
}
#[test]
fn adams_williamson_density_increases() {
let rho_0 = 5000.0;
let rho_deep = adams_williamson_density(rho_0, 1e6, 2e11, 10.0);
assert!(rho_deep > rho_0);
}
#[test]
fn core_fraction_from_density_reasonable() {
let f = core_mass_fraction_from_density(5515.0);
assert!(f > 0.3 && f < 0.35);
}
#[test]
fn differentiation_energy_positive() {
let e = differentiation_energy(EARTH_MASS, EARTH_RADIUS, 0.5);
assert!(e > 0.0);
}