From 9802ccc648be3ea76744e9ede36d34497bb0d850 Mon Sep 17 00:00:00 2001 From: mikhailofff Date: Fri, 23 Jan 2026 16:40:08 +0400 Subject: [PATCH 1/3] =?UTF-8?q?add=20corner=E2=80=91case=20tests=20for=20c?= =?UTF-8?q?ore=20overlay?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- iOverlay/src/core/overlay.rs | 94 ++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) diff --git a/iOverlay/src/core/overlay.rs b/iOverlay/src/core/overlay.rs index d99b7d8..b85ccfa 100644 --- a/iOverlay/src/core/overlay.rs +++ b/iOverlay/src/core/overlay.rs @@ -424,6 +424,7 @@ mod tests { use alloc::vec; use i_float::int::point::IntPoint; use i_shape::int::area::Area; + use i_shape::int::shape::IntContour; use crate::core::fill_rule::FillRule; use crate::core::overlay::Overlay; use crate::core::overlay_rule::OverlayRule; @@ -753,4 +754,97 @@ mod tests { assert_eq!(result[0].len(), 1); assert_eq!(result.area(), -14); } + + #[test] + fn test_12() { + let subj = [ + vec![ + IntPoint::new(2, 0), + IntPoint::new(5, 0), + IntPoint::new(5, 5), + IntPoint::new(2, 5), + ], + vec![ + IntPoint::new(0, 0), + IntPoint::new(5, 0), + IntPoint::new(5, 5), + IntPoint::new(0, 5), + ], + ]; + + let mut overlay = Overlay::with_contours(&subj, &[]); + let result = overlay.overlay(OverlayRule::Subject, FillRule::NonZero); + + assert_eq!(result.len(), 1); + assert_eq!(result[0].len(), 1); + assert_eq!(result.area(), -25); + } + + #[test] + fn test_13() { + let subj = [ + vec![ + IntPoint::new(0, 0), + IntPoint::new(5, 0), + IntPoint::new(5, 5), + IntPoint::new(0, 5), + ], + vec![ + IntPoint::new(0, 0), + IntPoint::new(5, 0), + IntPoint::new(5, 5), + IntPoint::new(0, 5), + ], + ]; + + let mut overlay = Overlay::with_contours(&subj, &[]); + let result = overlay.overlay(OverlayRule::Subject, FillRule::NonZero); + + assert_eq!(result.len(), 1); + assert_eq!(result[0].len(), 1); + assert_eq!(result.area(), -25); + } + + #[test] + fn test_14() { + let subj = [ + vec![ + IntPoint::new(0, 0), + IntPoint::new(0, 2), + IntPoint::new(2, 0), + ], + vec![ + IntPoint::new(0, 0), + IntPoint::new(2, 0), + IntPoint::new(0, -2), + ], + vec![ + IntPoint::new(0, 0), + IntPoint::new(0, -2), + IntPoint::new(-2, 0), + ], + vec![ + IntPoint::new(0, 0), + IntPoint::new(-2, 0), + IntPoint::new(0, 2), + ], + ]; + + let mut overlay = Overlay::with_contours(&subj, &[]); + let result = overlay.overlay(OverlayRule::Subject, FillRule::NonZero); + + assert_eq!(result.len(), 1); + assert_eq!(result[0].len(), 1); + assert_eq!(result.area(), -8); + } + + #[test] + fn test_empty_input() { + let subj: &[IntContour] = &[]; + + let mut overlay = Overlay::with_contours(&subj, &[]); + let result = overlay.overlay(OverlayRule::Subject, FillRule::NonZero); + + assert_eq!(result.len(), 0); + } } From 6f45ec966ebe3f799b7ee35d4ac62e7feb5ca608 Mon Sep 17 00:00:00 2001 From: mikhailofff Date: Fri, 23 Jan 2026 16:53:51 +0400 Subject: [PATCH 2/3] remove unnecessary extern --- iOverlay/src/core/overlay.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/iOverlay/src/core/overlay.rs b/iOverlay/src/core/overlay.rs index b85ccfa..c53f671 100644 --- a/iOverlay/src/core/overlay.rs +++ b/iOverlay/src/core/overlay.rs @@ -419,8 +419,6 @@ impl IntOverlayOptions { #[cfg(test)] mod tests { - extern crate std; - use alloc::vec; use i_float::int::point::IntPoint; use i_shape::int::area::Area; From 75fd22508890bcc42e46983634db518f1c9881fd Mon Sep 17 00:00:00 2001 From: mikhailofff Date: Fri, 23 Jan 2026 17:00:08 +0400 Subject: [PATCH 3/3] provide a subject definition in a single format --- iOverlay/src/core/overlay.rs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/iOverlay/src/core/overlay.rs b/iOverlay/src/core/overlay.rs index c53f671..e0ec614 100644 --- a/iOverlay/src/core/overlay.rs +++ b/iOverlay/src/core/overlay.rs @@ -429,13 +429,14 @@ mod tests { #[test] fn test_0() { - let subj = [[ - IntPoint::new(0, 0), - IntPoint::new(10, 0), - IntPoint::new(10, 10), - IntPoint::new(0, 10), - ] - .to_vec()]; + let subj = [ + vec![ + IntPoint::new(0, 0), + IntPoint::new(10, 0), + IntPoint::new(10, 10), + IntPoint::new(0, 10), + ], + ]; let mut overlay = Overlay::with_contours(&subj, &[]); let result = overlay.overlay(OverlayRule::Subject, FillRule::EvenOdd);