diff --git a/OpenNest.Engine/BestFit/BestFitFinder.cs b/OpenNest.Engine/BestFit/BestFitFinder.cs index 95861b5..bc0c4b4 100644 --- a/OpenNest.Engine/BestFit/BestFitFinder.cs +++ b/OpenNest.Engine/BestFit/BestFitFinder.cs @@ -83,8 +83,8 @@ namespace OpenNest.Engine.BestFit foreach (var angle in angles) { - var desc = string.Format("{0:F1} deg rotated, offset slide", Angle.ToDegrees(angle)); - strategies.Add(new RotationSlideStrategy(angle, type++, desc, _slideComputer)); + var desc = $"{Angle.ToDegrees(angle):F1} deg NFP"; + strategies.Add(new NfpSlideStrategy(angle, type++, desc)); } return strategies; diff --git a/OpenNest.Tests/NfpBestFitIntegrationTests.cs b/OpenNest.Tests/NfpBestFitIntegrationTests.cs new file mode 100644 index 0000000..d47371b --- /dev/null +++ b/OpenNest.Tests/NfpBestFitIntegrationTests.cs @@ -0,0 +1,57 @@ +using OpenNest.CNC; +using OpenNest.Engine.BestFit; +using OpenNest.Geometry; + +namespace OpenNest.Tests; + +public class NfpBestFitIntegrationTests +{ + [Fact] + public void FindBestFits_ReturnsKeptResults_ForSquare() + { + var finder = new BestFitFinder(120, 60); + var drawing = TestHelpers.MakeSquareDrawing(); + var results = finder.FindBestFits(drawing); + Assert.NotEmpty(results); + Assert.NotEmpty(results.Where(r => r.Keep)); + } + + [Fact] + public void FindBestFits_ResultsHaveValidDimensions() + { + var finder = new BestFitFinder(120, 60); + var drawing = TestHelpers.MakeSquareDrawing(); + var results = finder.FindBestFits(drawing); + + foreach (var result in results.Where(r => r.Keep)) + { + Assert.True(result.BoundingWidth > 0); + Assert.True(result.BoundingHeight > 0); + Assert.True(result.RotatedArea > 0); + } + } + + [Fact] + public void FindBestFits_LShape_HasBetterUtilization_ThanBoundingBox() + { + var finder = new BestFitFinder(120, 60); + var drawing = TestHelpers.MakeLShapeDrawing(); + var results = finder.FindBestFits(drawing); + + var bestUtilization = results + .Where(r => r.Keep) + .Max(r => r.Utilization); + Assert.True(bestUtilization > 0.5); + } + + [Fact] + public void FindBestFits_NoOverlaps_InKeptResults() + { + var finder = new BestFitFinder(120, 60); + var drawing = TestHelpers.MakeSquareDrawing(); + var results = finder.FindBestFits(drawing); + + Assert.All(results.Where(r => r.Keep), r => + Assert.Equal("Valid", r.Reason)); + } +}