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_new_scale_height_earth_like() {
let a = Atmosphere::new(101325.0, 288.0, 4.81e-26, EARTH_MASS, EARTH_RADIUS);
assert!(a.scale_height > 7000.0 && a.scale_height < 10000.0);
}
#[test]
fn atmosphere_venus_like_higher_pressure() {
let v = Atmosphere::new(9.2e6, 737.0, 7.31e-26, 4.867_5e24, 6.051_8e6);
let e = Atmosphere::new(101325.0, 288.0, 4.81e-26, EARTH_MASS, EARTH_RADIUS);
assert!(v.surface_pressure > e.surface_pressure);
}
#[test]
fn atmosphere_mars_like_low_pressure() {
let m = Atmosphere::new(636.0, 210.0, 7.31e-26, 6.417_1e23, 3.389_5e6);
assert!(m.surface_pressure < 1000.0);
}
#[test]
fn atmosphere_pressure_decreases_with_altitude() {
let a = Atmosphere::new(101325.0, 288.0, 4.81e-26, EARTH_MASS, EARTH_RADIUS);
let p0 = a.pressure_at_altitude(0.0);
let p10 = a.pressure_at_altitude(10000.0);
assert!(p10 < p0);
}
#[test]
fn atmosphere_column_mass_positive() {
let a = Atmosphere::new(101325.0, 288.0, 4.81e-26, EARTH_MASS, EARTH_RADIUS);
let cm = a.column_mass(EARTH_MASS, EARTH_RADIUS);
assert!(cm > 1e4);
}
#[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_core_radius_positive() {
let i = PlanetaryInterior::new(EARTH_MASS, EARTH_RADIUS, 0.325, 12800.0, 4500.0);
let rc = i.core_radius();
assert!(rc > 3.0e6 && rc < 4.0e6);
}
#[test]
fn interior_central_pressure() {
let i = PlanetaryInterior::new(EARTH_MASS, EARTH_RADIUS, 0.325, 12800.0, 4500.0);
let p = i.central_pressure();
assert!(p > 1e11);
}
#[test]
fn interior_moment_of_inertia() {
let i = PlanetaryInterior::new(EARTH_MASS, EARTH_RADIUS, 0.325, 12800.0, 4500.0);
let moi = i.moment_of_inertia_factor();
assert!(moi > 0.3 && moi < 0.4);
}
#[test]
fn interior_binding_energy_positive() {
let i = PlanetaryInterior::new(EARTH_MASS, EARTH_RADIUS, 0.325, 12800.0, 4500.0);
assert!(i.gravitational_binding_energy() > 0.0);
}
#[test]
fn interior_small_planet_smaller_core() {
let big = PlanetaryInterior::new(EARTH_MASS, EARTH_RADIUS, 0.325, 12800.0, 4500.0);
let small = PlanetaryInterior::new(6.417_1e23, 3.389_5e6, 0.24, 6200.0, 3600.0);
assert!(small.core_radius() < big.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);
}