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 GalaxyCatalogueQualitySelfTest()
    {
        var memory=Platform.Allocate(0x20000);if(memory==0)return 0;
        try
        {
            var expectedImage=memory+0x10000-0x52EC988;var owner=memory+0x1000;var source=owner+0x950;
            var controller=memory+0x4000;var selector=owner+0x640;var vector=memory+0x6000;
            var first=memory+0x7000;var second=memory+0x8000;
            Write(source,expectedImage+0x52EC988);Write(expectedImage+0x52EC988,expectedImage+0x2840BD0);
            Write(expectedImage+0x52EC988+0xA0,expectedImage+0x2843C10);
            Write(source+0x880,controller);Write(controller,expectedImage+0x52EC1B0);
            Write(expectedImage+0x52EC1B0+0x10,expectedImage+0x2843710);Write(controller+0x248,owner);
            Write(owner+0x60,expectedImage+0x52EC798);Write(expectedImage+0x52EC798+0xB8,expectedImage+0x2841250);
            Write(selector,expectedImage+0x52F66B8);Write(selector+8,1u);Write(selector+0x20,2u);Write(selector+0x28,vector);
            Write(vector,first);Write(vector+8,second);Write(first+0x3C,100u);Write(second+0x3C,100000u);
            bool Copy(out uint value)=>CopyGalaxyCatalogueQuality(source,expectedImage,out value);
            uint passed=0;
            if(Copy(out var stars)&&stars==100000)passed|=1;
            Write(second+0x3C,0u);var exact=Copy(out stars)&&stars==0;
            Write(second+0x3C,uint.MaxValue);exact&=Copy(out stars)&&stars==uint.MaxValue;Write(second+0x3C,100000u);
            if(exact)passed|=2;
            Write(selector+0x20,65u);var bounds=!Copy(out _);Write(selector+0x20,2u);Write(selector+8,2u);
            bounds&=!Copy(out _);Write(selector+8,1u);Write(selector+0x20,0u);bounds&=!Copy(out _);Write(selector+0x20,2u);if(bounds)passed|=4;
            Write(controller+0x248,owner+8);var identity=!Copy(out _);Write(controller+0x248,owner);
            Write(source+0x880,(nuint)0);identity&=!Copy(out _);Write(source+0x880,controller);if(identity)passed|=8;
            var tables=true;
            foreach(var (at,table) in new[]{(source,expectedImage+0x52EC988),(controller,expectedImage+0x52EC1B0),(owner+0x60,expectedImage+0x52EC798),(selector,expectedImage+0x52F66B8)})
            {Write(at,table+8);tables&=!Copy(out _);Write(at,table);}
            if(tables)passed|=16;
            var slots=true;
            foreach(var (at,getter) in new[]{(expectedImage+0x52EC988,expectedImage+0x2840BD0),(expectedImage+0x52EC988+0xA0,expectedImage+0x2843C10),
                (expectedImage+0x52EC1B0+0x10,expectedImage+0x2843710),(expectedImage+0x52EC798+0xB8,expectedImage+0x2841250)})
            {Write(at,getter+1);slots&=!Copy(out _);Write(at,getter);}
            if(slots)passed|=32;
            Write(selector+0x28,(nuint)0);var missing=!Copy(out _);Write(selector+0x28,vector);
            Write(vector+8,(nuint)0);missing&=!Copy(out _);Write(vector+8,second);if(missing)passed|=64;
            var before=Platform.ReadBytes(memory,0x20000);
            if(Copy(out stars)&&stars==100000&&!CopyGalaxyCatalogueQuality(source,expectedImage+8,out _)&&
               !CopyGalaxyCatalogueQuality(0,expectedImage,out _)&&Platform.ReadBytes(memory,0x20000).AsSpan().SequenceEqual(before))passed|=128;
            return passed;
        }
        finally{Platform.Free(memory);}
    }
#if PLUGIN_NAVIGATION
    [UnmanagedCallersOnly(EntryPoint="XFENavigationGalaxyCatalogueQualitySelfTest")]
    internal static uint ExportGalaxyCatalogueQualitySelfTest()=>RunTest(GalaxyCatalogueQualitySelfTest);
#endif
}