use cometsfactory::physics::gravity;
use cometsfactory::physics::sublimation;
#[test]
fn binding_energy_positive() {
let e = gravity::binding_energy(1.0e12, 500.0);
assert!(e > 0.0);
}
#[test]
fn binding_energy_zero_for_tiny_radius() {
let e = gravity::binding_energy(1.0e12, 0.5);
assert!((e - 0.0).abs() < 1e-30);
}
#[test]
fn solar_tidal_acceleration_decreases_with_distance() {
let a1 = gravity::solar_tidal_acceleration(1000.0, 1.0);
let a2 = gravity::solar_tidal_acceleration(1000.0, 5.0);
assert!(a1 > a2);
}
#[test]
fn hill_radius_positive() {
let r = gravity::hill_radius(3.0, 1.0e12);
assert!(r > 0.0);
}
#[test]
fn roche_limit_reasonable() {
let d = gravity::roche_limit_solar(500.0);
assert!(d > 1.0e9);
}
#[test]
fn orbital_velocity_1au() {
let v = gravity::orbital_velocity(1.0);
assert!((v - 29784.0).abs() < 500.0);
}
#[test]
fn specific_orbital_energy_negative() {
let e = gravity::specific_orbital_energy(1.0);
assert!(e < 0.0);
}
#[test]
fn sublimation_rate_decreases_with_distance() {
let z1 = sublimation::sublimation_rate(1.0, 0.04);
let z2 = sublimation::sublimation_rate(5.0, 0.04);
assert!(z1 > z2);
}
#[test]
fn gas_production_positive() {
let q = sublimation::gas_production_rate(1000.0, 0.05, 1.0, 0.04);
assert!(q > 0.0);
}
#[test]
fn mass_loss_rate_positive() {
let dm = sublimation::mass_loss_rate(1000.0, 0.05, 1.0, 0.04);
assert!(dm > 0.0);
}
#[test]
fn nongrav_acceleration_positive() {
let a = sublimation::nongrav_acceleration(1000.0, 500.0, 0.05, 1.0, 0.04);
assert!(a > 0.0);
}
#[test]
fn thermal_gas_velocity_positive() {
let v = sublimation::thermal_gas_velocity(1.0, 0.04);
assert!(v > 0.0);
}
#[test]
fn sublimation_lifetime_finite_at_1au() {
let tau = sublimation::sublimation_lifetime(1000.0, 500.0, 0.05, 1.0, 0.04);
assert!(tau.is_finite());
assert!(tau > 0.0);
}
#[test]
fn surface_temperature_at_1au() {
let t = sublimation::surface_temperature(1.0, 0.04);
assert!(t > 250.0 && t < 400.0);
}