planetsfactory 0.0.4

Planet factory — classify, build and catalogue planets for any star system: Solar System, TRAPPIST-1, Kepler-90, Proxima Centauri, or fully custom worlds.
Documentation
use planetsfactory::config::parameters::*;
use planetsfactory::engine::evolution::PlanetEvolution;
use planetsfactory::engine::formation::FormationModel;
use planetsfactory::engine::generator::{GeneratedPlanet, SystemGeneratorConfig, generate_system};

use std::process;

fn main() {
    let config = SystemGeneratorConfig::solar_like(8);
    let system = generate_system(&config);

    let mut count = 0_u64;

    for p in &system {
        match p {
            GeneratedPlanet::Terrestrial(_)
            | GeneratedPlanet::SuperEarth(_)
            | GeneratedPlanet::SubNeptune(_)
            | GeneratedPlanet::GasGiant(_)
            | GeneratedPlanet::IceGiant(_)
            | GeneratedPlanet::LavaWorld(_)
            | GeneratedPlanet::OceanWorld(_)
            | GeneratedPlanet::Rogue(_) => count += 1,
        }
    }

    let formation = FormationModel::solar_like();
    let iso_1au = formation.isolation_mass(1.0);
    let iso_5au = formation.isolation_mass(5.0);
    let crit = formation.critical_core_mass();
    let snow = formation.snow_line_radius();

    let evo = PlanetEvolution::new(JUPITER_MASS, JUPITER_RADIUS, 5.2 * AU, SOLAR_LUMINOSITY);
    let cooling = evo.cooling_luminosity();
    let xuv_loss = evo.xuv_mass_loss_rate(1e-3);

    let ok = system.len() == 8
        && count == 8
        && iso_1au > 0.0
        && iso_5au > iso_1au
        && crit > 0.0
        && snow > AU
        && cooling > 0.0
        && xuv_loss > 0.0;

    if ok {
        process::exit(0);
    } else {
        process::exit(1);
    }
}