From a576f9fafa792c4775a5b494bffaf721a0af92db Mon Sep 17 00:00:00 2001 From: AJ Isaacs Date: Sun, 22 Mar 2026 20:31:50 -0400 Subject: [PATCH] fix: correct test helper winding and edge sequencer test data Test drawings used CCW winding, causing OffsetSide.Left to produce inward offsets. The BestFit pipeline then positioned pairs so actual shapes overlapped, failing all 1232 candidates. Changed to CW winding to match CNC convention where OffsetSide.Left = outward. Also fixed EdgeStartSequencer test: centerPart at (25,55) was only 4.5 from the top edge (plate Y=60), closer than midPart at (10,10). Moved to (25,25) for correct ordering. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../Sequencing/EdgeStartSequencerTests.cs | 2 +- OpenNest.Tests/TestHelpers.cs | 19 +++++++++++-------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/OpenNest.Tests/Sequencing/EdgeStartSequencerTests.cs b/OpenNest.Tests/Sequencing/EdgeStartSequencerTests.cs index b6a07d1..1e65c6b 100644 --- a/OpenNest.Tests/Sequencing/EdgeStartSequencerTests.cs +++ b/OpenNest.Tests/Sequencing/EdgeStartSequencerTests.cs @@ -11,7 +11,7 @@ public class EdgeStartSequencerTests { var plate = new Plate(60, 120); var edgePart = MakePartAt(1, 1); - var centerPart = MakePartAt(25, 55); + var centerPart = MakePartAt(25, 25); var midPart = MakePartAt(10, 10); plate.Parts.Add(edgePart); plate.Parts.Add(centerPart); diff --git a/OpenNest.Tests/TestHelpers.cs b/OpenNest.Tests/TestHelpers.cs index cb24939..b9ba445 100644 --- a/OpenNest.Tests/TestHelpers.cs +++ b/OpenNest.Tests/TestHelpers.cs @@ -7,11 +7,12 @@ internal static class TestHelpers { public static Part MakePartAt(double x, double y, double size = 1) { + // CW winding matches CNC convention (OffsetSide.Left = outward) var pgm = new Program(); pgm.Codes.Add(new RapidMove(new Vector(0, 0))); - pgm.Codes.Add(new LinearMove(new Vector(size, 0))); - pgm.Codes.Add(new LinearMove(new Vector(size, size))); pgm.Codes.Add(new LinearMove(new Vector(0, size))); + pgm.Codes.Add(new LinearMove(new Vector(size, size))); + pgm.Codes.Add(new LinearMove(new Vector(size, 0))); pgm.Codes.Add(new LinearMove(new Vector(0, 0))); var drawing = new Drawing("test", pgm); return new Part(drawing, new Vector(x, y)); @@ -27,24 +28,26 @@ internal static class TestHelpers public static Drawing MakeSquareDrawing(double size = 10) { + // CW winding matches CNC convention (OffsetSide.Left = outward) var pgm = new Program(); pgm.Codes.Add(new RapidMove(new Vector(0, 0))); - pgm.Codes.Add(new LinearMove(new Vector(size, 0))); - pgm.Codes.Add(new LinearMove(new Vector(size, size))); pgm.Codes.Add(new LinearMove(new Vector(0, size))); + pgm.Codes.Add(new LinearMove(new Vector(size, size))); + pgm.Codes.Add(new LinearMove(new Vector(size, 0))); pgm.Codes.Add(new LinearMove(new Vector(0, 0))); return new Drawing("square", pgm); } public static Drawing MakeLShapeDrawing() { + // CW winding matches CNC convention (OffsetSide.Left = outward) var pgm = new Program(); pgm.Codes.Add(new RapidMove(new Vector(0, 0))); - pgm.Codes.Add(new LinearMove(new Vector(10, 0))); - pgm.Codes.Add(new LinearMove(new Vector(10, 5))); - pgm.Codes.Add(new LinearMove(new Vector(5, 5))); - pgm.Codes.Add(new LinearMove(new Vector(5, 10))); pgm.Codes.Add(new LinearMove(new Vector(0, 10))); + pgm.Codes.Add(new LinearMove(new Vector(5, 10))); + pgm.Codes.Add(new LinearMove(new Vector(5, 5))); + pgm.Codes.Add(new LinearMove(new Vector(10, 5))); + pgm.Codes.Add(new LinearMove(new Vector(10, 0))); pgm.Codes.Add(new LinearMove(new Vector(0, 0))); return new Drawing("lshape", pgm); }