using System.Runtime.InteropServices;
namespace XFEEDToolBox.Plugin;
internal static unsafe partial class Navigation
{
static uint GalaxyBasicSystemFactsSelfTest()
{
var memory=Platform.Allocate(0x10000);if(memory==0)return 0;
try
{
var expectedImage=unchecked((nuint)0x140000000UL);var metadata=memory+0x1000;
var firstBucket=memory+0x2000;var secondBucket=memory+0x2100;var node=memory+0x3000;var descriptor=node+0x10;
const ulong address=9007199254740995UL;
void Map(nuint map,nuint bucket,nuint at)
{Write(map,bucket);Write(map+8,1UL);Write(map+0x18,at==0?0UL:1UL);Write(bucket,at==0?bucket:at);if(at!=0){Write(at,bucket);Write(at+8,address);}}
Write(metadata,expectedImage+0x551A1B0);Write(metadata-0x18,(byte)0);Write(metadata+0x108,(byte)0);
Map(metadata+0xA8,firstBucket,node);Map(metadata+0xC8,secondBucket,0);
Write(descriptor+8,9007199254740997UL);Write(descriptor+0x18,4u);Write(descriptor+0x1C,17u);
Write(descriptor+0x20,4u);Write(descriptor+0x24,6u);Write(descriptor+0x30,9007199254740999UL);Write(descriptor+0x3A,(byte)79);
var context=new GalaxyFilterContext{expectedImage=expectedImage,metadata=metadata};uint passed=0;
bool Copy(out GalaxyBasicSystemFact? value)=>CopyGalaxyBasicSystemFacts(context,address,out value);
if(Copy(out var fact)&&fact is{population:9007199254740999UL,governmentId:4,primaryEconomyId:4,secondaryEconomyId:6,factionStateId:17,
allegianceId:9007199254740997UL,securityValue:79,defaulted:false})passed|=1;
Write(descriptor+0x30,0UL);Write(descriptor+0x18,1u);Write(descriptor+0x20,1u);Write(descriptor+0x24,1u);Write(descriptor+0x1C,0u);
if(Copy(out fact)&&fact is{population:0,governmentId:1,primaryEconomyId:1,secondaryEconomyId:1,factionStateId:0})passed|=2;
Map(metadata+0xA8,firstBucket,0);var pending=Copy(out fact)&&fact is null;
Write(metadata-0x18,(byte)1);pending&=Copy(out fact)&&fact is null;
Write(metadata-0x18,(byte)0);Write(metadata+0x108,(byte)1);pending&=Copy(out fact)&&fact is null;
Write(metadata-0x18,(byte)1);var emptyBefore=Platform.ReadBytes(memory,0x10000);
if(pending&&Copy(out fact)&&fact is{defaulted:true,population:0,governmentId:1,primaryEconomyId:1,secondaryEconomyId:1,
factionStateId:0,allegianceId:ulong.MaxValue,securityValue:0,allegianceKey:"None"}&&
Platform.ReadBytes(memory,0x10000).AsSpan().SequenceEqual(emptyBefore))passed|=4;
Map(metadata+0xC8,secondBucket,node);Write(descriptor+0x18,4u);Write(descriptor+0x30,123UL);
if(Copy(out fact)&&fact is{defaulted:false,governmentId:4,population:123})passed|=8;
Write(node,node);var malformed=!CopyGalaxyBasicSystemFacts(context,address+1,out _);Write(node,secondBucket);
Map(metadata+0xC8,secondBucket,0);Write(firstBucket,(nuint)1);malformed&=!Copy(out _);Write(firstBucket,firstBucket);
Map(metadata+0xC8,secondBucket,node);
Write(metadata,expectedImage+0x551A1B8);malformed&=!Copy(out _);Write(metadata,expectedImage+0x551A1B0);if(malformed)passed|=16;
Write(descriptor+0x18,uint.MaxValue);Write(descriptor+0x1C,40u);Write(descriptor+0x20,29u);Write(descriptor+0x24,28u);
if(Copy(out fact)&&fact is{governmentId:uint.MaxValue,factionStateId:40,primaryEconomyId:29,secondaryEconomyId:28})passed|=32;
Write(descriptor+0x30,ulong.MaxValue);Write(descriptor+8,ulong.MaxValue);
if(Copy(out fact)&&fact is{population:ulong.MaxValue,allegianceId:ulong.MaxValue})passed|=64;
var before=Platform.ReadBytes(memory,0x10000);
if(Copy(out fact)&&fact is not null&&!CopyGalaxyBasicSystemFacts(context,0,out _)&&
!CopyGalaxyBasicSystemFacts(context,1UL<<55,out _)&&Platform.ReadBytes(memory,0x10000).AsSpan().SequenceEqual(before))passed|=128;
return passed;
}
finally{Platform.Free(memory);}
}
#if PLUGIN_NAVIGATION
[UnmanagedCallersOnly(EntryPoint="XFENavigationGalaxyBasicSystemFactsSelfTest")]
internal static uint ExportGalaxyBasicSystemFactsSelfTest()=>RunTest(GalaxyBasicSystemFactsSelfTest);
#endif
}
using System.Runtime.InteropServices;
namespace XFEEDToolBox.Plugin;
internal static unsafe partial class Navigation
{
static uint GalaxyBasicSystemFactsSelfTest()
{
var memory=Platform.Allocate(0x10000);if(memory==0)return 0;
try
{
var expectedImage=unchecked((nuint)0x140000000UL);var metadata=memory+0x1000;
var firstBucket=memory+0x2000;var secondBucket=memory+0x2100;var node=memory+0x3000;var descriptor=node+0x10;
const ulong address=9007199254740995UL;
void Map(nuint map,nuint bucket,nuint at)
{Write(map,bucket);Write(map+8,1UL);Write(map+0x18,at==0?0UL:1UL);Write(bucket,at==0?bucket:at);if(at!=0){Write(at,bucket);Write(at+8,address);}}
Write(metadata,expectedImage+0x551A1B0);Write(metadata-0x18,(byte)0);Write(metadata+0x108,(byte)0);
Map(metadata+0xA8,firstBucket,node);Map(metadata+0xC8,secondBucket,0);
Write(descriptor+8,9007199254740997UL);Write(descriptor+0x18,4u);Write(descriptor+0x1C,17u);
Write(descriptor+0x20,4u);Write(descriptor+0x24,6u);Write(descriptor+0x30,9007199254740999UL);Write(descriptor+0x3A,(byte)79);
var context=new GalaxyFilterContext{expectedImage=expectedImage,metadata=metadata};uint passed=0;
bool Copy(out GalaxyBasicSystemFact? value)=>CopyGalaxyBasicSystemFacts(context,address,out value);
if(Copy(out var fact)&&fact is{population:9007199254740999UL,governmentId:4,primaryEconomyId:4,secondaryEconomyId:6,factionStateId:17,
allegianceId:9007199254740997UL,securityValue:79,defaulted:false})passed|=1;
Write(descriptor+0x30,0UL);Write(descriptor+0x18,1u);Write(descriptor+0x20,1u);Write(descriptor+0x24,1u);Write(descriptor+0x1C,0u);
if(Copy(out fact)&&fact is{population:0,governmentId:1,primaryEconomyId:1,secondaryEconomyId:1,factionStateId:0})passed|=2;
Map(metadata+0xA8,firstBucket,0);var pending=Copy(out fact)&&fact is null;
Write(metadata-0x18,(byte)1);pending&=Copy(out fact)&&fact is null;
Write(metadata-0x18,(byte)0);Write(metadata+0x108,(byte)1);pending&=Copy(out fact)&&fact is null;
Write(metadata-0x18,(byte)1);var emptyBefore=Platform.ReadBytes(memory,0x10000);
if(pending&&Copy(out fact)&&fact is{defaulted:true,population:0,governmentId:1,primaryEconomyId:1,secondaryEconomyId:1,
factionStateId:0,allegianceId:ulong.MaxValue,securityValue:0,allegianceKey:"None"}&&
Platform.ReadBytes(memory,0x10000).AsSpan().SequenceEqual(emptyBefore))passed|=4;
Map(metadata+0xC8,secondBucket,node);Write(descriptor+0x18,4u);Write(descriptor+0x30,123UL);
if(Copy(out fact)&&fact is{defaulted:false,governmentId:4,population:123})passed|=8;
Write(node,node);var malformed=!CopyGalaxyBasicSystemFacts(context,address+1,out _);Write(node,secondBucket);
Map(metadata+0xC8,secondBucket,0);Write(firstBucket,(nuint)1);malformed&=!Copy(out _);Write(firstBucket,firstBucket);
Map(metadata+0xC8,secondBucket,node);
Write(metadata,expectedImage+0x551A1B8);malformed&=!Copy(out _);Write(metadata,expectedImage+0x551A1B0);if(malformed)passed|=16;
Write(descriptor+0x18,uint.MaxValue);Write(descriptor+0x1C,40u);Write(descriptor+0x20,29u);Write(descriptor+0x24,28u);
if(Copy(out fact)&&fact is{governmentId:uint.MaxValue,factionStateId:40,primaryEconomyId:29,secondaryEconomyId:28})passed|=32;
Write(descriptor+0x30,ulong.MaxValue);Write(descriptor+8,ulong.MaxValue);
if(Copy(out fact)&&fact is{population:ulong.MaxValue,allegianceId:ulong.MaxValue})passed|=64;
var before=Platform.ReadBytes(memory,0x10000);
if(Copy(out fact)&&fact is not null&&!CopyGalaxyBasicSystemFacts(context,0,out _)&&
!CopyGalaxyBasicSystemFacts(context,1UL<<55,out _)&&Platform.ReadBytes(memory,0x10000).AsSpan().SequenceEqual(before))passed|=128;
return passed;
}
finally{Platform.Free(memory);}
}
#if PLUGIN_NAVIGATION
[UnmanagedCallersOnly(EntryPoint="XFENavigationGalaxyBasicSystemFactsSelfTest")]
internal static uint ExportGalaxyBasicSystemFactsSelfTest()=>RunTest(GalaxyBasicSystemFactsSelfTest);
#endif
}