Files
OpenNest/OpenNest.Tests/NestProgressTests.cs
AJ Isaacs ccd402c50f refactor: simplify NestProgress with computed properties and ProgressReport struct
Replace stored property setters (BestPartCount, BestDensity, NestedWidth,
NestedLength, NestedArea) with computed properties that derive values from
BestParts, with a lazy cache invalidated on setter. Add internal
ProgressReport struct to replace the 7-parameter ReportProgress signature.
Update all 13 callsites and AccumulatingProgress. Delete FormatPhaseName
in favor of NestPhase.ShortName() extension.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 19:44:45 -04:00

101 lines
2.8 KiB
C#

using OpenNest.Geometry;
namespace OpenNest.Tests;
public class NestProgressTests
{
[Fact]
public void BestPartCount_NullParts_ReturnsZero()
{
var progress = new NestProgress { BestParts = null };
Assert.Equal(0, progress.BestPartCount);
}
[Fact]
public void BestPartCount_ReturnsBestPartsCount()
{
var parts = new List<Part>
{
TestHelpers.MakePartAt(0, 0, 5),
TestHelpers.MakePartAt(10, 0, 5),
};
var progress = new NestProgress { BestParts = parts };
Assert.Equal(2, progress.BestPartCount);
}
[Fact]
public void BestDensity_NullParts_ReturnsZero()
{
var progress = new NestProgress { BestParts = null };
Assert.Equal(0, progress.BestDensity);
}
[Fact]
public void BestDensity_MatchesFillScoreFormula()
{
var parts = new List<Part>
{
TestHelpers.MakePartAt(0, 0, 5),
TestHelpers.MakePartAt(5, 0, 5),
};
var workArea = new Box(0, 0, 100, 100);
var progress = new NestProgress { BestParts = parts, ActiveWorkArea = workArea };
Assert.Equal(1.0, progress.BestDensity, precision: 4);
}
[Fact]
public void NestedWidth_ReturnsPartsSpan()
{
var parts = new List<Part>
{
TestHelpers.MakePartAt(0, 0, 5),
TestHelpers.MakePartAt(10, 0, 5),
};
var progress = new NestProgress { BestParts = parts };
Assert.Equal(15, progress.NestedWidth, precision: 4);
}
[Fact]
public void NestedLength_ReturnsPartsSpan()
{
var parts = new List<Part>
{
TestHelpers.MakePartAt(0, 0, 5),
TestHelpers.MakePartAt(0, 10, 5),
};
var progress = new NestProgress { BestParts = parts };
Assert.Equal(15, progress.NestedLength, precision: 4);
}
[Fact]
public void NestedArea_ReturnsSumOfPartAreas()
{
var parts = new List<Part>
{
TestHelpers.MakePartAt(0, 0, 5),
TestHelpers.MakePartAt(10, 0, 5),
};
var progress = new NestProgress { BestParts = parts };
Assert.Equal(50, progress.NestedArea, precision: 4);
}
[Fact]
public void SettingBestParts_InvalidatesCache()
{
var parts1 = new List<Part> { TestHelpers.MakePartAt(0, 0, 5) };
var parts2 = new List<Part>
{
TestHelpers.MakePartAt(0, 0, 5),
TestHelpers.MakePartAt(10, 0, 5),
};
var progress = new NestProgress { BestParts = parts1 };
Assert.Equal(1, progress.BestPartCount);
Assert.Equal(25, progress.NestedArea, precision: 4);
progress.BestParts = parts2;
Assert.Equal(2, progress.BestPartCount);
Assert.Equal(50, progress.NestedArea, precision: 4);
}
}