use dwarfplanetsfactory::types::*;
use dwarfplanetsfactory::utils::io;
fn main() {
let kb = KuiperBelt::new(6.0e5, 43.0, 0.05)
.with_density(1800.0)
.with_albedo(0.12)
.with_rotation_period(8.0 * 3600.0);
let kb_mass = kb.mass();
let kb_q = kb.perihelion();
let kb_big_q = kb.aphelion();
let kb_hill = kb.hill_radius();
let summary_kb = io::summary_kuiper_belt(&kb);
assert!(kb_mass > 0.0);
assert!(kb_q < kb_big_q);
assert!(kb_hill > 0.0);
assert!(!summary_kb.is_empty());
let sd = ScatteredDisk::new(4.0e5, 80.0, 0.6).with_density(1600.0);
let sd_mass = sd.mass();
let sd_scattered = sd.is_actively_scattered();
let sd_centaur = sd.could_become_centaur();
let summary_sd = io::summary_scattered_disk(&sd);
assert!(sd_mass > 0.0);
let sd_flags = sd_scattered as u8 + sd_centaur as u8;
assert!(sd_flags <= 2);
assert!(!summary_sd.is_empty());
let pl = Plutino::new(5.8e5, 0.25)
.with_density(1900.0)
.with_inclination(17.0);
let pl_ratio = pl.resonance_ratio();
let pl_crossing = pl.is_neptune_crossing();
let summary_pl = io::summary_plutino(&pl);
assert!((pl_ratio - 1.5).abs() < 0.05);
let pl_flags = pl_crossing as u8;
assert!(pl_flags <= 1);
assert!(!summary_pl.is_empty());
let cc = ColdClassical::new(3.0e5, 44.0).with_binary_fraction(0.3);
let cc_pristine = cc.is_pristine();
let summary_cc = io::summary_cold_classical(&cc);
assert!(cc_pristine);
assert!(!summary_cc.is_empty());
let det = Detached::new(5.0e5, 200.0, 0.7);
let det_detached = det.is_truly_detached();
let det_p9 = det.planet_nine_candidate();
let summary_det = io::summary_detached(&det);
let det_flags = det_detached as u8 + det_p9 as u8;
assert!(det_flags <= 2);
assert!(!summary_det.is_empty());
let bd = BinaryDwarf::new(6.0e5, 3.0e5, 39.5, 0.25).with_mutual_separation(2.0e4);
let bd_ratio = bd.mass_ratio();
let bd_period = bd.mutual_orbital_period();
let bd_bary = bd.barycenter_offset();
let summary_bd = io::summary_binary_dwarf(&bd);
assert!(bd_ratio > 0.0 && bd_ratio <= 1.0);
assert!(bd_period > 0.0);
assert!(bd_bary > 0.0);
assert!(!summary_bd.is_empty());
let cer = CeresType::new(4.7e5, 2.77, 0.076)
.with_density(2162.0)
.with_ice_mantle_fraction(0.25)
.with_cryovolcanism(true);
let cer_tj = cer.tisserand_jupiter();
let cer_ice = cer.ice_mass();
let summary_cer = io::summary_ceres_type(&cer);
assert!(cer_tj > 3.0);
assert!(cer_ice > 0.0);
assert!(!summary_cer.is_empty());
let sed = Sednoid::new(5.0e5, 506.0, 0.85).with_inclination(12.0);
let sed_true = sed.is_true_sednoid();
let sed_oort = sed.is_inner_oort_candidate();
let sed_score = sed.planet_nine_alignment_score();
let sed_temp = sed.equilibrium_temp();
let summary_sed = io::summary_sednoid(&sed);
let sed_flags = sed_true as u8 + sed_oort as u8;
assert!(sed_flags <= 2);
assert!((0.0..=1.0).contains(&sed_score));
assert!(sed_temp > 0.0);
assert!(!summary_sed.is_empty());
}