use crate::optics::materials::GemMaterial;
use glam::Vec3;
#[test]
fn gpu_supported_is_true_for_every_built_in_material() {
let biaxial_names = [
"Alexandrite",
"Topaz",
"Tanzanite",
"Chrysoberyl (Yellow)",
"Peridot",
"Andalusite",
];
for material in GemMaterial::all_materials() {
assert!(
material.gpu_supported(),
"{} must be reported gpu_supported() == true",
material.name
);
if biaxial_names.contains(&material.name.as_str()) {
assert!(
material.biaxial_delta_beta_alpha.is_some(),
"{} must actually carry biaxial data for this test to be meaningful",
material.name
);
}
}
}
#[test]
fn gpu_supported_no_longer_depends_on_biaxial_delta_beta_alpha() {
let mut zircon = GemMaterial::by_name("Zircon").expect("Zircon must be a built-in");
assert!(
zircon.gpu_supported(),
"Zircon (uniaxial) must be GPU-supported"
);
zircon.birefringence_delta *= -3.0;
zircon.c_axis = Vec3::X;
assert!(
zircon.gpu_supported(),
"changing unrelated uniaxial fields must not affect gpu_supported()"
);
zircon.biaxial_delta_beta_alpha = Some(0.0);
assert!(
zircon.gpu_supported(),
"biaxial_delta_beta_alpha no longer gates GPU support"
);
zircon.biaxial_delta_beta_alpha = None;
assert!(zircon.gpu_supported(), "and stays supported once cleared");
}