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("<Root><RealisticView Value='0'/><NavigationMarkers Value='1'/></Root>",new(){ShowMarkers=false}).Filter;
Check.That(!physical.ShowMarkers&&physical.ShowRoute&&GalaxyOriginalBlackHole.Enabled(41,physical.Mode==GalaxyMapMode.Realistic,physical.ShowRoute));
var noNavigation=GalaxyOriginalSettings.Parse("<Root><RealisticView Value='0'/><NavigationMarkers Value='0'/></Root>",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));
}
}
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("<Root><RealisticView Value='0'/><NavigationMarkers Value='1'/></Root>",new(){ShowMarkers=false}).Filter;
Check.That(!physical.ShowMarkers&&physical.ShowRoute&&GalaxyOriginalBlackHole.Enabled(41,physical.Mode==GalaxyMapMode.Realistic,physical.ShowRoute));
var noNavigation=GalaxyOriginalSettings.Parse("<Root><RealisticView Value='0'/><NavigationMarkers Value='0'/></Root>",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));
}
}