using System.Runtime.InteropServices;
namespace XFEEDToolBox.Plugin;
internal static unsafe partial class Navigation
{
static uint GalaxyColonisationHighlightSelfTest()
{
var memory=Platform.Allocate(0x6000000);if(memory==0)return 0;
try
{
var expected=memory;var provider=memory+0x1000;var navigation=memory+0x2000;var centre=memory+0x3000;var candidate=memory+0x4000;
var centreCompact=memory+0x5000;var candidateCompact=memory+0x6000;const ulong centreAddress=9007199254740995,address=centreAddress+(1UL<<50);
Write(provider,expected+0x552D920);Write(expected+0x552D920+0x20,expected+0x3B3E650);Write(expected+0x552D920+0x50,expected+0x3B26B30);
Write(provider+0x160,navigation);Write(provider+0x178,centre);Write(provider+0x1A0,4f);
Write(provider+0x11C,.3f);Write(provider+0x120,1f);Write(provider+0x124,.2f);
Write(navigation,expected+0x552A9B8);Write(expected+0x552A9B8+0x50,expected+0x21E8CB0);Write(navigation+0x2B0,centre);
Write(centre+0x20,2U);Write(centre+0x28,centreAddress);Write(centre+0x38,centreCompact);Write(centreCompact,centreAddress);
Write(candidate+0x20,2U);Write(candidate+0x28,address);Write(candidate+0x38,candidateCompact);Write(candidateCompact,address);
Write(centreCompact+0x42,(ushort)64);Write(centreCompact+0x44,(ushort)96);Write(centreCompact+0x46,(ushort)128);
Write(candidateCompact+0x42,(ushort)128);Write(candidateCompact+0x44,(ushort)96);Write(candidateCompact+0x46,(ushort)128);
var before=Platform.ReadBytes(provider,0x6000);uint passed=0;
bool Copy(int status,out GalaxyColonisationHighlight? value)=>CopyGalaxyColonisationHighlight(provider,navigation,candidate,expected,address,status,out value);
if(Copy(0,out var edge)&&edge is{eligibilityStatus:0,distanceSquared:4,radiusSquared:4}&&edge.centreSystemAddress==centreAddress&&edge.rawRgb.SequenceEqual(new[]{.3f,1f,.2f}))passed|=1;
if(Copy(5,out var excluded)&&excluded is{eligibilityStatus:5}&&!Copy(12,out _))passed|=2;
Write(candidateCompact+0x42,(ushort)129);if(Copy(0,out var outside)&&outside!.distanceSquared>outside.radiusSquared)passed|=4;Write(candidateCompact+0x42,(ushort)128);
Write(centre+0x20,1U);var pending=!Copy(0,out _);Write(centre+0x20,2U);Write(provider+0x178,(nuint)0);
if(pending&&!Copy(0,out _))passed|=8;Write(provider+0x178,centre);
Write(expected+0x552D920+0x50,expected+0x3B26B31);if(!Copy(0,out _))passed|=16;Write(expected+0x552D920+0x50,expected+0x3B26B30);
Write(navigation+0x2B0,candidate);var stale=!Copy(0,out _);Write(navigation+0x2B0,centre);Write(candidateCompact,address+1);
if(stale&&!Copy(0,out _))passed|=32;Write(candidateCompact,address);
Write(provider+0x1A0,float.NaN);var nan=!Copy(0,out _);Write(provider+0x1A0,-1f);var negative=!Copy(0,out _);Write(provider+0x1A0,4f);
Write(provider+0x120,float.PositiveInfinity);if(nan&&negative&&!Copy(0,out _))passed|=64;Write(provider+0x120,1f);
if(Copy(0,out _)&&Platform.ReadBytes(provider,0x6000).AsSpan().SequenceEqual(before)&&
GalaxyColonisationHighlightDescription(edge)?["centreSystemAddress"]?.GetValue<string>()==centreAddress.ToString()&&GalaxyColonisationHighlightDescription(null) is null)passed|=128;
return passed;
}
finally{Platform.Free(memory);}
}
#if PLUGIN_NAVIGATION
[UnmanagedCallersOnly(EntryPoint="XFENavigationGalaxyColonisationHighlightSelfTest")]
internal static uint ExportGalaxyColonisationHighlightSelfTest()=>RunTest(GalaxyColonisationHighlightSelfTest);
#endif
}
using System.Runtime.InteropServices;
namespace XFEEDToolBox.Plugin;
internal static unsafe partial class Navigation
{
static uint GalaxyColonisationHighlightSelfTest()
{
var memory=Platform.Allocate(0x6000000);if(memory==0)return 0;
try
{
var expected=memory;var provider=memory+0x1000;var navigation=memory+0x2000;var centre=memory+0x3000;var candidate=memory+0x4000;
var centreCompact=memory+0x5000;var candidateCompact=memory+0x6000;const ulong centreAddress=9007199254740995,address=centreAddress+(1UL<<50);
Write(provider,expected+0x552D920);Write(expected+0x552D920+0x20,expected+0x3B3E650);Write(expected+0x552D920+0x50,expected+0x3B26B30);
Write(provider+0x160,navigation);Write(provider+0x178,centre);Write(provider+0x1A0,4f);
Write(provider+0x11C,.3f);Write(provider+0x120,1f);Write(provider+0x124,.2f);
Write(navigation,expected+0x552A9B8);Write(expected+0x552A9B8+0x50,expected+0x21E8CB0);Write(navigation+0x2B0,centre);
Write(centre+0x20,2U);Write(centre+0x28,centreAddress);Write(centre+0x38,centreCompact);Write(centreCompact,centreAddress);
Write(candidate+0x20,2U);Write(candidate+0x28,address);Write(candidate+0x38,candidateCompact);Write(candidateCompact,address);
Write(centreCompact+0x42,(ushort)64);Write(centreCompact+0x44,(ushort)96);Write(centreCompact+0x46,(ushort)128);
Write(candidateCompact+0x42,(ushort)128);Write(candidateCompact+0x44,(ushort)96);Write(candidateCompact+0x46,(ushort)128);
var before=Platform.ReadBytes(provider,0x6000);uint passed=0;
bool Copy(int status,out GalaxyColonisationHighlight? value)=>CopyGalaxyColonisationHighlight(provider,navigation,candidate,expected,address,status,out value);
if(Copy(0,out var edge)&&edge is{eligibilityStatus:0,distanceSquared:4,radiusSquared:4}&&edge.centreSystemAddress==centreAddress&&edge.rawRgb.SequenceEqual(new[]{.3f,1f,.2f}))passed|=1;
if(Copy(5,out var excluded)&&excluded is{eligibilityStatus:5}&&!Copy(12,out _))passed|=2;
Write(candidateCompact+0x42,(ushort)129);if(Copy(0,out var outside)&&outside!.distanceSquared>outside.radiusSquared)passed|=4;Write(candidateCompact+0x42,(ushort)128);
Write(centre+0x20,1U);var pending=!Copy(0,out _);Write(centre+0x20,2U);Write(provider+0x178,(nuint)0);
if(pending&&!Copy(0,out _))passed|=8;Write(provider+0x178,centre);
Write(expected+0x552D920+0x50,expected+0x3B26B31);if(!Copy(0,out _))passed|=16;Write(expected+0x552D920+0x50,expected+0x3B26B30);
Write(navigation+0x2B0,candidate);var stale=!Copy(0,out _);Write(navigation+0x2B0,centre);Write(candidateCompact,address+1);
if(stale&&!Copy(0,out _))passed|=32;Write(candidateCompact,address);
Write(provider+0x1A0,float.NaN);var nan=!Copy(0,out _);Write(provider+0x1A0,-1f);var negative=!Copy(0,out _);Write(provider+0x1A0,4f);
Write(provider+0x120,float.PositiveInfinity);if(nan&&negative&&!Copy(0,out _))passed|=64;Write(provider+0x120,1f);
if(Copy(0,out _)&&Platform.ReadBytes(provider,0x6000).AsSpan().SequenceEqual(before)&&
GalaxyColonisationHighlightDescription(edge)?["centreSystemAddress"]?.GetValue<string>()==centreAddress.ToString()&&GalaxyColonisationHighlightDescription(null) is null)passed|=128;
return passed;
}
finally{Platform.Free(memory);}
}
#if PLUGIN_NAVIGATION
[UnmanagedCallersOnly(EntryPoint="XFENavigationGalaxyColonisationHighlightSelfTest")]
internal static uint ExportGalaxyColonisationHighlightSelfTest()=>RunTest(GalaxyColonisationHighlightSelfTest);
#endif
}