diff --git a/OpenNest.Test/FillTests.cs b/OpenNest.Test/FillTests.cs new file mode 100644 index 0000000..3199893 --- /dev/null +++ b/OpenNest.Test/FillTests.cs @@ -0,0 +1,71 @@ +using OpenNest.Geometry; +using Xunit; +using Xunit.Abstractions; + +namespace OpenNest.Test; + +public class FillTests +{ + private readonly ITestOutputHelper _output; + + public FillTests(ITestOutputHelper output) + { + _output = output; + } + + [SkippableFact] + [Trait("Category", "Fill")] + public void N0308_008_HingePlate_FillsAtLeast75() + { + Skip.IfNot(TestData.IsAvailable, TestData.SkipReason); + + var nest = TestData.LoadNest("N0308-008.zip"); + var hinge = nest.Drawings.First(d => d.Name.Contains("HINGE PLATE #2")); + var plate = TestData.CleanPlateFrom(nest.Plates[0]); + + var engine = new NestEngine(plate); + var sw = System.Diagnostics.Stopwatch.StartNew(); + engine.Fill(new NestItem { Drawing = hinge, Quantity = 0 }); + sw.Stop(); + + _output.WriteLine($"Parts: {plate.Parts.Count} | Time: {sw.ElapsedMilliseconds}ms"); + + Assert.True(plate.Parts.Count >= 75, + $"Expected >= 75 parts, got {plate.Parts.Count}"); + AssertNoOverlaps(plate.Parts.ToList()); + } + + [SkippableFact] + [Trait("Category", "Fill")] + public void RemainderStripRefill_30pcs_FillsAtLeast32() + { + Skip.IfNot(TestData.IsAvailable, TestData.SkipReason); + + var nest = TestData.LoadNest("30pcs Fill.zip"); + var drawing = nest.Drawings.First(); + var plate = TestData.CleanPlateFrom(nest.Plates[0]); + + var engine = new NestEngine(plate); + var sw = System.Diagnostics.Stopwatch.StartNew(); + engine.Fill(new NestItem { Drawing = drawing, Quantity = 0 }); + sw.Stop(); + + _output.WriteLine($"Parts: {plate.Parts.Count} | Time: {sw.ElapsedMilliseconds}ms"); + + Assert.True(plate.Parts.Count >= 32, + $"Expected >= 32 parts, got {plate.Parts.Count}"); + AssertNoOverlaps(plate.Parts.ToList()); + } + + private void AssertNoOverlaps(List parts) + { + for (var i = 0; i < parts.Count; i++) + { + for (var j = i + 1; j < parts.Count; j++) + { + if (parts[i].Intersects(parts[j], out _)) + Assert.Fail($"Overlap detected: part [{i}] vs [{j}]"); + } + } + } +} diff --git a/OpenNest.Test/OpenNest.Test.csproj b/OpenNest.Test/OpenNest.Test.csproj index ff9d623..14f45d1 100644 --- a/OpenNest.Test/OpenNest.Test.csproj +++ b/OpenNest.Test/OpenNest.Test.csproj @@ -12,6 +12,7 @@ +