using XFEEDToolBox.Core.Galaxy;
using XFEEDToolBox.Core.Models;
using XFEExtension.NetCore.XUnit.Attributes;
namespace XFEEDToolBox.Test;
[TestFixture]
public class GalaxyCatalogueSelectionTests
{
[Test] public void FiniteEnvelopeRetainsWholeCellsBeyondFourDistancesWithTheSameInfiniteLens()
{
var centre = new Coordinates(5, 5, 1005); var origin = new Coordinates(0, 0, 0);
var selection = new GalaxyCatalogueSelection(GalaxyOriginalCatalogueLod.Create(centre, 1, 500, .001, 1, 0), origin);
var camera = GalaxyCamera.Create(new(5, 5, 5), 1600, 900, 0, 0, 4);
var far = new GalacticSystem("Whole edge cell", new(9, 9, 1009), (long)(GalaxyCellQueryPlan.Encode(0, 0, 0, 100) | (1UL << 44)));
var selected = selection.ApplyTo(camera);
Check.That(selection.Contains(far) && !camera.ProjectForCatalogue(far.Position).IsVisible && selected.ProjectForCatalogue(far.Position).IsVisible);
Check.That(far.Position.DistanceTo(centre) > selection.Descriptor.InnerRadius);
Check.Equal(camera.Project(far.Position), selected.Project(far.Position));
Check.That(double.IsPositiveInfinity(selected.ProjectionFar) && double.IsFinite(selected.QueryFar));
Check.That(!selection.Contains(far with { SystemAddress = (long)(GalaxyCellQueryPlan.Encode(0, 10, 10, 10) | (1UL << 44)) }));
}
[Test] public void AllSelectedCellCornersFitTheEnvelopeAndTheBaseCameraRemainsUnchanged()
{
var origin = new Coordinates(49985, 40985, 24105);
var camera = GalaxyCamera.Create(new(0, 0, 0), 1600, 900, .3, -.2, 4);
var lod = GalaxyOriginalCatalogueLod.Create(new(0, 0, 0), 1, 500, 1, 1, 0);
var scoped = new GalaxyCatalogueSelection(lod, origin).ApplyTo(camera);
foreach (var cell in new GalaxyCellQueryPlan(camera, lod, origin).Cells)
foreach (var x in new[] { cell.Bounds.Minimum.X, cell.Bounds.Maximum.X })
foreach (var y in new[] { cell.Bounds.Minimum.Y, cell.Bounds.Maximum.Y })
foreach (var z in new[] { cell.Bounds.Minimum.Z, cell.Bounds.Maximum.Z })
Check.That(scoped.Project(new(x, y, z)).Depth <= scoped.QueryFar);
Check.Equal(camera.Distance * 4, camera.QueryFar);
}
}
using XFEEDToolBox.Core.Galaxy;
using XFEEDToolBox.Core.Models;
using XFEExtension.NetCore.XUnit.Attributes;
namespace XFEEDToolBox.Test;
[TestFixture]
public class GalaxyCatalogueSelectionTests
{
[Test] public void FiniteEnvelopeRetainsWholeCellsBeyondFourDistancesWithTheSameInfiniteLens()
{
var centre = new Coordinates(5, 5, 1005); var origin = new Coordinates(0, 0, 0);
var selection = new GalaxyCatalogueSelection(GalaxyOriginalCatalogueLod.Create(centre, 1, 500, .001, 1, 0), origin);
var camera = GalaxyCamera.Create(new(5, 5, 5), 1600, 900, 0, 0, 4);
var far = new GalacticSystem("Whole edge cell", new(9, 9, 1009), (long)(GalaxyCellQueryPlan.Encode(0, 0, 0, 100) | (1UL << 44)));
var selected = selection.ApplyTo(camera);
Check.That(selection.Contains(far) && !camera.ProjectForCatalogue(far.Position).IsVisible && selected.ProjectForCatalogue(far.Position).IsVisible);
Check.That(far.Position.DistanceTo(centre) > selection.Descriptor.InnerRadius);
Check.Equal(camera.Project(far.Position), selected.Project(far.Position));
Check.That(double.IsPositiveInfinity(selected.ProjectionFar) && double.IsFinite(selected.QueryFar));
Check.That(!selection.Contains(far with { SystemAddress = (long)(GalaxyCellQueryPlan.Encode(0, 10, 10, 10) | (1UL << 44)) }));
}
[Test] public void AllSelectedCellCornersFitTheEnvelopeAndTheBaseCameraRemainsUnchanged()
{
var origin = new Coordinates(49985, 40985, 24105);
var camera = GalaxyCamera.Create(new(0, 0, 0), 1600, 900, .3, -.2, 4);
var lod = GalaxyOriginalCatalogueLod.Create(new(0, 0, 0), 1, 500, 1, 1, 0);
var scoped = new GalaxyCatalogueSelection(lod, origin).ApplyTo(camera);
foreach (var cell in new GalaxyCellQueryPlan(camera, lod, origin).Cells)
foreach (var x in new[] { cell.Bounds.Minimum.X, cell.Bounds.Maximum.X })
foreach (var y in new[] { cell.Bounds.Minimum.Y, cell.Bounds.Maximum.Y })
foreach (var z in new[] { cell.Bounds.Minimum.Z, cell.Bounds.Maximum.Z })
Check.That(scoped.Project(new(x, y, z)).Depth <= scoped.QueryFar);
Check.Equal(camera.Distance * 4, camera.QueryFar);
}
}