diff --git a/crates/fj-core/src/validate/shell.rs b/crates/fj-core/src/validate/shell.rs index fedf5cc72..20a4c966a 100644 --- a/crates/fj-core/src/validate/shell.rs +++ b/crates/fj-core/src/validate/shell.rs @@ -315,71 +315,11 @@ mod tests { UpdateShell, }, }, - topology::{Curve, HalfEdge, Shell}, + topology::{Curve, Shell}, validate::{shell::ShellValidationError, Validate, ValidationError}, Core, }; - #[test] - fn curve_geometry_mismatch() -> anyhow::Result<()> { - let mut core = Core::new(); - - let valid = Shell::tetrahedron( - [[0., 0., 0.], [0., 1., 0.], [1., 0., 0.], [0., 0., 1.]], - &mut core, - ); - let invalid = valid.shell.update_face( - &valid.abc.face, - |face, core| { - [face.update_region( - |region, core| { - region.update_exterior( - |cycle, core| { - cycle.update_half_edge( - cycle.half_edges().nth_circular(0), - |half_edge, core| { - let mut geometry = *core - .layers - .geometry - .of_half_edge(half_edge); - geometry.path = geometry.path.reverse(); - geometry.boundary = - geometry.boundary.reverse(); - - [HalfEdge::new( - half_edge.curve().clone(), - half_edge.start_vertex().clone(), - ) - .insert(core) - .set_geometry( - geometry, - &mut core.layers.geometry, - )] - }, - core, - ) - }, - core, - ) - }, - core, - )] - }, - &mut core, - ); - - valid - .shell - .validate_and_return_first_error(&core.layers.geometry)?; - assert_contains_err!( - core, - invalid, - ValidationError::CurveGeometryMismatch(..) - ); - - Ok(()) - } - #[test] fn half_edge_has_no_sibling() -> anyhow::Result<()> { let mut core = Core::new(); diff --git a/crates/fj-core/src/validation/checks/curve_geometry_mismatch.rs b/crates/fj-core/src/validation/checks/curve_geometry_mismatch.rs index 36fc33f27..ea0ff191b 100644 --- a/crates/fj-core/src/validation/checks/curve_geometry_mismatch.rs +++ b/crates/fj-core/src/validation/checks/curve_geometry_mismatch.rs @@ -128,3 +128,80 @@ impl ValidationCheck for CurveGeometryMismatch { .flatten() } } + +#[cfg(test)] +mod tests { + use crate::{ + assert_contains_err, + operations::{ + build::BuildShell, + geometry::UpdateHalfEdgeGeometry, + insert::Insert, + update::{UpdateCycle, UpdateFace, UpdateRegion, UpdateShell}, + }, + topology::{HalfEdge, Shell}, + validate::Validate, + validation::ValidationError, + Core, + }; + + #[test] + fn curve_geometry_mismatch() -> anyhow::Result<()> { + let mut core = Core::new(); + + let valid = Shell::tetrahedron( + [[0., 0., 0.], [0., 1., 0.], [1., 0., 0.], [0., 0., 1.]], + &mut core, + ); + let invalid = valid.shell.update_face( + &valid.abc.face, + |face, core| { + [face.update_region( + |region, core| { + region.update_exterior( + |cycle, core| { + cycle.update_half_edge( + cycle.half_edges().nth_circular(0), + |half_edge, core| { + let mut geometry = *core + .layers + .geometry + .of_half_edge(half_edge); + geometry.path = geometry.path.reverse(); + geometry.boundary = + geometry.boundary.reverse(); + + [HalfEdge::new( + half_edge.curve().clone(), + half_edge.start_vertex().clone(), + ) + .insert(core) + .set_geometry( + geometry, + &mut core.layers.geometry, + )] + }, + core, + ) + }, + core, + ) + }, + core, + )] + }, + &mut core, + ); + + valid + .shell + .validate_and_return_first_error(&core.layers.geometry)?; + assert_contains_err!( + core, + invalid, + ValidationError::CurveGeometryMismatch(..) + ); + + Ok(()) + } +}