use glam_det::{UnitVec3, Vec3};
#[inline]
pub(crate) fn normalize_and_len(normal: Vec3, invalid_len: f32) -> (UnitVec3, f32) {
if let Some((normal, area)) = normal.try_normalize_to_unit_and_length(1e-8) {
(normal, area)
} else {
(UnitVec3::X, invalid_len)
}
}
#[cfg(test)]
mod tests {
use approx_det::assert_relative_eq;
use glam_det::{UnitVec3, Vec3};
use wasm_bindgen_test::{wasm_bindgen_test_configure, *};
wasm_bindgen_test_configure!(run_in_browser);
#[test]
#[wasm_bindgen_test]
fn test_normalize_zero_len_vec() {
let zero_vec = Vec3::new(0.0, 0.0, 1e-9);
let (unit_vec, len) = super::normalize_and_len(zero_vec, 0.0);
assert_relative_eq!(unit_vec, UnitVec3::X);
assert_relative_eq!(len, 0.0);
}
#[test]
#[wasm_bindgen_test]
fn test_normalize_one_len_vec() {
let value = Vec3::new(0.0, 0.0, 1f32);
let (unit_vec, len) = super::normalize_and_len(value, 0.0);
assert_relative_eq!(unit_vec, UnitVec3::Z);
assert_relative_eq!(len, 1.0);
}
}