use oberons::rendering::dust::DustScattering;
use oberons::rendering::materials::PbrMaterial;
use oberons::rendering::shaders::{ShaderEndpoint, UniformValue};
#[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));
}
#[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);
}
#[test]
fn terrain_shader_name() {
let s = ShaderEndpoint::terrain();
assert_eq!(s.name, "oberon_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 - oberons::OBERON_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 - oberons::GEOMETRIC_ALBEDO as f32).abs() < 0.01),
_ => panic!("expected Float"),
}
}
#[test]
fn terrain_shader_solar_flux() {
let s = ShaderEndpoint::terrain();
let f = s
.uniforms
.iter()
.find(|u| u.name == "u_solar_flux")
.unwrap();
match f.value {
UniformValue::Float(v) => assert!((v - 3.7).abs() < 0.5),
_ => panic!("expected Float"),
}
}
#[test]
fn eclipse_shader_name() {
let s = ShaderEndpoint::eclipse();
assert_eq!(s.name, "oberon_eclipse");
assert!(s.uniforms.len() >= 3);
}