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); } }