using System.Numerics; using System.Security.Cryptography; using XFEEDToolBox.Core.Galaxy; using XFEEDToolBox.Core.Rendering; using XFEExtension.NetCore.XUnit.Attributes; namespace XFEEDToolBox.Test; [TestFixture] public sealed class GalaxyBlackHoleTests { [Test] public void OnlyActualPhysicalTypesAndOriginalNavigationFlagEnableTheSeparateMaterial() { var physical=GalaxyOriginalSettings.Parse("",new(){ShowMarkers=false}).Filter; Check.That(!physical.ShowMarkers&&physical.ShowRoute&&GalaxyOriginalBlackHole.Enabled(41,physical.Mode==GalaxyMapMode.Realistic,physical.ShowRoute)); var noNavigation=GalaxyOriginalSettings.Parse("",new(){ShowMarkers=true}).Filter; Check.That(noNavigation.ShowMarkers&&!noNavigation.ShowRoute&&!GalaxyOriginalBlackHole.Enabled(42,noNavigation.Mode==GalaxyMapMode.Realistic,noNavigation.ShowRoute)); Check.That(GalaxyOriginalBlackHole.IsSpecial((ushort)(42|24<<10))&&!GalaxyOriginalBlackHole.IsSpecial(40)); Check.That(!GalaxyOriginalBlackHole.Enabled(41,false,true)&&!GalaxyOriginalBlackHole.Enabled(40,true,true)); } [Test] public void SourceTextureAndHalfSizeArePreservedWithoutAnEstimatedMinimum() { Check.Equal(GalaxyOriginalBlackHole.PayloadSha256,Convert.ToHexStringLower(SHA256.HashData(GalaxyOriginalBlackHole.Payload.Span))); Check.Equal(181248,GalaxyOriginalBlackHole.Payload.Length);Check.Equal(10,GalaxyOriginalBlackHole.Mips.Count); Check.Equal((float)(Half).7f,GalaxyOriginalBlackHole.HalfExtent(.7f)); Check.That(GalaxyOriginalBlackHole.HalfExtent(.00001f) is >0 and <.0001f); Check.Equal(0f,GalaxyOriginalBlackHole.HalfExtent(0));Check.Equal(0f,GalaxyOriginalBlackHole.HalfExtent(float.PositiveInfinity)); Check.Equal(0f,GalaxyOriginalBlackHole.HalfExtent(float.NaN));Check.Equal(0f,GalaxyOriginalBlackHole.HalfExtent(float.MaxValue)); } [Test] public void BlackHolePixelUsesSeparateChannelsSignedHdrAndUnclampedSourceAlpha() { var material=GalaxyOriginalBlackHole.Material(); var dark=GalaxyOriginalBlackHole.SourcePixel(Vector3.Zero,0,material,1f/256); Check.Equal(new Vector4(1f/256,1f/256,1f/256,0),dark); var bright=GalaxyOriginalBlackHole.SourcePixel(Vector3.One,0,material,1); Check.That(bright.X<0&&bright.Y<0&&bright.Z<0&&bright.W>1); var scaled=GalaxyOriginalBlackHole.SourcePixel(Vector3.One,0,material,1f/256); Check.Equal(bright.W,scaled.W);Check.Equal(bright.X/256,scaled.X); var red=GalaxyOriginalBlackHole.SourcePixel(new(1,0,0),0,material,1); Check.That(red.X<0&&red.Y==1&&red.Z==1&&red.W>0); Check.Equal(new Vector4(1,4,1,0),GalaxyOriginalBlackHole.Material(true)); } }