Merge pull request #2371 from hannobraun/validate

Simplify sketch validation tests
This commit is contained in:
Hanno Braun 2024-06-05 22:00:08 +02:00 committed by GitHub
commit 3bc1c23885
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -113,8 +113,13 @@ impl SketchValidationError {
mod tests { mod tests {
use crate::{ use crate::{
assert_contains_err, assert_contains_err,
operations::{build::BuildHalfEdge, insert::Insert}, operations::{
topology::{Cycle, HalfEdge, Region, Sketch, Vertex}, build::{BuildCycle, BuildRegion, BuildSketch},
insert::Insert,
reverse::Reverse,
update::{UpdateRegion, UpdateSketch},
},
topology::{Cycle, Region, Sketch},
validate::{SketchValidationError, Validate, ValidationError}, validate::{SketchValidationError, Validate, ValidationError},
Core, Core,
}; };
@ -123,31 +128,17 @@ mod tests {
fn should_find_clockwise_exterior_cycle() -> anyhow::Result<()> { fn should_find_clockwise_exterior_cycle() -> anyhow::Result<()> {
let mut core = Core::new(); let mut core = Core::new();
let surface = core.layers.topology.surfaces.space_2d(); let valid = Sketch::circle([0., 0.], 1., &mut core);
valid.validate_and_return_first_error(&core.layers.geometry)?;
let valid_outer_circle = let invalid_sketch = valid.update_region(
HalfEdge::circle([0., 0.], 1., surface.clone(), &mut core); valid.regions().first(),
let valid_exterior = |region, core| {
Cycle::new(vec![valid_outer_circle.clone()]).insert(&mut core); [region
let valid_sketch = Sketch::new( .update_exterior(|cycle, core| cycle.reverse(core), core)]
surface.clone(), },
vec![Region::new(valid_exterior.clone(), vec![]).insert(&mut core)],
);
valid_sketch.validate_and_return_first_error(&core.layers.geometry)?;
let invalid_outer_circle = HalfEdge::from_sibling(
&valid_outer_circle,
Vertex::new().insert(&mut core),
&mut core, &mut core,
); );
let invalid_exterior =
Cycle::new(vec![invalid_outer_circle.clone()]).insert(&mut core);
let invalid_sketch = Sketch::new(
surface,
vec![
Region::new(invalid_exterior.clone(), vec![]).insert(&mut core)
],
);
assert_contains_err!( assert_contains_err!(
core, core,
invalid_sketch, invalid_sketch,
@ -165,33 +156,27 @@ mod tests {
let surface = core.layers.topology.surfaces.space_2d(); let surface = core.layers.topology.surfaces.space_2d();
let outer_circle = let region = Region::circle([0., 0.], 2., surface.clone(), &mut core)
HalfEdge::circle([0., 0.], 2., surface.clone(), &mut core); .add_interiors(
let inner_circle = [Cycle::circle([0., 0.], 1., surface.clone(), &mut core)
HalfEdge::circle([0., 0.], 1., surface.clone(), &mut core); .reverse(&mut core)],
let cw_inner_circle = HalfEdge::from_sibling( &mut core,
&inner_circle, )
Vertex::new().insert(&mut core), .insert(&mut core);
let valid = Sketch::new(surface.clone(), vec![region]);
valid.validate_and_return_first_error(&core.layers.geometry)?;
let invalid_sketch = valid.update_region(
valid.regions().first(),
|region, core| {
[region.update_interior(
region.interiors().first(),
|cycle, core| [cycle.reverse(core)],
core,
)]
},
&mut core, &mut core,
); );
let exterior = Cycle::new(vec![outer_circle.clone()]).insert(&mut core);
let valid_interior =
Cycle::new(vec![cw_inner_circle.clone()]).insert(&mut core);
let valid_sketch = Sketch::new(
surface.clone(),
vec![Region::new(exterior.clone(), vec![valid_interior])
.insert(&mut core)],
);
valid_sketch.validate_and_return_first_error(&core.layers.geometry)?;
let invalid_interior =
Cycle::new(vec![inner_circle.clone()]).insert(&mut core);
let invalid_sketch = Sketch::new(
surface,
vec![Region::new(exterior.clone(), vec![invalid_interior])
.insert(&mut core)],
);
assert_contains_err!( assert_contains_err!(
core, core,
invalid_sketch, invalid_sketch,