phoboss 0.0.3

Phobos celestial simulation crate for the MilkyWay SolarSystem workspace
Documentation
use phoboss::rendering::dust::DustScattering;
use phoboss::rendering::materials::PbrMaterial;
use phoboss::rendering::shaders::{ShaderEndpoint, UniformValue};

// ── dust ──

#[test]
fn dust_plume_opacity() {
    let d = DustScattering::impact_plume();
    assert!(d.opacity_at_height(0.0) > 0.0);
}

#[test]
fn opacity_decreases() {
    let d = DustScattering::impact_plume();
    assert!(d.opacity_at_height(5_000.0) < d.opacity_at_height(0.0));
}

// ── materials ──

#[test]
fn dark_terrain_material() {
    let m = PbrMaterial::dark_terrain();
    assert!(m.albedo[0] < 0.3);
}

#[test]
fn icy_bright_material() {
    let m = PbrMaterial::icy_bright();
    assert!(m.albedo[0] > 0.4);
}

#[test]
fn crater_floor_roughness() {
    let m = PbrMaterial::crater_floor();
    assert!(m.roughness > 0.8);
}

// ── shaders ──

#[test]
fn terrain_shader_name() {
    let s = ShaderEndpoint::terrain();
    assert_eq!(s.name, "phobos_terrain_pbr");
    assert!(s.uniforms.len() >= 6);
}

#[test]
fn terrain_shader_body_radius() {
    let s = ShaderEndpoint::terrain();
    let r = s
        .uniforms
        .iter()
        .find(|u| u.name == "u_body_radius")
        .unwrap();
    match r.value {
        UniformValue::Float(v) => assert!((v - phoboss::PHOBOS_RADIUS_M as f32).abs() < 1.0),
        _ => panic!("expected Float"),
    }
}

#[test]
fn terrain_shader_albedo() {
    let s = ShaderEndpoint::terrain();
    let a = s.uniforms.iter().find(|u| u.name == "u_albedo").unwrap();
    match a.value {
        UniformValue::Float(v) => assert!((v - 0.071).abs() < 0.01),
        _ => panic!("expected Float"),
    }
}

#[test]
fn eclipse_shader_name() {
    let s = ShaderEndpoint::eclipse();
    assert_eq!(s.name, "phobos_eclipse");
    assert!(s.uniforms.len() >= 3);
}

#[test]
fn eclipse_shader_has_gamma() {
    let s = ShaderEndpoint::eclipse();
    let g = s.uniforms.iter().find(|u| u.name == "u_gamma").unwrap();
    match g.value {
        UniformValue::Float(v) => assert!((v - 2.2).abs() < 0.01),
        _ => panic!("expected Float"),
    }
}