use ganymedes::rendering::dust::DustScattering;
use ganymedes::rendering::exosphere::ExosphereEndpoint;
use ganymedes::rendering::materials::PbrMaterial;
use ganymedes::rendering::shaders::{ShaderEndpoint, UniformValue};
#[test]
fn dust_plume_opacity_at_surface() {
let d = DustScattering::impact_plume();
assert!(d.opacity_at_height(0.0) > 0.0);
}
#[test]
fn opacity_decreases_with_height() {
let d = DustScattering::impact_plume();
assert!(d.opacity_at_height(10_000.0) < d.opacity_at_height(0.0));
}
#[test]
fn dark_terrain_material_albedo() {
let m = PbrMaterial::dark_terrain();
assert!(m.albedo[0] < 0.3);
assert!(m.roughness > 0.8);
}
#[test]
fn icy_bright_patch_material() {
let m = PbrMaterial::icy_bright_patch();
assert!(m.albedo[0] > 0.4);
}
#[test]
fn crater_floor_roughness() {
let m = PbrMaterial::crater_floor();
assert!(m.roughness > 0.8);
}
#[test]
fn exosphere_species_count() {
let exo = ExosphereEndpoint::ganymede();
assert_eq!(exo.species.len(), 4);
}
#[test]
fn exosphere_body_radius() {
let exo = ExosphereEndpoint::ganymede();
assert!((exo.body_radius_m - ganymedes::GANYMEDE_RADIUS_M).abs() < 1.0);
}
#[test]
fn exosphere_o2_dominant() {
let exo = ExosphereEndpoint::ganymede();
let o2 = exo.species.iter().find(|s| s.symbol == "O2").unwrap();
let h2 = exo.species.iter().find(|s| s.symbol == "H2").unwrap();
assert!(o2.column_density_m2 > h2.column_density_m2);
}
#[test]
fn exosphere_density_decreases() {
let exo = ExosphereEndpoint::ganymede();
let d0 = exo.density_at_altitude("O2", 0.0);
let d100 = exo.density_at_altitude("O2", 100_000.0);
assert!(d0 > d100);
}
#[test]
fn exosphere_total_column() {
let exo = ExosphereEndpoint::ganymede();
assert!(exo.total_column_density() > 1e19);
}
#[test]
fn exosphere_molar_mass_positive() {
let exo = ExosphereEndpoint::ganymede();
for sp in &exo.species {
assert!(sp.molar_mass_kg_mol > 0.0);
}
}
#[test]
fn exosphere_unknown_species() {
let exo = ExosphereEndpoint::ganymede();
assert_eq!(exo.density_at_altitude("Xe", 0.0), 0.0);
}
#[test]
fn terrain_shader_name() {
let s = ShaderEndpoint::terrain();
assert_eq!(s.name, "ganymede_terrain_pbr");
assert!(s.uniforms.len() >= 6);
}
#[test]
fn terrain_shader_surface_temp() {
let s = ShaderEndpoint::terrain();
let temp = s
.uniforms
.iter()
.find(|u| u.name == "u_surface_temp_k")
.unwrap();
match temp.value {
UniformValue::Float(v) => assert!((v - 110.0).abs() < 5.0),
_ => panic!("expected Float"),
}
}
#[test]
fn exosphere_shader_name() {
let s = ShaderEndpoint::exosphere();
assert_eq!(s.name, "ganymede_o2_exosphere");
assert!(s.uniforms.len() >= 3);
}
#[test]
fn exosphere_shader_aurora_color() {
let s = ShaderEndpoint::exosphere();
let aurora = s
.uniforms
.iter()
.find(|u| u.name == "u_aurora_color")
.unwrap();
match aurora.value {
UniformValue::Vec3(c) => assert!(c[2] > c[0]),
_ => panic!("expected Vec3"),
}
}
#[test]
fn eclipse_shader_name() {
let s = ShaderEndpoint::eclipse();
assert_eq!(s.name, "ganymede_eclipse");
assert!(s.uniforms.len() >= 3);
}