#[test]
fn enceladus_cryo_species_count() {
let cryo = enceladuss::rendering::cryovolcanic::CryovolcanicEndpoint::enceladus();
assert!(cryo.species.len() >= 7);
}
#[test]
fn enceladus_water_dominant() {
let cryo = enceladuss::rendering::cryovolcanic::CryovolcanicEndpoint::enceladus();
let h2o = cryo.species.iter().find(|s| s.symbol == "H2O").unwrap();
assert!(h2o.mass_fraction > 0.9);
}
#[test]
fn enceladus_plume_height() {
let cryo = enceladuss::rendering::cryovolcanic::CryovolcanicEndpoint::enceladus();
assert!((cryo.plume_height_m - 500_000.0).abs() < 1.0);
}
#[test]
fn enceladus_plume_density_at_surface() {
let cryo = enceladuss::rendering::cryovolcanic::CryovolcanicEndpoint::enceladus();
assert!((cryo.plume_density_at_height(0.0) - cryo.total_mass_rate_kg_s).abs() < 0.01);
}
#[test]
fn enceladus_plume_density_zero_above() {
let cryo = enceladuss::rendering::cryovolcanic::CryovolcanicEndpoint::enceladus();
assert!(cryo.plume_density_at_height(600_000.0).abs() < 1e-9);
}
#[test]
fn enceladus_water_mass_rate() {
let cryo = enceladuss::rendering::cryovolcanic::CryovolcanicEndpoint::enceladus();
assert!(cryo.water_mass_rate_kg_s() > 150.0);
}
#[test]
fn enceladus_particle_escape_fraction() {
let cryo = enceladuss::rendering::cryovolcanic::CryovolcanicEndpoint::enceladus();
let frac = cryo.particle_escape_fraction();
assert!(frac > 0.0 && frac <= 1.0);
}
#[test]
fn enceladus_molar_masses_positive() {
let cryo = enceladuss::rendering::cryovolcanic::CryovolcanicEndpoint::enceladus();
for sp in &cryo.species {
assert!(
sp.molar_mass_kg_mol > 0.0,
"{} has zero molar mass",
sp.name
);
}
}
#[test]
fn tiger_stripe_count() {
let ts = enceladuss::rendering::cryovolcanic::TigerStripeEndpoint::south_polar();
assert_eq!(ts.stripe_count, 4);
}
#[test]
fn tiger_stripe_area() {
let ts = enceladuss::rendering::cryovolcanic::TigerStripeEndpoint::south_polar();
assert!(ts.total_active_area_m2() > 1e8);
}
#[test]
fn tiger_stripe_thermal_flux() {
let ts = enceladuss::rendering::cryovolcanic::TigerStripeEndpoint::south_polar();
assert!(ts.thermal_flux_w_m2() > 0.0);
}
#[test]
fn tiger_stripe_contrast() {
let ts = enceladuss::rendering::cryovolcanic::TigerStripeEndpoint::south_polar();
assert!(ts.temperature_contrast_k() > 100.0);
}
#[test]
fn enceladus_terrain_shader() {
let s = enceladuss::rendering::shaders::ShaderEndpoint::terrain();
assert!(s.uniforms.len() >= 4);
assert_eq!(s.name, "enceladus_terrain_pbr");
}
#[test]
fn enceladus_plume_shader() {
let s = enceladuss::rendering::shaders::ShaderEndpoint::plume();
assert!(s.uniforms.len() >= 3);
assert_eq!(s.name, "enceladus_plume_scatter");
}
#[test]
fn enceladus_tiger_stripe_shader() {
let s = enceladuss::rendering::shaders::ShaderEndpoint::tiger_stripe();
assert!(s.uniforms.len() >= 3);
assert_eq!(s.name, "enceladus_tiger_stripe_thermal");
}
#[test]
fn plume_opacity_at_surface() {
let d = enceladuss::rendering::dust::PlumeSpriteRenderer::ice_plume();
assert!(d.opacity_at_height(0.0) > 0.0);
}
#[test]
fn opacity_decreases_with_height() {
let d = enceladuss::rendering::dust::PlumeSpriteRenderer::ice_plume();
assert!(d.opacity_at_height(100_000.0) < d.opacity_at_height(0.0));
}
#[test]
fn pristine_ice_material_albedo() {
let m = enceladuss::rendering::materials::PbrMaterial::pristine_ice();
assert!(m.albedo[0] > 0.9);
assert!(m.roughness < 0.3);
}
#[test]
fn tiger_stripe_material() {
let m = enceladuss::rendering::materials::PbrMaterial::tiger_stripe();
assert!(m.albedo[0] > 0.8);
}
#[test]
fn cratered_north_material() {
let m = enceladuss::rendering::materials::PbrMaterial::cratered_north();
assert!(m.roughness > 0.5);
}