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 GalaxyColonisationHighlightSelfTest()
    {
        var memory=Platform.Allocate(0x6000000);if(memory==0)return 0;
        try
        {
            var expected=memory;var provider=memory+0x1000;var navigation=memory+0x2000;var centre=memory+0x3000;var candidate=memory+0x4000;
            var centreCompact=memory+0x5000;var candidateCompact=memory+0x6000;const ulong centreAddress=9007199254740995,address=centreAddress+(1UL<<50);
            Write(provider,expected+0x552D920);Write(expected+0x552D920+0x20,expected+0x3B3E650);Write(expected+0x552D920+0x50,expected+0x3B26B30);
            Write(provider+0x160,navigation);Write(provider+0x178,centre);Write(provider+0x1A0,4f);
            Write(provider+0x11C,.3f);Write(provider+0x120,1f);Write(provider+0x124,.2f);
            Write(navigation,expected+0x552A9B8);Write(expected+0x552A9B8+0x50,expected+0x21E8CB0);Write(navigation+0x2B0,centre);
            Write(centre+0x20,2U);Write(centre+0x28,centreAddress);Write(centre+0x38,centreCompact);Write(centreCompact,centreAddress);
            Write(candidate+0x20,2U);Write(candidate+0x28,address);Write(candidate+0x38,candidateCompact);Write(candidateCompact,address);
            Write(centreCompact+0x42,(ushort)64);Write(centreCompact+0x44,(ushort)96);Write(centreCompact+0x46,(ushort)128);
            Write(candidateCompact+0x42,(ushort)128);Write(candidateCompact+0x44,(ushort)96);Write(candidateCompact+0x46,(ushort)128);
            var before=Platform.ReadBytes(provider,0x6000);uint passed=0;
            bool Copy(int status,out GalaxyColonisationHighlight? value)=>CopyGalaxyColonisationHighlight(provider,navigation,candidate,expected,address,status,out value);
            if(Copy(0,out var edge)&&edge is{eligibilityStatus:0,distanceSquared:4,radiusSquared:4}&&edge.centreSystemAddress==centreAddress&&edge.rawRgb.SequenceEqual(new[]{.3f,1f,.2f}))passed|=1;
            if(Copy(5,out var excluded)&&excluded is{eligibilityStatus:5}&&!Copy(12,out _))passed|=2;
            Write(candidateCompact+0x42,(ushort)129);if(Copy(0,out var outside)&&outside!.distanceSquared>outside.radiusSquared)passed|=4;Write(candidateCompact+0x42,(ushort)128);
            Write(centre+0x20,1U);var pending=!Copy(0,out _);Write(centre+0x20,2U);Write(provider+0x178,(nuint)0);
            if(pending&&!Copy(0,out _))passed|=8;Write(provider+0x178,centre);
            Write(expected+0x552D920+0x50,expected+0x3B26B31);if(!Copy(0,out _))passed|=16;Write(expected+0x552D920+0x50,expected+0x3B26B30);
            Write(navigation+0x2B0,candidate);var stale=!Copy(0,out _);Write(navigation+0x2B0,centre);Write(candidateCompact,address+1);
            if(stale&&!Copy(0,out _))passed|=32;Write(candidateCompact,address);
            Write(provider+0x1A0,float.NaN);var nan=!Copy(0,out _);Write(provider+0x1A0,-1f);var negative=!Copy(0,out _);Write(provider+0x1A0,4f);
            Write(provider+0x120,float.PositiveInfinity);if(nan&&negative&&!Copy(0,out _))passed|=64;Write(provider+0x120,1f);
            if(Copy(0,out _)&&Platform.ReadBytes(provider,0x6000).AsSpan().SequenceEqual(before)&&
                GalaxyColonisationHighlightDescription(edge)?["centreSystemAddress"]?.GetValue<string>()==centreAddress.ToString()&&GalaxyColonisationHighlightDescription(null) is null)passed|=128;
            return passed;
        }
        finally{Platform.Free(memory);}
    }
#if PLUGIN_NAVIGATION
    [UnmanagedCallersOnly(EntryPoint="XFENavigationGalaxyColonisationHighlightSelfTest")]
    internal static uint ExportGalaxyColonisationHighlightSelfTest()=>RunTest(GalaxyColonisationHighlightSelfTest);
#endif
}