using System.Runtime.InteropServices;
namespace XFEEDToolBox.Plugin;
internal static unsafe partial class Navigation
{
static uint GalaxyCatalogueQualitySelfTest()
{
var memory=Platform.Allocate(0x20000);if(memory==0)return 0;
try
{
var expectedImage=memory+0x10000-0x52EC988;var owner=memory+0x1000;var source=owner+0x950;
var controller=memory+0x4000;var selector=owner+0x640;var vector=memory+0x6000;
var first=memory+0x7000;var second=memory+0x8000;
Write(source,expectedImage+0x52EC988);Write(expectedImage+0x52EC988,expectedImage+0x2840BD0);
Write(expectedImage+0x52EC988+0xA0,expectedImage+0x2843C10);
Write(source+0x880,controller);Write(controller,expectedImage+0x52EC1B0);
Write(expectedImage+0x52EC1B0+0x10,expectedImage+0x2843710);Write(controller+0x248,owner);
Write(owner+0x60,expectedImage+0x52EC798);Write(expectedImage+0x52EC798+0xB8,expectedImage+0x2841250);
Write(selector,expectedImage+0x52F66B8);Write(selector+8,1u);Write(selector+0x20,2u);Write(selector+0x28,vector);
Write(vector,first);Write(vector+8,second);Write(first+0x3C,100u);Write(second+0x3C,100000u);
bool Copy(out uint value)=>CopyGalaxyCatalogueQuality(source,expectedImage,out value);
uint passed=0;
if(Copy(out var stars)&&stars==100000)passed|=1;
Write(second+0x3C,0u);var exact=Copy(out stars)&&stars==0;
Write(second+0x3C,uint.MaxValue);exact&=Copy(out stars)&&stars==uint.MaxValue;Write(second+0x3C,100000u);
if(exact)passed|=2;
Write(selector+0x20,65u);var bounds=!Copy(out _);Write(selector+0x20,2u);Write(selector+8,2u);
bounds&=!Copy(out _);Write(selector+8,1u);Write(selector+0x20,0u);bounds&=!Copy(out _);Write(selector+0x20,2u);if(bounds)passed|=4;
Write(controller+0x248,owner+8);var identity=!Copy(out _);Write(controller+0x248,owner);
Write(source+0x880,(nuint)0);identity&=!Copy(out _);Write(source+0x880,controller);if(identity)passed|=8;
var tables=true;
foreach(var (at,table) in new[]{(source,expectedImage+0x52EC988),(controller,expectedImage+0x52EC1B0),(owner+0x60,expectedImage+0x52EC798),(selector,expectedImage+0x52F66B8)})
{Write(at,table+8);tables&=!Copy(out _);Write(at,table);}
if(tables)passed|=16;
var slots=true;
foreach(var (at,getter) in new[]{(expectedImage+0x52EC988,expectedImage+0x2840BD0),(expectedImage+0x52EC988+0xA0,expectedImage+0x2843C10),
(expectedImage+0x52EC1B0+0x10,expectedImage+0x2843710),(expectedImage+0x52EC798+0xB8,expectedImage+0x2841250)})
{Write(at,getter+1);slots&=!Copy(out _);Write(at,getter);}
if(slots)passed|=32;
Write(selector+0x28,(nuint)0);var missing=!Copy(out _);Write(selector+0x28,vector);
Write(vector+8,(nuint)0);missing&=!Copy(out _);Write(vector+8,second);if(missing)passed|=64;
var before=Platform.ReadBytes(memory,0x20000);
if(Copy(out stars)&&stars==100000&&!CopyGalaxyCatalogueQuality(source,expectedImage+8,out _)&&
!CopyGalaxyCatalogueQuality(0,expectedImage,out _)&&Platform.ReadBytes(memory,0x20000).AsSpan().SequenceEqual(before))passed|=128;
return passed;
}
finally{Platform.Free(memory);}
}
#if PLUGIN_NAVIGATION
[UnmanagedCallersOnly(EntryPoint="XFENavigationGalaxyCatalogueQualitySelfTest")]
internal static uint ExportGalaxyCatalogueQualitySelfTest()=>RunTest(GalaxyCatalogueQualitySelfTest);
#endif
}
using System.Runtime.InteropServices;
namespace XFEEDToolBox.Plugin;
internal static unsafe partial class Navigation
{
static uint GalaxyCatalogueQualitySelfTest()
{
var memory=Platform.Allocate(0x20000);if(memory==0)return 0;
try
{
var expectedImage=memory+0x10000-0x52EC988;var owner=memory+0x1000;var source=owner+0x950;
var controller=memory+0x4000;var selector=owner+0x640;var vector=memory+0x6000;
var first=memory+0x7000;var second=memory+0x8000;
Write(source,expectedImage+0x52EC988);Write(expectedImage+0x52EC988,expectedImage+0x2840BD0);
Write(expectedImage+0x52EC988+0xA0,expectedImage+0x2843C10);
Write(source+0x880,controller);Write(controller,expectedImage+0x52EC1B0);
Write(expectedImage+0x52EC1B0+0x10,expectedImage+0x2843710);Write(controller+0x248,owner);
Write(owner+0x60,expectedImage+0x52EC798);Write(expectedImage+0x52EC798+0xB8,expectedImage+0x2841250);
Write(selector,expectedImage+0x52F66B8);Write(selector+8,1u);Write(selector+0x20,2u);Write(selector+0x28,vector);
Write(vector,first);Write(vector+8,second);Write(first+0x3C,100u);Write(second+0x3C,100000u);
bool Copy(out uint value)=>CopyGalaxyCatalogueQuality(source,expectedImage,out value);
uint passed=0;
if(Copy(out var stars)&&stars==100000)passed|=1;
Write(second+0x3C,0u);var exact=Copy(out stars)&&stars==0;
Write(second+0x3C,uint.MaxValue);exact&=Copy(out stars)&&stars==uint.MaxValue;Write(second+0x3C,100000u);
if(exact)passed|=2;
Write(selector+0x20,65u);var bounds=!Copy(out _);Write(selector+0x20,2u);Write(selector+8,2u);
bounds&=!Copy(out _);Write(selector+8,1u);Write(selector+0x20,0u);bounds&=!Copy(out _);Write(selector+0x20,2u);if(bounds)passed|=4;
Write(controller+0x248,owner+8);var identity=!Copy(out _);Write(controller+0x248,owner);
Write(source+0x880,(nuint)0);identity&=!Copy(out _);Write(source+0x880,controller);if(identity)passed|=8;
var tables=true;
foreach(var (at,table) in new[]{(source,expectedImage+0x52EC988),(controller,expectedImage+0x52EC1B0),(owner+0x60,expectedImage+0x52EC798),(selector,expectedImage+0x52F66B8)})
{Write(at,table+8);tables&=!Copy(out _);Write(at,table);}
if(tables)passed|=16;
var slots=true;
foreach(var (at,getter) in new[]{(expectedImage+0x52EC988,expectedImage+0x2840BD0),(expectedImage+0x52EC988+0xA0,expectedImage+0x2843C10),
(expectedImage+0x52EC1B0+0x10,expectedImage+0x2843710),(expectedImage+0x52EC798+0xB8,expectedImage+0x2841250)})
{Write(at,getter+1);slots&=!Copy(out _);Write(at,getter);}
if(slots)passed|=32;
Write(selector+0x28,(nuint)0);var missing=!Copy(out _);Write(selector+0x28,vector);
Write(vector+8,(nuint)0);missing&=!Copy(out _);Write(vector+8,second);if(missing)passed|=64;
var before=Platform.ReadBytes(memory,0x20000);
if(Copy(out stars)&&stars==100000&&!CopyGalaxyCatalogueQuality(source,expectedImage+8,out _)&&
!CopyGalaxyCatalogueQuality(0,expectedImage,out _)&&Platform.ReadBytes(memory,0x20000).AsSpan().SequenceEqual(before))passed|=128;
return passed;
}
finally{Platform.Free(memory);}
}
#if PLUGIN_NAVIGATION
[UnmanagedCallersOnly(EntryPoint="XFENavigationGalaxyCatalogueQualitySelfTest")]
internal static uint ExportGalaxyCatalogueQualitySelfTest()=>RunTest(GalaxyCatalogueQualitySelfTest);
#endif
}