using System.Runtime.InteropServices;
namespace XFEEDToolBox.Plugin;
internal static unsafe partial class Navigation
{
// Allocated fixtures only: no process attachment, account reads, game
// function calls or requests. Each bit verifies a meaningful boundary.
static uint GalaxyAccountSocialSelfTest()
{
var memory=Platform.Allocate(32768);if(memory==0)return 0;
try
{
var fakeImage=unchecked((nuint)0x140000000UL);var friends=memory;var owner=memory+0x800;
var buckets=memory+0x1000;var first=memory+0x1100;var second=memory+0x1200;var str=memory+0x1300;
Write(friends,fakeImage+0x5238F90);Write(friends+8,fakeImage+0x5238FC0);Write(friends+0x58,fakeImage+0x52390C0);Write(friends+0x10,owner);
Write(friends+0x220,buckets);Write(friends+0x228,1UL);Write(friends+0x238,2UL);Write(buckets,first);
Write(first,second);Write(second,buckets);
Write(str,6UL);Write(str+8,6UL);Write(str+16,1);Platform.WriteBytes(str+20,"Friend\0"u8);
for(nuint i=0;i<2;i++)
{
var row=i==0?first:second;Write(row+8,42+(int)i);Write(row+0x10,42+(int)i);Write(row+0x18,str);
Write(row+0x20,2);Write(row+0x28,i==0?6:0);Write(row+0x30,1234UL+(ulong)i);
Write(row+0x40,9007199254740995UL+(ulong)i);
}
uint passed=0;
if(CopyGalaxyFriendsManager(friends,owner,fakeImage,out var items)&&items.Length==2&&
items[0].systemAddress==9007199254740995UL&&items[0].commanderId==1234&&items[0].commanderName=="Friend"&&
items[0].statusName=="open"&&items[0].locationCurrent is null&&items[1].locationCurrent==false)passed|=1;
if(!new GalaxyAccountSocial(1,2,true,false,items).complete)passed|=2;
Write(first+0x20,1);Write(second+0x24,(byte)1);
if(CopyGalaxyFriendsManager(friends,owner,fakeImage,out items)&&items.Length==0)passed|=4;
Write(first+0x20,2);Write(second+0x24,(byte)0);Write(first+0x40,0UL);Write(second+0x40,ulong.MaxValue);
if(CopyGalaxyFriendsManager(friends,owner,fakeImage,out items)&&items.Length==0)passed|=8;
Write(first+0x40,9007199254740995UL);Write(second+0x40,9007199254740996UL);Write(second,first);
if(!CopyGalaxyFriendsManager(friends,owner,fakeImage,out _))passed|=16;
Write(second,buckets);Write(first+0x10,999);
if(!CopyGalaxyFriendsManager(friends,owner,fakeImage,out _))passed|=32;
Write(first+0x10,42);Write(friends+0x10,owner+8);
if(!CopyGalaxyFriendsManager(friends,owner,fakeImage,out _))passed|=64;
Write(friends+0x10,owner);Write(friends+0x238,0UL);Write(buckets,buckets);
if(CopyGalaxyFriendsManager(friends,owner,fakeImage,out items)&&items.Length==0&&
!new GalaxyAccountSocial(1,2,true,false,items).complete)passed|=128;
var wing=memory+0x2000;var life=memory+0x3000;var registry=memory+0x4000;
var metadata=memory+0x4100;var slots=memory+0x4200;var array=memory+0x4300;var member=memory+0x5000;
Write(wing,fakeImage+0x52A5498);Write(wing+8,fakeImage+0x52A54C8);Write(wing+0x58,fakeImage+0x52A55C8);Write(wing+0x10,owner);
Write(wing+0x59C,4U);
for(nuint i=0;i<6;i++)Write(wing+0x2A8+i*0x40,ulong.MaxValue);
Write(wing+0x2A8,99UL);Write(wing+0x2C0,life);
Write(life+0xC0,8U);Write(life+0xC8,registry+0x30);
Write(registry+0x10,metadata);Write(registry+0x18,array);Write(metadata+0x18,1UL);Write(metadata+0x30,slots);
Write(slots+3*16,0UL);Write(array,member+0x58);
Write(member,fakeImage+0x52A8538);Write(member+8,fakeImage+0x52A8568);Write(member+0x58,fakeImage+0x52A8668);Write(member+0x10,owner);
Write(member+0x80,0x8120000000000003UL);Write(member+0x8C,5);
if(CopyGalaxyWingManager(wing,owner,fakeImage,3,out items)&&items.Length==1&&
items[0].kind=="wing"&&items[0].systemAddress==9007199254740995UL&&items[0].commanderId==0&&items[0].locationCurrent is null)passed|=256;
Write(life+0xC0,4U);
if(CopyGalaxyWingManager(wing,owner,fakeImage,3,out items)&&items.Length==0&&
!new GalaxyAccountSocial(1,2,false,true,items).complete)passed|=512;
Write(life+0xC0,8U);Write(member+0x80,ulong.MaxValue);
if(CopyGalaxyWingManager(wing,owner,fakeImage,3,out items)&&items.Length==0)passed|=1024;
Write(member+0x80,0x8120000000000003UL);Write(member,fakeImage+0x52A8570);
if(!CopyGalaxyWingManager(wing,owner,fakeImage,3,out _))passed|=2048;
Write(member,fakeImage+0x52A8538);Write(wing+0x2E8,99UL);
if(!CopyGalaxyWingManager(wing,owner,fakeImage,3,out _))passed|=4096;
Write(wing+0x2E8,ulong.MaxValue);Write(wing+0x10,owner+8);
if(!CopyGalaxyWingManager(wing,owner,fakeImage,3,out _))passed|=8192;
Write(wing+0x10,owner);Write(wing+0x2B8,77);
if(CopyGalaxyWingManager(wing,owner,fakeImage,3,out items,42)&&items.Length==1&&items[0].locationCurrent==true&&
CopyGalaxyWingManager(wing,owner,fakeImage,3,out items,77)&&items[0].locationCurrent==false)passed|=16384;
Write(wing+0x590,(byte)2);
if(CopyGalaxyWingManager(wing,owner,fakeImage,3,out items,42)&&items.Length==1&&items[0].locationCurrent==false&&
GalaxyFriendMarkerCurrent(0)==false&&GalaxyFriendMarkerCurrent(13)==false&&GalaxyFriendMarkerCurrent(5) is null)passed|=32768;
return passed;
}
finally{Platform.Free(memory);}
}
#if PLUGIN_NAVIGATION
[UnmanagedCallersOnly(EntryPoint="XFENavigationGalaxySocialSelfTest")]
internal static uint ExportGalaxyAccountSocialSelfTest()=>RunTest(GalaxyAccountSocialSelfTest);
#endif
}
using System.Runtime.InteropServices;
namespace XFEEDToolBox.Plugin;
internal static unsafe partial class Navigation
{
// Allocated fixtures only: no process attachment, account reads, game
// function calls or requests. Each bit verifies a meaningful boundary.
static uint GalaxyAccountSocialSelfTest()
{
var memory=Platform.Allocate(32768);if(memory==0)return 0;
try
{
var fakeImage=unchecked((nuint)0x140000000UL);var friends=memory;var owner=memory+0x800;
var buckets=memory+0x1000;var first=memory+0x1100;var second=memory+0x1200;var str=memory+0x1300;
Write(friends,fakeImage+0x5238F90);Write(friends+8,fakeImage+0x5238FC0);Write(friends+0x58,fakeImage+0x52390C0);Write(friends+0x10,owner);
Write(friends+0x220,buckets);Write(friends+0x228,1UL);Write(friends+0x238,2UL);Write(buckets,first);
Write(first,second);Write(second,buckets);
Write(str,6UL);Write(str+8,6UL);Write(str+16,1);Platform.WriteBytes(str+20,"Friend\0"u8);
for(nuint i=0;i<2;i++)
{
var row=i==0?first:second;Write(row+8,42+(int)i);Write(row+0x10,42+(int)i);Write(row+0x18,str);
Write(row+0x20,2);Write(row+0x28,i==0?6:0);Write(row+0x30,1234UL+(ulong)i);
Write(row+0x40,9007199254740995UL+(ulong)i);
}
uint passed=0;
if(CopyGalaxyFriendsManager(friends,owner,fakeImage,out var items)&&items.Length==2&&
items[0].systemAddress==9007199254740995UL&&items[0].commanderId==1234&&items[0].commanderName=="Friend"&&
items[0].statusName=="open"&&items[0].locationCurrent is null&&items[1].locationCurrent==false)passed|=1;
if(!new GalaxyAccountSocial(1,2,true,false,items).complete)passed|=2;
Write(first+0x20,1);Write(second+0x24,(byte)1);
if(CopyGalaxyFriendsManager(friends,owner,fakeImage,out items)&&items.Length==0)passed|=4;
Write(first+0x20,2);Write(second+0x24,(byte)0);Write(first+0x40,0UL);Write(second+0x40,ulong.MaxValue);
if(CopyGalaxyFriendsManager(friends,owner,fakeImage,out items)&&items.Length==0)passed|=8;
Write(first+0x40,9007199254740995UL);Write(second+0x40,9007199254740996UL);Write(second,first);
if(!CopyGalaxyFriendsManager(friends,owner,fakeImage,out _))passed|=16;
Write(second,buckets);Write(first+0x10,999);
if(!CopyGalaxyFriendsManager(friends,owner,fakeImage,out _))passed|=32;
Write(first+0x10,42);Write(friends+0x10,owner+8);
if(!CopyGalaxyFriendsManager(friends,owner,fakeImage,out _))passed|=64;
Write(friends+0x10,owner);Write(friends+0x238,0UL);Write(buckets,buckets);
if(CopyGalaxyFriendsManager(friends,owner,fakeImage,out items)&&items.Length==0&&
!new GalaxyAccountSocial(1,2,true,false,items).complete)passed|=128;
var wing=memory+0x2000;var life=memory+0x3000;var registry=memory+0x4000;
var metadata=memory+0x4100;var slots=memory+0x4200;var array=memory+0x4300;var member=memory+0x5000;
Write(wing,fakeImage+0x52A5498);Write(wing+8,fakeImage+0x52A54C8);Write(wing+0x58,fakeImage+0x52A55C8);Write(wing+0x10,owner);
Write(wing+0x59C,4U);
for(nuint i=0;i<6;i++)Write(wing+0x2A8+i*0x40,ulong.MaxValue);
Write(wing+0x2A8,99UL);Write(wing+0x2C0,life);
Write(life+0xC0,8U);Write(life+0xC8,registry+0x30);
Write(registry+0x10,metadata);Write(registry+0x18,array);Write(metadata+0x18,1UL);Write(metadata+0x30,slots);
Write(slots+3*16,0UL);Write(array,member+0x58);
Write(member,fakeImage+0x52A8538);Write(member+8,fakeImage+0x52A8568);Write(member+0x58,fakeImage+0x52A8668);Write(member+0x10,owner);
Write(member+0x80,0x8120000000000003UL);Write(member+0x8C,5);
if(CopyGalaxyWingManager(wing,owner,fakeImage,3,out items)&&items.Length==1&&
items[0].kind=="wing"&&items[0].systemAddress==9007199254740995UL&&items[0].commanderId==0&&items[0].locationCurrent is null)passed|=256;
Write(life+0xC0,4U);
if(CopyGalaxyWingManager(wing,owner,fakeImage,3,out items)&&items.Length==0&&
!new GalaxyAccountSocial(1,2,false,true,items).complete)passed|=512;
Write(life+0xC0,8U);Write(member+0x80,ulong.MaxValue);
if(CopyGalaxyWingManager(wing,owner,fakeImage,3,out items)&&items.Length==0)passed|=1024;
Write(member+0x80,0x8120000000000003UL);Write(member,fakeImage+0x52A8570);
if(!CopyGalaxyWingManager(wing,owner,fakeImage,3,out _))passed|=2048;
Write(member,fakeImage+0x52A8538);Write(wing+0x2E8,99UL);
if(!CopyGalaxyWingManager(wing,owner,fakeImage,3,out _))passed|=4096;
Write(wing+0x2E8,ulong.MaxValue);Write(wing+0x10,owner+8);
if(!CopyGalaxyWingManager(wing,owner,fakeImage,3,out _))passed|=8192;
Write(wing+0x10,owner);Write(wing+0x2B8,77);
if(CopyGalaxyWingManager(wing,owner,fakeImage,3,out items,42)&&items.Length==1&&items[0].locationCurrent==true&&
CopyGalaxyWingManager(wing,owner,fakeImage,3,out items,77)&&items[0].locationCurrent==false)passed|=16384;
Write(wing+0x590,(byte)2);
if(CopyGalaxyWingManager(wing,owner,fakeImage,3,out items,42)&&items.Length==1&&items[0].locationCurrent==false&&
GalaxyFriendMarkerCurrent(0)==false&&GalaxyFriendMarkerCurrent(13)==false&&GalaxyFriendMarkerCurrent(5) is null)passed|=32768;
return passed;
}
finally{Platform.Free(memory);}
}
#if PLUGIN_NAVIGATION
[UnmanagedCallersOnly(EntryPoint="XFENavigationGalaxySocialSelfTest")]
internal static uint ExportGalaxyAccountSocialSelfTest()=>RunTest(GalaxyAccountSocialSelfTest);
#endif
}