use solarsystems::BodyId;
use solarsystems::rendering::features::{
body_render_profile, body_render_quality, body_ring_bands, body_surface_features,
};
#[test]
fn earth_surface_features_include_real_named_regions() {
let features = body_surface_features(BodyId::Earth);
assert!(
features.len() >= 10,
"expected detailed Earth regions, got {}",
features.len()
);
assert!(features.iter().any(|f| f.name == "Africa"));
assert!(features.iter().any(|f| f.name == "Eurasia"));
assert!(features.iter().any(|f| f.name == "NorthAmerica"));
}
#[test]
fn sun_surface_features_include_active_regions() {
let features = body_surface_features(BodyId::Sun);
assert!(
features.len() >= 6,
"expected several solar active regions, got {}",
features.len()
);
assert!(features.iter().all(|f| f.lat_deg.abs() <= 40.0));
}
#[test]
fn saturn_ring_bands_are_detailed() {
let bands = body_ring_bands(BodyId::Saturn);
assert!(
bands.len() >= 7,
"expected detailed Saturn rings, got {}",
bands.len()
);
assert!(bands.iter().any(|b| b.name == "CassiniDivision"));
assert!(bands.iter().any(|b| b.name == "EnckeGap"));
}
#[test]
fn moon_surface_features_include_maria_and_polar_frost() {
let features = body_surface_features(BodyId::Moon);
assert!(
features.len() >= 6,
"expected detailed Moon regions, got {}",
features.len()
);
assert!(features.iter().any(|f| f.name == "MareImbrium"));
assert!(features.iter().any(|f| f.name == "OceanusProcellarum"));
assert!(features.iter().any(|f| f.material == "polar_ice"));
}
#[test]
fn europa_surface_features_include_chaos_and_lineae() {
let features = body_surface_features(BodyId::Europa);
assert!(
features.len() >= 4,
"expected Europa lineae/chaos regions, got {}",
features.len()
);
assert!(features.iter().any(|f| f.name == "ConamaraChaos"));
assert!(features.iter().any(|f| f.material == "lineae_crack"));
}
#[test]
fn dwarf_planets_have_named_surface_regions() {
let pluto = body_surface_features(BodyId::Pluto);
assert!(pluto.iter().any(|f| f.name == "TombaughRegio"));
let haumea = body_surface_features(BodyId::Haumea);
assert!(haumea.iter().any(|f| f.name == "DarkRedSpot"));
}
#[test]
fn asteroids_and_comets_have_source_features() {
let ceres = body_surface_features(BodyId::Ceres);
assert!(ceres.iter().any(|f| f.name == "Occator"));
let halley = body_surface_features(BodyId::Halley);
assert!(halley.iter().any(|f| f.kind == "jet"));
}
#[test]
fn inner_planets_and_ice_giants_have_named_source_regions() {
let mars = body_surface_features(BodyId::Mars);
assert!(mars.iter().any(|f| f.name == "OlympusMons"));
assert!(mars.iter().any(|f| f.name == "VallesMarineris"));
let mercury = body_surface_features(BodyId::Mercury);
assert!(mercury.iter().any(|f| f.name == "CalorisBasin"));
let venus = body_surface_features(BodyId::Venus);
assert!(venus.iter().any(|f| f.name == "AphroditeTerra"));
let neptune = body_surface_features(BodyId::Neptune);
assert!(neptune.iter().any(|f| f.name == "GreatDarkSpot"));
}
#[test]
fn render_profiles_are_owned_by_solarsystems() {
let earth = body_render_profile(BodyId::Earth);
assert_eq!(earth.family, "oceanic_terrestrial");
assert_eq!(earth.ocean_material, "ocean");
let jupiter = body_render_profile(BodyId::Jupiter);
assert_eq!(jupiter.family, "banded_gas_giant");
assert_eq!(jupiter.accent_material, "stormregion");
let europa = body_render_profile(BodyId::Europa);
assert_eq!(europa.family, "icy_body");
let halley = body_render_profile(BodyId::Halley);
assert_eq!(halley.family, "comet_nucleus");
}
#[test]
fn gas_giants_have_dense_source_banding() {
let jupiter = body_surface_features(BodyId::Jupiter);
assert!(
jupiter.len() >= 8,
"expected richer Jupiter banding, got {}",
jupiter.len()
);
assert!(jupiter.iter().any(|f| f.name == "GreatRedSpot"));
assert!(jupiter.iter().any(|f| f.name == "OvalBA"));
let saturn = body_surface_features(BodyId::Saturn);
assert!(
saturn.len() >= 6,
"expected richer Saturn banding, got {}",
saturn.len()
);
assert!(saturn.iter().any(|f| f.name == "NorthPolarHexagon"));
assert!(saturn.iter().any(|f| f.name == "SouthPolarVortex"));
}
#[test]
fn browser_render_budgets_stay_detailed_without_ram_explosion() {
let earth = body_render_quality(BodyId::Earth);
assert!(
(192..=320).contains(&earth.mesh_segments),
"Earth mesh budget should stay detailed but sane, got {}",
earth.mesh_segments
);
assert!(
earth.texture_width <= 2048 && earth.texture_height <= 1024,
"Earth texture budget is too large for browser generation: {}x{}",
earth.texture_width,
earth.texture_height
);
let moon = body_render_quality(BodyId::Moon);
assert!(
(128..=256).contains(&moon.mesh_segments),
"Moon mesh budget should stay detailed but sane, got {}",
moon.mesh_segments
);
let saturn = body_render_quality(BodyId::Saturn);
assert!(
(360..=720).contains(&saturn.ring_segments),
"Saturn ring budget should avoid browser over-allocation, got {}",
saturn.ring_segments
);
}
#[test]
fn terrestrial_worlds_and_major_moons_have_dense_named_regions() {
let earth = body_surface_features(BodyId::Earth);
assert!(
earth.len() >= 16,
"expected dense Earth regions, got {}",
earth.len()
);
assert!(earth.iter().any(|f| f.name == "AmazonBasin"));
assert!(earth.iter().any(|f| f.name == "Patagonia"));
let mars = body_surface_features(BodyId::Mars);
assert!(
mars.len() >= 10,
"expected dense Mars regions, got {}",
mars.len()
);
assert!(mars.iter().any(|f| f.name == "ArabiaTerra"));
assert!(mars.iter().any(|f| f.name == "NoctisLabyrinthus"));
let moon = body_surface_features(BodyId::Moon);
assert!(
moon.len() >= 10,
"expected dense Moon regions, got {}",
moon.len()
);
assert!(moon.iter().any(|f| f.name == "MareCrisium"));
let europa = body_surface_features(BodyId::Europa);
assert!(
europa.len() >= 6,
"expected denser Europa regions, got {}",
europa.len()
);
assert!(europa.iter().any(|f| f.name == "TheraMacula"));
let titan = body_surface_features(BodyId::Titan);
assert!(
titan.len() >= 5,
"expected denser Titan regions, got {}",
titan.len()
);
assert!(titan.iter().any(|f| f.name == "LigeiaMare"));
}