use glam::Vec3;
use crate::geometry::{cuts::asc_schedule::dedup_planes, plane::GpuFacetPlane};
#[test]
fn dedup_merges_planes_straddling_a_quantization_bin_edge() {
const QUANT: f32 = 1.0 / 2048.0;
let bin_edge = 0.5 * QUANT;
let normal = Vec3::new(0.0, 0.0, 1.0);
let planes = vec![
GpuFacetPlane::new(normal, bin_edge - 1e-7),
GpuFacetPlane::new(normal, bin_edge + 1e-7),
];
let deduped = dedup_planes(planes);
assert_eq!(
deduped.len(),
1,
"two near-identical offsets straddling a bin edge must merge into one plane"
);
}
#[test]
fn dedup_keeps_the_first_occurrence() {
const QUANT: f32 = 1.0 / 2048.0;
let bin_edge = 0.5 * QUANT;
let normal = Vec3::new(0.0, 0.0, 1.0);
let first = GpuFacetPlane::new(normal, bin_edge - 1e-7);
let second = GpuFacetPlane::new(normal, bin_edge + 1e-7);
let deduped = dedup_planes(vec![first, second]);
assert_eq!(deduped, vec![first]);
}
#[test]
fn dedup_keeps_genuinely_distinct_planes() {
const QUANT: f32 = 1.0 / 2048.0;
let normal = Vec3::new(0.0, 0.0, 1.0);
let planes = vec![
GpuFacetPlane::new(normal, 0.0),
GpuFacetPlane::new(normal, 10.0 * QUANT),
];
let deduped = dedup_planes(planes.clone());
assert_eq!(
deduped, planes,
"genuinely distinct planes must both be kept"
);
}
#[test]
fn dedup_keeps_planes_with_different_normals_even_at_the_same_offset() {
let planes = vec![
GpuFacetPlane::new(Vec3::new(0.0, 0.0, 1.0), 1.0),
GpuFacetPlane::new(Vec3::new(1.0, 0.0, 0.0), 1.0),
];
let deduped = dedup_planes(planes.clone());
assert_eq!(deduped, planes);
}
#[test]
fn dedup_keeps_planes_one_degree_apart() {
let normal_a = Vec3::new(0.0, 0.0, 1.0);
let angle = 1.0f32.to_radians();
let normal_b = Vec3::new(angle.sin(), 0.0, angle.cos());
let planes = vec![
GpuFacetPlane::new(normal_a, -1.0),
GpuFacetPlane::new(normal_b, -1.0),
];
let deduped = dedup_planes(planes.clone());
assert_eq!(
deduped, planes,
"planes one degree apart must not be merged into a single half-space"
);
}
#[test]
fn dedup_keeps_the_plane_with_smaller_absolute_offset() {
let normal = Vec3::new(0.0, 0.0, 1.0);
let tighter = GpuFacetPlane::new(normal, -1.0);
let looser = GpuFacetPlane::new(normal, -1.0 - 1e-7);
let deduped = dedup_planes(vec![looser, tighter]);
assert_eq!(
deduped,
vec![tighter],
"the smaller-|d| plane must survive even when it arrives second"
);
}