cometsfactory 0.0.1

Comet factory — classify, build and catalogue comets of any type: short-period, long-period, Halley-type, sungrazer, interstellar, main-belt comet, centaur-transition, and extinct.
Documentation
use cometsfactory::physics::gravity;
use cometsfactory::physics::sublimation;

// ── Gravity ──────────────────────────────────────────────────

#[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);
}

// ── Sublimation ──────────────────────────────────────────────

#[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);
}