use planetsfactory::config::parameters::*;
use planetsfactory::engine::generator::{
GeneratedPlanet, SystemGeneratorConfig, generate_rogue_planets, generate_system,
};
use std::process;
fn planet_mass(p: &GeneratedPlanet) -> f64 {
match p {
GeneratedPlanet::Terrestrial(t) => t.mass,
GeneratedPlanet::SuperEarth(se) => se.mass,
GeneratedPlanet::SubNeptune(sn) => sn.mass,
GeneratedPlanet::IceGiant(ig) => ig.mass,
GeneratedPlanet::GasGiant(gg) => gg.mass,
GeneratedPlanet::LavaWorld(lw) => lw.mass,
GeneratedPlanet::OceanWorld(ow) => ow.mass,
GeneratedPlanet::Rogue(rp) => rp.mass,
}
}
fn planet_radius(p: &GeneratedPlanet) -> f64 {
match p {
GeneratedPlanet::Terrestrial(t) => t.radius,
GeneratedPlanet::SuperEarth(se) => se.radius,
GeneratedPlanet::SubNeptune(sn) => sn.radius,
GeneratedPlanet::IceGiant(ig) => ig.radius,
GeneratedPlanet::GasGiant(gg) => gg.radius,
GeneratedPlanet::LavaWorld(lw) => lw.radius,
GeneratedPlanet::OceanWorld(ow) => ow.radius,
GeneratedPlanet::Rogue(rp) => rp.radius,
}
}
fn main() {
let solar_config = SystemGeneratorConfig::solar_like(8);
let system = generate_system(&solar_config);
let m_dwarf_config = SystemGeneratorConfig::m_dwarf(5);
let m_dwarf_system = generate_system(&m_dwarf_config);
let rogues = generate_rogue_planets(3, 99);
let mut total_mass = 0.0;
let mut max_radius = 0.0_f64;
for p in &system {
total_mass += planet_mass(p);
max_radius = max_radius.max(planet_radius(p));
}
let mut m_dwarf_mass = 0.0;
for p in &m_dwarf_system {
m_dwarf_mass += planet_mass(p);
}
let mut rogue_total = 0.0;
for p in &rogues {
rogue_total += planet_mass(p);
}
let ok = system.len() == 8
&& m_dwarf_system.len() == 5
&& rogues.len() == 3
&& total_mass > 0.0
&& max_radius > EARTH_RADIUS
&& m_dwarf_mass > 0.0
&& rogue_total > 0.0;
if ok {
process::exit(0);
} else {
process::exit(1);
}
}