Add some basic tests to plane operations
This commit is contained in:
parent
8fa3c40240
commit
7de381d911
|
@ -106,3 +106,90 @@ impl PlaneIntersection {
|
||||||
.transpose()
|
.transpose()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod plane_tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn from_point_normal() {
|
||||||
|
let point = glam::vec3(1.0, 1.0, 0.0);
|
||||||
|
let normal = glam::vec3(1.0, 1.0, 1.0);
|
||||||
|
|
||||||
|
let expected = Plane {
|
||||||
|
normal,
|
||||||
|
offset: 2.0,
|
||||||
|
};
|
||||||
|
|
||||||
|
assert_eq!(Plane::from_point_normal(point, normal), expected);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod plane_intersection_tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn from_planes() {
|
||||||
|
let planes = vec![
|
||||||
|
Plane::from_point_normal(Vec3::X, Vec3::X),
|
||||||
|
Plane::from_point_normal(Vec3::Y, Vec3::Y),
|
||||||
|
Plane::from_point_normal(Vec3::Z, Vec3::Z),
|
||||||
|
Plane::from_point_normal(Vec3::NEG_X, Vec3::NEG_X),
|
||||||
|
];
|
||||||
|
|
||||||
|
let intersection1 = PlaneIntersection::from_planes(planes[0], planes[1], planes[2]);
|
||||||
|
let intersection2 = PlaneIntersection::from_planes(planes[0], planes[1], planes[3]);
|
||||||
|
|
||||||
|
assert!(intersection1.is_some());
|
||||||
|
assert!(intersection2.is_none());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn get_intersection_point() {
|
||||||
|
let planes = vec![
|
||||||
|
Plane::from_point_normal(Vec3::X, Vec3::X),
|
||||||
|
Plane::from_point_normal(Vec3::Y, Vec3::Y),
|
||||||
|
Plane::from_point_normal(Vec3::Z, Vec3::Z),
|
||||||
|
Plane::from_point_normal(glam::vec3(1.0, 1.0, 0.0), Vec3::ONE),
|
||||||
|
];
|
||||||
|
|
||||||
|
let intersection1 = PlaneIntersection::from_planes(planes[0], planes[1], planes[2]);
|
||||||
|
let intersection2 = PlaneIntersection::from_planes(planes[0], planes[1], planes[3]);
|
||||||
|
assert_eq!(intersection1.unwrap().get_intersection_point(), Vec3::ONE);
|
||||||
|
assert_eq!(
|
||||||
|
intersection2.unwrap().get_intersection_point(),
|
||||||
|
glam::vec3(1.0, 1.0, 0.0)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn in_half_space_mat() {
|
||||||
|
let intersection = PlaneIntersection::from_planes(
|
||||||
|
Plane::from_point_normal(Vec3::X, Vec3::X),
|
||||||
|
Plane::from_point_normal(Vec3::Y, Vec3::Y),
|
||||||
|
Plane::from_point_normal(Vec3::Z, Vec3::Z),
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let p1 = Plane::from_point_normal(Vec3::NEG_ONE, Vec3::NEG_ONE);
|
||||||
|
let p2 = Plane::from_point_normal(Vec3::ZERO, Vec3::ONE);
|
||||||
|
assert!(intersection.in_halfspace_mat(&p1));
|
||||||
|
assert!(!intersection.in_halfspace_mat(&p2));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn in_half_space() {
|
||||||
|
let intersection = PlaneIntersection::from_planes(
|
||||||
|
Plane::from_point_normal(Vec3::X, Vec3::X),
|
||||||
|
Plane::from_point_normal(Vec3::Y, Vec3::Y),
|
||||||
|
Plane::from_point_normal(Vec3::Z, Vec3::Z),
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let p1 = Plane::from_point_normal(Vec3::NEG_ONE, Vec3::NEG_ONE);
|
||||||
|
let p2 = Plane::from_point_normal(Vec3::ZERO, Vec3::ONE);
|
||||||
|
assert!(intersection.in_halfspace(&p1));
|
||||||
|
assert!(!intersection.in_halfspace(&p2));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue