use asteroidsfactory::observables::{lightcurve, photometry};
use asteroidsfactory::types::*;
use asteroidsfactory::utils::io;
fn main() {
let nea = near_earth::NearEarthAsteroid::new(500.0, 2500.0, 1.5, 0.4).with_albedo(0.15);
let mb = main_belt::MainBeltAsteroid::new(265000.0, 3456.0, 2.362)
.with_spectral_type(main_belt::SpectralType::V);
let tr = trojan::Trojan::new(50000.0, 2000.0, 5.2).with_lagrange_point(trojan::TrojanPoint::L4);
let ce = centaur::Centaur::new(120000.0, 1000.0, 13.7, 0.38);
let bi = binary::BinaryAsteroid::new(390.0, 80.0, 2170.0, 1180.0);
let rp = rubble_pile::RubblePile::new(245.0, 3400.0, 0.5);
let me = metallic::MetallicAsteroid::new(113000.0, 0.85);
let ph = pha::PotentiallyHazardousAsteroid::new(185.0, 2600.0, 0.922, 0.191, 0.00025);
let asteroids = vec![
GeneratedAsteroid::NearEarth(nea),
GeneratedAsteroid::MainBelt(mb),
GeneratedAsteroid::Trojan(tr),
GeneratedAsteroid::Centaur(ce),
GeneratedAsteroid::Binary(bi),
GeneratedAsteroid::RubblePile(rp),
GeneratedAsteroid::Metallic(me),
GeneratedAsteroid::PHA(ph),
];
let mut total_len = 0;
for a in &asteroids {
let line = io::summary_line(a);
total_len += line.len();
assert!(!line.is_empty());
}
assert!(total_len > 0);
let h = photometry::absolute_magnitude(265000.0, 0.42);
let m = photometry::apparent_magnitude(h, 2.362, 1.5, 0.2);
let diam = photometry::diameter_from_h_albedo(h, 0.42);
assert!(h > 2.0 && h < 5.0);
assert!(m > h);
assert!(diam > 400.0 && diam < 600.0);
let amp = lightcurve::lightcurve_amplitude(1.5);
let sp = lightcurve::spin_barrier_period(2700.0);
let eclipse = lightcurve::binary_eclipse_depth(1000.0, 500.0, 0.15, 0.15);
assert!(amp > 0.0);
assert!(sp > 7000.0);
assert!(eclipse > 0.0 && eclipse < 1.0);
let sum = h + m + diam + amp + sp + eclipse + total_len as f64;
assert!(sum > 0.0);
assert_eq!(asteroids.len(), 8);
}