Each engine's tests carried its own copy of the job/shape helpers and validation, and they had drifted: Gpt6Astra linked NestValidator.cs as source (which stopped compiling once the host moved its checks into NestLayoutCheck), the others referenced OpenNest.Benchmark. The kit provides JobBuilder, Shapes, LayoutAssert (backed by the host's public NestLayoutCheck) and EngineContractTests<TEngine>: quadrants, overflow, oversize parts, lower-number priority, etch marks, sequential plate indices, determinism, cancellation and stop reasons, for every engine. Co-Authored-By: Codex <noreply@openai.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
27 lines
1.1 KiB
C#
27 lines
1.1 KiB
C#
using OpenNest.CNC;
|
|
using OpenNest.Engine.Jobs;
|
|
using OpenNest.Geometry;
|
|
|
|
namespace OpenNest.Engine.Testing;
|
|
|
|
public static class JobBuilder
|
|
{
|
|
public static NestJob Job(NestJobPart[] parts, NestPlateStock[] stock, NestJobOptions? options = null) =>
|
|
new(parts, stock, options);
|
|
|
|
public static NestJobPart Part(string id, Program program, int quantity,
|
|
RotationPolicy? rotation = null, int priority = 0) =>
|
|
new(id, PartGeometrySnapshot.FromProgram(program), quantity, priority, rotation);
|
|
|
|
/// <param name="width">Y extent.</param>
|
|
/// <param name="length">X extent.</param>
|
|
public static NestPlateStock Stock(string id, double width, double length, double spacing = 0,
|
|
Spacing edge = default, int quadrant = 1, int? quantity = null) =>
|
|
new(id, new Size(width, length), quantity, spacing, edge, quadrant);
|
|
|
|
public static NestJobPart Rectangle(string id, double w, double h, int count,
|
|
RotationPolicy? rotation = null, double x = 0, double y = 0) =>
|
|
Part(id, Shapes.Polyline((x, y), (x + w, y), (x + w, y + h), (x, y + h)),
|
|
count, rotation ?? RotationPolicy.Fixed(0));
|
|
}
|