initial commit
This commit is contained in:
80
tests/TraceCad.Tests/GeometryTests.cs
Normal file
80
tests/TraceCad.Tests/GeometryTests.cs
Normal file
@@ -0,0 +1,80 @@
|
||||
using TraceCad.Core.Geometry;
|
||||
using TraceCad.Core.Model;
|
||||
using Xunit;
|
||||
|
||||
namespace TraceCad.Tests;
|
||||
|
||||
public sealed class GeometryTests
|
||||
{
|
||||
[Fact]
|
||||
public void LineLengthUsesMillimetres()
|
||||
{
|
||||
var line = new LineEntity(Guid.NewGuid(), Layer.Cut.Name, new Point2(0, 0), new Point2(3, 4));
|
||||
|
||||
Assert.Equal(5.0, line.Length, 9);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CircleFromThreePointsComputesCenterAndRadius()
|
||||
{
|
||||
var success = GeometryHelpers.TryCreateCircleFromThreePoints(
|
||||
new Point2(1, 0),
|
||||
new Point2(0, 1),
|
||||
new Point2(-1, 0),
|
||||
out var circle);
|
||||
|
||||
Assert.True(success);
|
||||
Assert.Equal(0.0, circle.Center.X, 9);
|
||||
Assert.Equal(0.0, circle.Center.Y, 9);
|
||||
Assert.Equal(1.0, circle.Radius, 9);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CircleFromCollinearPointsFails()
|
||||
{
|
||||
var success = GeometryHelpers.TryCreateCircleFromThreePoints(
|
||||
new Point2(0, 0),
|
||||
new Point2(1, 1),
|
||||
new Point2(2, 2),
|
||||
out _);
|
||||
|
||||
Assert.False(success);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ArcFromThreePointsPreservesPointOnCounterClockwiseSweep()
|
||||
{
|
||||
var success = GeometryHelpers.TryCreateArcFromThreePoints(
|
||||
new Point2(1, 0),
|
||||
new Point2(0, 1),
|
||||
new Point2(-1, 0),
|
||||
out var arc);
|
||||
|
||||
Assert.True(success);
|
||||
Assert.False(arc.IsClockwise);
|
||||
Assert.Equal(0.0, arc.StartAngleDeg, 9);
|
||||
Assert.Equal(180.0, arc.EndAngleDeg, 9);
|
||||
Assert.Equal(1.0, arc.Radius, 9);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ArcFromCollinearPointsFails()
|
||||
{
|
||||
var success = GeometryHelpers.TryCreateArcFromThreePoints(
|
||||
new Point2(0, 0),
|
||||
new Point2(5, 0),
|
||||
new Point2(10, 0),
|
||||
out _);
|
||||
|
||||
Assert.False(success);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(360, 0)]
|
||||
[InlineData(-90, 270)]
|
||||
[InlineData(725, 5)]
|
||||
public void AngleNormalizationWrapsToPositiveDegrees(double input, double expected)
|
||||
{
|
||||
Assert.Equal(expected, GeometryHelpers.NormalizeAngleDeg(input), 9);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user