XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
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
}