using System.Runtime.InteropServices;
namespace XFEEDToolBox.Plugin;
internal static unsafe partial class Navigation
{
// Allocated fixtures only: no game process, native calls or requests.
static uint GalaxyPowerOptionsSelfTest()
{
var memory=Platform.Allocate(16384);if(memory==0)return 0;
try
{
var fakeImage=unchecked((nuint)0x140000000UL);var manager=memory;var service=manager+0x58;var owner=memory+0x1000;
var vector=memory+0x2000;var name=memory+0x3000;
Write(manager,fakeImage+0x51BB4D0);Write(manager+8,fakeImage+0x51BB500);Write(service,fakeImage+0x51BB600);Write(manager+0x10,owner);
Write(service+0x308,(byte)1);Write(service+0x309,(byte)1);Write(service+0x330,2UL);Write(service+0x338,vector);
Write(name,12UL);Write(name+8,12UL);Write(name+16,1);Platform.WriteBytes(name+20,"Actual Power\0"u8);
for(nuint i=0;i<2;i++)
{
var row=vector+i*0x260;Write(row,i==0?4:1);Write(row+0x18,name);Write(row+0x60,12f);Write(row+0x64,.25f);Write(row+0x68,1f);
}
uint passed=0;
if(CopyGalaxyPowerOptions(manager,owner,fakeImage,out var items)&&items.Length==2&&items[0].index==0&&items[0].uiPowerId==1&&items[0].internalPowerId==4&&
items[1].uiPowerId==2&&items[1].internalPowerId==1&&items[0].name=="Actual Power"&&items[0].rawRed==12&&items[0].rawGreen==.25f)passed|=1;
if(new GalaxyPowerOptions(1,2,items).optionsComplete&&new GalaxyPowerOptions(1,2,items).source=="original-power-definition-table")passed|=2;
Write(service+0x309,(byte)0);if(!CopyGalaxyPowerOptions(manager,owner,fakeImage,out _))passed|=4;Write(service+0x309,(byte)1);
Write(service+0x330,129UL);if(!CopyGalaxyPowerOptions(manager,owner,fakeImage,out _))passed|=8;Write(service+0x330,2UL);
Write(name,513UL);if(!CopyGalaxyPowerOptions(manager,owner,fakeImage,out _))passed|=16;Write(name,12UL);
Write(vector+0x260,4);if(!CopyGalaxyPowerOptions(manager,owner,fakeImage,out _))passed|=32;Write(vector+0x260,1);
Write(manager+0x10,owner+8);if(!CopyGalaxyPowerOptions(manager,owner,fakeImage,out _))passed|=64;Write(manager+0x10,owner);
Write(service,fakeImage+0x51BB648);if(!CopyGalaxyPowerOptions(manager,owner,fakeImage,out _))passed|=128;Write(service,fakeImage+0x51BB600);
Write(vector+0x60,float.NaN);if(!CopyGalaxyPowerOptions(manager,owner,fakeImage,out _))passed|=256;Write(vector+0x60,12f);
Write(vector,-1);if(!CopyGalaxyPowerOptions(manager,owner,fakeImage,out _))passed|=512;Write(vector,4);
Write(service+0x330,0UL);Write(service+0x338,(nuint)0);if(CopyGalaxyPowerOptions(manager,owner,fakeImage,out items)&&items.Length==0)passed|=1024;
Write(service+0x330,2UL);Write(service+0x338,vector);Write(manager,fakeImage+0x51BB518);if(!CopyGalaxyPowerOptions(manager,owner,fakeImage,out _))passed|=2048;Write(manager,fakeImage+0x51BB4D0);
Write(vector+0x18,(nuint)0);if(!CopyGalaxyPowerOptions(manager,owner,fakeImage,out _))passed|=4096;Write(vector+0x18,name);
Write(service+0x338,(nuint)0);if(!CopyGalaxyPowerOptions(manager,owner,fakeImage,out _))passed|=8192;
Write(service+0x338,vector);Write(vector+0x70,9007199254740995UL);Write(vector+0x260+0x70,0UL);
var before=Platform.ReadBytes(memory,16384);
if(CopyGalaxyPowerOptions(manager,owner,fakeImage,out items)&&items[0].headquartersSystemAddress==9007199254740995UL&&
items[1].headquartersSystemAddress is null&&Platform.ReadBytes(memory,16384).AsSpan().SequenceEqual(before))passed|=16384;
Write(vector+0x70,ulong.MaxValue);Write(vector+0x260+0x70,0x80000000000000UL);
if(CopyGalaxyPowerOptions(manager,owner,fakeImage,out items)&&items.All(item=>item.headquartersSystemAddress is null)&&
items[0].internalPowerId==4&&items[1].internalPowerId==1)passed|=32768;
return passed;
}
finally{Platform.Free(memory);}
}
#if PLUGIN_NAVIGATION
[UnmanagedCallersOnly(EntryPoint="XFENavigationGalaxyPowerOptionsSelfTest")]
internal static uint ExportGalaxyPowerOptionsSelfTest()=>RunTest(GalaxyPowerOptionsSelfTest);
#endif
}
using System.Runtime.InteropServices;
namespace XFEEDToolBox.Plugin;
internal static unsafe partial class Navigation
{
// Allocated fixtures only: no game process, native calls or requests.
static uint GalaxyPowerOptionsSelfTest()
{
var memory=Platform.Allocate(16384);if(memory==0)return 0;
try
{
var fakeImage=unchecked((nuint)0x140000000UL);var manager=memory;var service=manager+0x58;var owner=memory+0x1000;
var vector=memory+0x2000;var name=memory+0x3000;
Write(manager,fakeImage+0x51BB4D0);Write(manager+8,fakeImage+0x51BB500);Write(service,fakeImage+0x51BB600);Write(manager+0x10,owner);
Write(service+0x308,(byte)1);Write(service+0x309,(byte)1);Write(service+0x330,2UL);Write(service+0x338,vector);
Write(name,12UL);Write(name+8,12UL);Write(name+16,1);Platform.WriteBytes(name+20,"Actual Power\0"u8);
for(nuint i=0;i<2;i++)
{
var row=vector+i*0x260;Write(row,i==0?4:1);Write(row+0x18,name);Write(row+0x60,12f);Write(row+0x64,.25f);Write(row+0x68,1f);
}
uint passed=0;
if(CopyGalaxyPowerOptions(manager,owner,fakeImage,out var items)&&items.Length==2&&items[0].index==0&&items[0].uiPowerId==1&&items[0].internalPowerId==4&&
items[1].uiPowerId==2&&items[1].internalPowerId==1&&items[0].name=="Actual Power"&&items[0].rawRed==12&&items[0].rawGreen==.25f)passed|=1;
if(new GalaxyPowerOptions(1,2,items).optionsComplete&&new GalaxyPowerOptions(1,2,items).source=="original-power-definition-table")passed|=2;
Write(service+0x309,(byte)0);if(!CopyGalaxyPowerOptions(manager,owner,fakeImage,out _))passed|=4;Write(service+0x309,(byte)1);
Write(service+0x330,129UL);if(!CopyGalaxyPowerOptions(manager,owner,fakeImage,out _))passed|=8;Write(service+0x330,2UL);
Write(name,513UL);if(!CopyGalaxyPowerOptions(manager,owner,fakeImage,out _))passed|=16;Write(name,12UL);
Write(vector+0x260,4);if(!CopyGalaxyPowerOptions(manager,owner,fakeImage,out _))passed|=32;Write(vector+0x260,1);
Write(manager+0x10,owner+8);if(!CopyGalaxyPowerOptions(manager,owner,fakeImage,out _))passed|=64;Write(manager+0x10,owner);
Write(service,fakeImage+0x51BB648);if(!CopyGalaxyPowerOptions(manager,owner,fakeImage,out _))passed|=128;Write(service,fakeImage+0x51BB600);
Write(vector+0x60,float.NaN);if(!CopyGalaxyPowerOptions(manager,owner,fakeImage,out _))passed|=256;Write(vector+0x60,12f);
Write(vector,-1);if(!CopyGalaxyPowerOptions(manager,owner,fakeImage,out _))passed|=512;Write(vector,4);
Write(service+0x330,0UL);Write(service+0x338,(nuint)0);if(CopyGalaxyPowerOptions(manager,owner,fakeImage,out items)&&items.Length==0)passed|=1024;
Write(service+0x330,2UL);Write(service+0x338,vector);Write(manager,fakeImage+0x51BB518);if(!CopyGalaxyPowerOptions(manager,owner,fakeImage,out _))passed|=2048;Write(manager,fakeImage+0x51BB4D0);
Write(vector+0x18,(nuint)0);if(!CopyGalaxyPowerOptions(manager,owner,fakeImage,out _))passed|=4096;Write(vector+0x18,name);
Write(service+0x338,(nuint)0);if(!CopyGalaxyPowerOptions(manager,owner,fakeImage,out _))passed|=8192;
Write(service+0x338,vector);Write(vector+0x70,9007199254740995UL);Write(vector+0x260+0x70,0UL);
var before=Platform.ReadBytes(memory,16384);
if(CopyGalaxyPowerOptions(manager,owner,fakeImage,out items)&&items[0].headquartersSystemAddress==9007199254740995UL&&
items[1].headquartersSystemAddress is null&&Platform.ReadBytes(memory,16384).AsSpan().SequenceEqual(before))passed|=16384;
Write(vector+0x70,ulong.MaxValue);Write(vector+0x260+0x70,0x80000000000000UL);
if(CopyGalaxyPowerOptions(manager,owner,fakeImage,out items)&&items.All(item=>item.headquartersSystemAddress is null)&&
items[0].internalPowerId==4&&items[1].internalPowerId==1)passed|=32768;
return passed;
}
finally{Platform.Free(memory);}
}
#if PLUGIN_NAVIGATION
[UnmanagedCallersOnly(EntryPoint="XFENavigationGalaxyPowerOptionsSelfTest")]
internal static uint ExportGalaxyPowerOptionsSelfTest()=>RunTest(GalaxyPowerOptionsSelfTest);
#endif
}