acdream/tests/AcDream.App.Tests/Rendering/PortalViewTests.cs
Erik 406307e8ee feat(render): Phase A8.F — ViewPolygon + CellView clip-region data model
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-29 11:30:28 +02:00

52 lines
1.6 KiB
C#

using System.Numerics;
using AcDream.App.Rendering;
using Xunit;
namespace AcDream.App.Tests.Rendering;
public class PortalViewTests
{
[Fact]
public void ViewPolygon_ComputesBoundingRect()
{
var p = new ViewPolygon(new[]
{
new Vector2(-0.5f, -0.25f), new Vector2(0.5f, -0.25f), new Vector2(0.0f, 0.75f),
});
Assert.Equal(-0.5f, p.MinX, 5);
Assert.Equal(0.5f, p.MaxX, 5);
Assert.Equal(-0.25f, p.MinY, 5);
Assert.Equal(0.75f, p.MaxY, 5);
Assert.False(p.IsEmpty);
}
[Fact]
public void ViewPolygon_FewerThanThreeVerts_IsEmpty()
{
Assert.True(new ViewPolygon(new[] { new Vector2(0, 0), new Vector2(1, 0) }).IsEmpty);
Assert.True(new ViewPolygon(System.Array.Empty<Vector2>()).IsEmpty);
}
[Fact]
public void CellView_FullScreen_CoversNdc()
{
var v = CellView.FullScreen();
Assert.False(v.IsEmpty);
Assert.Equal(-1f, v.MinX, 5);
Assert.Equal(1f, v.MaxX, 5);
Assert.Equal(-1f, v.MinY, 5);
Assert.Equal(1f, v.MaxY, 5);
}
[Fact]
public void CellView_Add_GrowsUnionBoundsAndIsEmptyTracks()
{
var v = new CellView();
Assert.True(v.IsEmpty);
v.Add(new ViewPolygon(new[] { new Vector2(0, 0), new Vector2(0.2f, 0), new Vector2(0, 0.2f) }));
v.Add(new ViewPolygon(new[] { new Vector2(-0.3f, -0.3f), new Vector2(-0.1f, -0.3f), new Vector2(-0.1f, -0.1f) }));
Assert.False(v.IsEmpty);
Assert.Equal(-0.3f, v.MinX, 5);
Assert.Equal(0.2f, v.MaxX, 5);
}
}