#[cfg(test)]
mod tests {
use crate::CollisionType;
use crate::core::material::{Material, MaterialBuilder};
use crate::core::physics::Physics;
use crate::rendering::shader_registry::ShaderType;
use crate::scene::object::{Instance, RenderBatch};
#[test]
fn shader_type_default_is_pbr() {
assert_eq!(ShaderType::default(), ShaderType::Pbr);
}
#[test]
fn shader_type_sort_keys_are_unique_and_ordered() {
let all = ShaderType::all();
let mut keys: Vec<u32> = all.iter().map(|s| s.sort_key()).collect();
let original = keys.clone();
keys.sort();
keys.dedup();
assert_eq!(keys.len(), all.len());
assert_eq!(keys, original);
}
#[test]
fn shader_type_equality_and_hash() {
use std::collections::HashSet;
let mut set = HashSet::new();
set.insert(ShaderType::Pbr);
set.insert(ShaderType::Unlit);
set.insert(ShaderType::Pbr);
assert_eq!(set.len(), 2);
assert!(set.contains(&ShaderType::Pbr));
assert!(set.contains(&ShaderType::Unlit));
}
#[test]
fn shader_type_clone_and_copy() {
let a = ShaderType::Emissive;
let b = a; let c = a.clone(); assert_eq!(a, b);
assert_eq!(a, c);
}
#[test]
fn material_default_has_pbr_shader() {
let mat = Material::default();
assert_eq!(mat.shader, ShaderType::Pbr);
}
#[test]
fn material_builder_sets_shader() {
let mat = Material::standard().shader(ShaderType::Unlit).build();
assert_eq!(mat.shader, ShaderType::Unlit);
}
#[test]
fn material_builder_default_shader_is_pbr() {
let mat = Material::standard().build();
assert_eq!(mat.shader, ShaderType::Pbr);
}
#[test]
fn material_builder_chaining_preserves_shader() {
let mat = Material::standard()
.color([1.0, 0.0, 0.0])
.roughness(0.8)
.metalness(0.5)
.shader(ShaderType::NormalDebug)
.emissive(0.0)
.build();
assert_eq!(mat.shader, ShaderType::NormalDebug);
assert_eq!(mat.color, [1.0, 0.0, 0.0]);
assert_eq!(mat.roughness, 0.8);
assert_eq!(mat.metalness, 0.5);
}
#[test]
fn material_builder_shader_can_be_overridden() {
let mat = Material::standard()
.shader(ShaderType::Unlit)
.shader(ShaderType::Emissive) .build();
assert_eq!(mat.shader, ShaderType::Emissive);
}
#[test]
fn instance_default_has_pbr_shader() {
let inst = Instance::default();
assert_eq!(inst.shader, ShaderType::Pbr);
}
#[test]
fn instance_custom_shader() {
let inst = Instance {
shader: ShaderType::Unlit,
..Default::default()
};
assert_eq!(inst.shader, ShaderType::Unlit);
}
#[test]
fn instance_clone_preserves_shader() {
let inst = Instance {
shader: ShaderType::Emissive,
color: [1.0, 0.0, 0.0],
..Default::default()
};
let cloned = inst.clone();
assert_eq!(cloned.shader, ShaderType::Emissive);
assert_eq!(cloned.color, [1.0, 0.0, 0.0]);
}
#[test]
fn same_shader_same_key_groups_together() {
let shader_a = ShaderType::Pbr;
let shader_b = ShaderType::Pbr;
assert_eq!(shader_a, shader_b); }
#[test]
fn different_shader_different_key_separates() {
let shader_a = ShaderType::Pbr;
let shader_b = ShaderType::Unlit;
assert_ne!(shader_a, shader_b); }
}