using XFEEDToolBox.Core.Galaxy; using XFEEDToolBox.Core.Models; using XFEExtension.NetCore.XUnit.Attributes; namespace XFEEDToolBox.Test; [TestFixture] public class GalaxyCellQueryPlanTests { private static GalaxyCatalogueLodDescriptor Small(Coordinates centre)=>GalaxyOriginalCatalogueLod.Create(centre,1,500,.001,1,0); [Test] public void OriginalMassPackingRoundTripsEveryCellAndDoesNotTreatSystemOrdinalsAsCells() { for(var mass=0;mass<8;mass++) { var cell=GalaxyCellQueryPlan.Encode(mass,12,7,23); var system=cell|(99UL<<(44-3*mass)); Check.Equal(cell,GalaxyCellQueryPlan.CellAddress(system)); var box=GalaxyOriginalCatalogueLod.CellBounds(cell,new(0,0,0));var size=10d*(1<c.Address==0)&&!plan.Truncated); Check.That(new Coordinates(9,9,9).DistanceTo(lod.Centre)>lod.InnerRadius); Check.That(lod.IntersectsCell(0,new(0,0,0)),"Original loading retains the full cell; do not filter these stars by the small radius."); } [Test] public void OriginalCellFrustumDoesNotInheritTheToolsFourDistanceFarCutoff() { var camera=GalaxyCamera.Create(new(5,5,5),1600,900,0,0,4); var focus=new Coordinates(5,5,1005);var plan=new GalaxyCellQueryPlan(camera,Small(focus),new(0,0,0)); Check.That(camera.Project(focus).IsVisible&&!camera.ProjectForCatalogue(focus).IsVisible); Check.That(plan.Cells.Any(c=>c.Address==GalaxyCellQueryPlan.Encode(0,0,0,100))); } [Test] public void BehindEyeCellsAndZeroRadiusProduceNoRequestedCoverage() { var camera=GalaxyCamera.Create(new(0,0,0),1600,900,0,0,4);var origin=new Coordinates(10000,10000,10000); Check.Equal(0,new GalaxyCellQueryPlan(camera,Small(new(0,0,-2000)),origin).Cells.Count); var zero=GalaxyOriginalCatalogueLod.Create(new(0,0,0),1,500,0,1,0); var empty=new GalaxyCellQueryPlan(camera,zero,origin); Check.Equal(0,empty.Cells.Count);Check.That(!empty.Truncated); } [Test] public void SchedulingLimitsKeepOmissionsExplicitInsteadOfProvingFalseCoverage() { var camera=GalaxyCamera.Create(new(0,0,0),1600,900,0,0,4); var lod=GalaxyOriginalCatalogueLod.Create(new(0,0,0),0,500,1,1,4); var plan=new GalaxyCellQueryPlan(camera,lod,new(49985,40985,24105),maximumCells:1,maximumCandidates:1000000); Check.That(plan.Truncated&&plan.OmittedCandidates>0&&plan.Cells.Count==1); foreach(var cell in plan.Cells)Check.That(lod.IntersectsCell(cell.Bounds,cell.MassCode)&&GalaxyCellQueryPlan.IntersectsFrustum(camera,cell.Bounds)); } }