use cometsfactory::engine::coma;
use cometsfactory::observables::photometry;
use cometsfactory::observables::tail;
use cometsfactory::physics::sublimation;
fn main() {
let nucleus_radius = 1000.0;
let active_fraction = 0.05;
let albedo = 0.04;
let r_au = 1.5;
let delta_au = 1.2;
let q_gas = sublimation::gas_production_rate(nucleus_radius, active_fraction, r_au, albedo);
assert!(q_gas > 0.0);
let h_t = photometry::absolute_total_magnitude(8.0, delta_au, r_au, 4.0);
let m_app = photometry::apparent_total_magnitude(h_t, delta_au, r_au, 4.0);
assert!((m_app - 8.0).abs() < 1e-6);
let h_nuc = photometry::nuclear_magnitude(nucleus_radius, albedo);
assert!(h_nuc > 0.0);
let phase_corr = photometry::phase_correction(30.0, 0.04);
assert!(phase_corr > 0.0);
let dust_to_gas = 1.0;
let bv = photometry::color_index_bv(dust_to_gas);
assert!(bv > 0.6);
let afrho_val = coma::afrho(1.0e6, r_au);
assert!(afrho_val > 0.0);
let coma_cs = photometry::coma_cross_section(afrho_val, 10000.0);
assert!(coma_cs > 0.0);
let coma_r = coma::coma_radius(q_gas, r_au, albedo);
assert!(coma_r > 0.0);
let v_gas = sublimation::thermal_gas_velocity(r_au, albedo);
assert!(v_gas > 0.0);
let beta = 0.5;
let v_orbit = 29784.0 / r_au.sqrt();
let dust_len = coma::dust_tail_length(beta, r_au, v_orbit);
assert!(dust_len > 0.0);
let ion_len = coma::ion_tail_length(q_gas, r_au);
assert!(ion_len > 0.0);
let dust_angle = tail::dust_tail_angle(beta, r_au);
assert!(dust_angle > 0.0);
let sw = 400_000.0;
let ion_aberr = tail::ion_tail_aberration(r_au, sw);
assert!(ion_aberr > 0.0);
let striae = tail::striae_spacing(50.0, 3600.0);
assert!((striae - 180000.0).abs() < 1.0);
let app_len = tail::apparent_tail_length_deg(dust_len, delta_au);
assert!(app_len > 0.0);
let surf_bright = tail::tail_surface_brightness(afrho_val, r_au, delta_au);
assert!(surf_bright > 0.0);
let disc_prob = tail::disconnection_probability(sw, q_gas);
assert!((0.0..=1.0).contains(&disc_prob));
let anti = tail::anti_tail_angle(10.0, 2.0);
assert!(anti >= 0.0);
let jet = tail::jet_feature_extent(100.0, 500.0);
assert!(jet > 0.0);
}