using System.Runtime.InteropServices;
using System.Text;
namespace XFEEDToolBox.Plugin;
internal static unsafe partial class Navigation
{
static uint GalaxyAccountMissionsSelfTest()
{
var memory=Platform.Allocate(0x20000);if(memory==0)return 0;
try
{
uint passed=0;var fakeImage=unchecked((nuint)0x140000000UL);
var manager=memory;var owner=memory+0x800;var vector=memory+0x1000;
var normalBase=memory+0x2000;var normal=normalBase+0x1A8;
var failedBase=memory+0x3000;var failed=failedBase+0x118;
var text=memory+0x4000;var addresses=memory+0x5000;var failedAddresses=memory+0x5100;
var map=memory+0x8000;var summary=map+8;var title=memory+0x6000;
const ulong a=9007199254740995UL;const ulong id=0xFEDCBA9876543210UL;
Write(manager,fakeImage+0x525EE18);Write(manager+8,fakeImage+0x525EE48);Write(manager+0x58,fakeImage+0x525EF48);Write(manager+0x10,owner);
Write(manager+0x98,2UL);Write(manager+0xA8,2UL);Write(manager+0xB0,vector);Write(vector,failed);Write(vector+8,normal);
Write(normalBase,fakeImage+0x52609C8);Write(normal,fakeImage+0x5260A18);Write(normal-0xC0,id);
Write(failedBase,fakeImage+0x5260B78);Write(failed,fakeImage+0x5260BC8);Write(failed-0x40,ulong.MaxValue);
void Header(nuint header,ulong count,nuint rows)
{Write(header,count);Write(header+0x10,count);Write(header+0x18,rows);}
void String(nuint pointer,string value)
{var bytes=Encoding.UTF8.GetBytes(value);Write(pointer,(ulong)bytes.Length);Write(pointer+8,(ulong)bytes.Length);Platform.WriteBytes(pointer+0x14,bytes);}
var key=memory+0x6200;var value=memory+0x6400;String(key,":");String(value,$"{a}:private station label");
Header(normal-0xB0,2,text);Write(text,key);Write(text+8,value);Write(text+0x10,(byte)22);
// An ordinary text field containing decimal digits is not a system.
Write(text+24,key);Write(text+32,value);Write(text+40,(byte)1);
Header(normal-0x90,2,addresses);Write(addresses,a+1);Write(addresses+8,a+2);
Header(failed+0xE0,2,failedAddresses);Write(failedAddresses,a+3);Write(failedAddresses+8,a+3);
Write(manager+0xC8,0UL);Write(manager+0xD0,0UL);Write(manager+0xD8,(nuint)0);
bool Copy(out GalaxyAccountMissionItem[] result)=>CopyGalaxyMissionsManager(manager,owner,fakeImage,out result);
if(Copy(out var data)&&data.Length==2&&data[0].missionId==id&&data[0].systemAddresses.SequenceEqual(new[]{a,a+1,a+2})&&data[0].selectedSystemAddress==a+2)passed|=1;
if(data.Length==2&&data[1].missionId==ulong.MaxValue&&data[1].systemAddresses.SequenceEqual(new[]{a+3,a+3})&&data[1].markerType==4)passed|=2;
Header(normal-0xB0,0,0);Header(normal-0x90,0,0);Write(normal-0xC0,0UL);
if(Copy(out data)&&data[0].missionId==0&&data[0].systemAddresses.Length==0&&data[0].selectedSystemAddress is null&&!new GalaxyAccountMissions(1,2,data).complete)passed|=4;
Write(normal-0xC0,id);Header(normal-0xB0,2,text);Header(normal-0x90,2,addresses);
Write(normal-0x27,(byte)1);
var special=Copy(out data)&&data[0].markerType==45;Write(normal-0x27,(byte)0);Write(normal-0x20,(byte)1);
special&=Copy(out data)&&data[0].markerType==45;Write(normal-0x20,(byte)2);
if(special&&Copy(out data)&&data[0].markerType==4)passed|=8;
Write(manager+0xC8,1UL);Write(manager+0xD0,64UL);Write(manager+0xD8,map);Write(map,1UL);
Write(summary,id);String(title,"fixture mission title");Write(summary+8,title);Header(summary+0x28,1,text);
if(Copy(out data)&&data.Length==2&&data[0].selectedSystemAddress==a+2)passed|=16;
Write(summary,12345678901234567890UL);
if(Copy(out data)&&data.Length==3&&data[2].missionId==12345678901234567890UL&&data[2].selectedSystemAddress==a&&data[2].markerType==4)passed|=32;
Write(title,0UL);
if(Copy(out data)&&data.Length==2)passed|=64;
String(title,"fixture mission title");Write(manager+0x10,owner+8);
if(!Copy(out _))passed|=128;
Write(manager+0x10,owner);Write(normal,fakeImage+0x5260A48);
var tables=!Copy(out _);Write(normal,fakeImage+0x5260A18);Write(failedBase,fakeImage+0x5260BA8);
if(tables&&!Copy(out _))passed|=256;
Write(failedBase,fakeImage+0x5260B78);Write(manager+0xA8,4097UL);
var bounds=!Copy(out _);Write(manager+0xA8,2UL);Header(normal-0x90,4097,addresses);
if(bounds&&!Copy(out _))passed|=512;
Header(normal-0x90,2,addresses);Write(addresses+8,0UL);
var invalid=!Copy(out _);Write(addresses+8,0x80000000000000UL);
if(invalid&&!Copy(out _))passed|=1024;
Write(addresses+8,a+2);String(value,"not-an-address:123");
var parsing=!Copy(out _);String(value,"184467440737095516160:bad");
if(parsing&&!Copy(out _))passed|=2048;
String(key,"|");String(value,$" \t{a}suffix|private description");
if(Copy(out data)&&data[0].systemAddresses[0]==a&&data[2].selectedSystemAddress==a)passed|=4096;
Write(manager+0xD0,3UL);var bitmap=!Copy(out _);Write(manager+0xD0,64UL);Write(map,3UL);
if(bitmap&&!Copy(out _))passed|=8192;
Write(map,1UL);var before=Platform.ReadBytes(memory,0x10000);
if(Copy(out data)&&Platform.ReadBytes(memory,0x10000).AsSpan().SequenceEqual(before))
{Write(addresses+8,a+8);if(data[0].selectedSystemAddress==a+2&&data[0].systemAddresses[2]==a+2)passed|=16384;}
var watched=new GalaxyMissionCopy();watched.Bytes(addresses,8);Write(addresses,a+9);
var stable=!watched.Stable();Write(manager+0xA8,0UL);Write(manager+0xC8,0UL);Write(manager+0xD0,0UL);
if(stable&&Copy(out data)&&data.Length==0)passed|=32768;
return passed;
}
finally{Platform.Free(memory);}
}
#if PLUGIN_NAVIGATION
[UnmanagedCallersOnly(EntryPoint="XFENavigationGalaxyAccountMissionsSelfTest")]
internal static uint ExportGalaxyAccountMissionsSelfTest()=>RunTest(GalaxyAccountMissionsSelfTest);
#endif
}
using System.Runtime.InteropServices;
using System.Text;
namespace XFEEDToolBox.Plugin;
internal static unsafe partial class Navigation
{
static uint GalaxyAccountMissionsSelfTest()
{
var memory=Platform.Allocate(0x20000);if(memory==0)return 0;
try
{
uint passed=0;var fakeImage=unchecked((nuint)0x140000000UL);
var manager=memory;var owner=memory+0x800;var vector=memory+0x1000;
var normalBase=memory+0x2000;var normal=normalBase+0x1A8;
var failedBase=memory+0x3000;var failed=failedBase+0x118;
var text=memory+0x4000;var addresses=memory+0x5000;var failedAddresses=memory+0x5100;
var map=memory+0x8000;var summary=map+8;var title=memory+0x6000;
const ulong a=9007199254740995UL;const ulong id=0xFEDCBA9876543210UL;
Write(manager,fakeImage+0x525EE18);Write(manager+8,fakeImage+0x525EE48);Write(manager+0x58,fakeImage+0x525EF48);Write(manager+0x10,owner);
Write(manager+0x98,2UL);Write(manager+0xA8,2UL);Write(manager+0xB0,vector);Write(vector,failed);Write(vector+8,normal);
Write(normalBase,fakeImage+0x52609C8);Write(normal,fakeImage+0x5260A18);Write(normal-0xC0,id);
Write(failedBase,fakeImage+0x5260B78);Write(failed,fakeImage+0x5260BC8);Write(failed-0x40,ulong.MaxValue);
void Header(nuint header,ulong count,nuint rows)
{Write(header,count);Write(header+0x10,count);Write(header+0x18,rows);}
void String(nuint pointer,string value)
{var bytes=Encoding.UTF8.GetBytes(value);Write(pointer,(ulong)bytes.Length);Write(pointer+8,(ulong)bytes.Length);Platform.WriteBytes(pointer+0x14,bytes);}
var key=memory+0x6200;var value=memory+0x6400;String(key,":");String(value,$"{a}:private station label");
Header(normal-0xB0,2,text);Write(text,key);Write(text+8,value);Write(text+0x10,(byte)22);
// An ordinary text field containing decimal digits is not a system.
Write(text+24,key);Write(text+32,value);Write(text+40,(byte)1);
Header(normal-0x90,2,addresses);Write(addresses,a+1);Write(addresses+8,a+2);
Header(failed+0xE0,2,failedAddresses);Write(failedAddresses,a+3);Write(failedAddresses+8,a+3);
Write(manager+0xC8,0UL);Write(manager+0xD0,0UL);Write(manager+0xD8,(nuint)0);
bool Copy(out GalaxyAccountMissionItem[] result)=>CopyGalaxyMissionsManager(manager,owner,fakeImage,out result);
if(Copy(out var data)&&data.Length==2&&data[0].missionId==id&&data[0].systemAddresses.SequenceEqual(new[]{a,a+1,a+2})&&data[0].selectedSystemAddress==a+2)passed|=1;
if(data.Length==2&&data[1].missionId==ulong.MaxValue&&data[1].systemAddresses.SequenceEqual(new[]{a+3,a+3})&&data[1].markerType==4)passed|=2;
Header(normal-0xB0,0,0);Header(normal-0x90,0,0);Write(normal-0xC0,0UL);
if(Copy(out data)&&data[0].missionId==0&&data[0].systemAddresses.Length==0&&data[0].selectedSystemAddress is null&&!new GalaxyAccountMissions(1,2,data).complete)passed|=4;
Write(normal-0xC0,id);Header(normal-0xB0,2,text);Header(normal-0x90,2,addresses);
Write(normal-0x27,(byte)1);
var special=Copy(out data)&&data[0].markerType==45;Write(normal-0x27,(byte)0);Write(normal-0x20,(byte)1);
special&=Copy(out data)&&data[0].markerType==45;Write(normal-0x20,(byte)2);
if(special&&Copy(out data)&&data[0].markerType==4)passed|=8;
Write(manager+0xC8,1UL);Write(manager+0xD0,64UL);Write(manager+0xD8,map);Write(map,1UL);
Write(summary,id);String(title,"fixture mission title");Write(summary+8,title);Header(summary+0x28,1,text);
if(Copy(out data)&&data.Length==2&&data[0].selectedSystemAddress==a+2)passed|=16;
Write(summary,12345678901234567890UL);
if(Copy(out data)&&data.Length==3&&data[2].missionId==12345678901234567890UL&&data[2].selectedSystemAddress==a&&data[2].markerType==4)passed|=32;
Write(title,0UL);
if(Copy(out data)&&data.Length==2)passed|=64;
String(title,"fixture mission title");Write(manager+0x10,owner+8);
if(!Copy(out _))passed|=128;
Write(manager+0x10,owner);Write(normal,fakeImage+0x5260A48);
var tables=!Copy(out _);Write(normal,fakeImage+0x5260A18);Write(failedBase,fakeImage+0x5260BA8);
if(tables&&!Copy(out _))passed|=256;
Write(failedBase,fakeImage+0x5260B78);Write(manager+0xA8,4097UL);
var bounds=!Copy(out _);Write(manager+0xA8,2UL);Header(normal-0x90,4097,addresses);
if(bounds&&!Copy(out _))passed|=512;
Header(normal-0x90,2,addresses);Write(addresses+8,0UL);
var invalid=!Copy(out _);Write(addresses+8,0x80000000000000UL);
if(invalid&&!Copy(out _))passed|=1024;
Write(addresses+8,a+2);String(value,"not-an-address:123");
var parsing=!Copy(out _);String(value,"184467440737095516160:bad");
if(parsing&&!Copy(out _))passed|=2048;
String(key,"|");String(value,$" \t{a}suffix|private description");
if(Copy(out data)&&data[0].systemAddresses[0]==a&&data[2].selectedSystemAddress==a)passed|=4096;
Write(manager+0xD0,3UL);var bitmap=!Copy(out _);Write(manager+0xD0,64UL);Write(map,3UL);
if(bitmap&&!Copy(out _))passed|=8192;
Write(map,1UL);var before=Platform.ReadBytes(memory,0x10000);
if(Copy(out data)&&Platform.ReadBytes(memory,0x10000).AsSpan().SequenceEqual(before))
{Write(addresses+8,a+8);if(data[0].selectedSystemAddress==a+2&&data[0].systemAddresses[2]==a+2)passed|=16384;}
var watched=new GalaxyMissionCopy();watched.Bytes(addresses,8);Write(addresses,a+9);
var stable=!watched.Stable();Write(manager+0xA8,0UL);Write(manager+0xC8,0UL);Write(manager+0xD0,0UL);
if(stable&&Copy(out data)&&data.Length==0)passed|=32768;
return passed;
}
finally{Platform.Free(memory);}
}
#if PLUGIN_NAVIGATION
[UnmanagedCallersOnly(EntryPoint="XFENavigationGalaxyAccountMissionsSelfTest")]
internal static uint ExportGalaxyAccountMissionsSelfTest()=>RunTest(GalaxyAccountMissionsSelfTest);
#endif
}