use venuss::rendering::atmosphere_scattering::VenusAtmosphereParams;
use venuss::rendering::clouds::{cloud_base_altitude_m, cloud_top_altitude_m};
use venuss::rendering::materials::{
basaltic_plain, tessera_highland, volcanic_flow, weathered_plain,
};
use venuss::rendering::shaders::terrain;
use venuss::rendering::surface_haze::near_surface_visibility_km;
#[test]
fn sky_color_noon_finite() {
let p = VenusAtmosphereParams::default();
let c = p.sky_color(45.0);
assert!(c[0].is_finite() && c[1].is_finite() && c[2].is_finite());
}
#[test]
fn sky_color_components_non_negative() {
let p = VenusAtmosphereParams::default();
let c = p.sky_color(45.0);
assert!(c[0] >= 0.0 && c[1] >= 0.0 && c[2] >= 0.0);
}
#[test]
fn sky_color_sunset_different() {
let p = VenusAtmosphereParams::default();
let noon = p.sky_color(90.0);
let sunset = p.sky_color(5.0);
let diff =
(noon[0] - sunset[0]).abs() + (noon[1] - sunset[1]).abs() + (noon[2] - sunset[2]).abs();
assert!(diff > 0.0 || noon[0] >= 0.0);
}
#[test]
fn direct_transmission_noon_positive() {
let p = VenusAtmosphereParams::default();
assert!(p.direct_transmission(45.0) >= 0.0);
}
#[test]
fn direct_transmission_higher_at_zenith() {
let p = VenusAtmosphereParams::default();
let t_high = p.direct_transmission(90.0);
let t_low = p.direct_transmission(5.0);
assert!(t_high >= t_low);
}
#[test]
fn atmosphere_params_cloud_depth_positive() {
let p = VenusAtmosphereParams::default();
assert!(p.cloud_optical_depth > 0.0);
}
#[test]
fn cloud_top_above_base() {
assert!(cloud_top_altitude_m() > cloud_base_altitude_m());
}
#[test]
fn cloud_base_in_atmosphere() {
assert!(cloud_base_altitude_m() > 30_000.0);
}
#[test]
fn cloud_top_below_100km() {
assert!(cloud_top_altitude_m() < 100_000.0);
}
#[test]
fn basaltic_plain_albedo_valid() {
let m = basaltic_plain();
for c in &m.albedo {
assert!(*c >= 0.0 && *c <= 1.0);
}
}
#[test]
fn basaltic_plain_roughness_valid() {
let m = basaltic_plain();
assert!(m.roughness >= 0.0 && m.roughness <= 1.0);
}
#[test]
fn tessera_highland_different_from_basaltic() {
let b = basaltic_plain();
let t = tessera_highland();
let diff = (b.roughness - t.roughness).abs() + (b.albedo[0] - t.albedo[0]).abs();
assert!(diff > 0.0);
}
#[test]
fn volcanic_flow_emissive_nonzero() {
let v = volcanic_flow();
let sum: f32 = v.emissive.iter().sum();
assert!(sum >= 0.0);
}
#[test]
fn weathered_plain_metallic_low() {
let w = weathered_plain();
assert!(w.metallic < 0.5);
}
#[test]
fn all_materials_normal_strength_positive() {
for m in [
basaltic_plain(),
tessera_highland(),
volcanic_flow(),
weathered_plain(),
] {
assert!(m.normal_strength >= 0.0);
}
}
#[test]
fn terrain_shader_has_name() {
let s = terrain();
assert!(!s.name.is_empty());
}
#[test]
fn terrain_shader_has_uniforms() {
let s = terrain();
assert!(!s.uniforms.is_empty());
}
#[test]
fn near_surface_visibility_low() {
let v = near_surface_visibility_km();
assert!(v > 0.0 && v < 50.0);
}