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

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
using System.Runtime.InteropServices;
using System.Text.Json;
using XFEEDToolBox.Core.Galaxy;
using XFEEDToolBox.Core.Models;
using XFEEDToolBox.Core.Rendering;
using XFEExtension.NetCore.XUnit.Attributes;

namespace XFEEDToolBox.Test;

[TestFixture]
public sealed class GalaxyPowerInfluenceTests
{
    const long Centre=9007199254740995,Candidate=9007199254741119;
    static readonly GalaxyNativePowerOuter Outer=new(true,Centre,new Coordinates(1,2,3),100);
    static string Wire(bool reverse=false)=>JsonSerializer.Serialize(new{source=GalaxyNativePowerInfluence.Source,eligible=true,
        fromSystemAddress=(reverse?Candidate:Centre).ToString(),toSystemAddress=(reverse?Centre:Candidate).ToString(),
        fromPosition=reverse?new[]{6d,2,3}:new[]{1d,2,3},toPosition=reverse?new[]{1d,2,3}:new[]{6d,2,3},linearRgb=new[]{.2f,.4f,1.5f},
        kind=reverse?1:0,phase=-.375f,phaseRate=.25f,capturedAtTick="9007199254740997"});
    static GalaxyNativePowerInfluence? Read(string json,GalaxyNativePowerOuter? outer=null)
    {using var document=JsonDocument.Parse(json);return GalaxyNativePowerInfluence.FromWire(document.RootElement,Candidate,outer??Outer);}
    [Test]
    public void OriginalInfluenceIsBoundToActualCentreCandidateAndPreservesDirectedKindAndPhase()
    {
        var fromCentre=Read(Wire())!;var fromCandidate=Read(Wire(true))!;
        Check.That(fromCentre.Eligible&&fromCentre.FromSystemAddress==Centre&&fromCentre.ToSystemAddress==Candidate&&fromCentre.Kind==0);
        Check.That(fromCandidate.FromSystemAddress==Candidate&&fromCandidate.ToSystemAddress==Centre&&fromCandidate.Kind==1);
        Check.Equal(1.5f,fromCentre.LinearRgb![2]);Check.Equal(-.375f,fromCentre.Phase);Check.Equal(.25f,fromCentre.PhaseRate);Check.Equal(9007199254740997UL,fromCentre.CapturedAtTick);
    }
    [Test]
    public void UnknownAndSourceProvenNoLinkAreDifferentAndNeitherHasStagedGeometry()
    {
        Check.That(Read("null") is null);
        var noLink=Read("{\"source\":\"original-power-influence\",\"eligible\":false}")!;
        Check.That(!noLink.Eligible&&!GalaxyOriginalPowerInfluenceGeometry.TryCreate(noLink,out _)&&!GalaxyOriginalPowerInfluenceGeometry.TryCreate(null,out _));
    }
    [Test]
    public void WrongViewUnboundAddressesWrongCentreAndMalformedSourceCannotBecomeLinks()
    {
        void Reject(string value,GalaxyNativePowerOuter? outer=null){var rejected=false;try{Read(value,outer);}catch(InvalidDataException){rejected=true;}Check.That(rejected);}
        Reject("{}");Reject(Wire(),Outer with{Visible=false});Reject(Wire().Replace(GalaxyNativePowerInfluence.Source,"jump-connections"));
        Reject(Wire().Replace(Candidate.ToString(),"42"));Reject(Wire().Replace("\"9007199254740995\"","9007199254740995"));
        Reject(Wire().Replace("[1,2,3]","[1,2,4]"));Reject(Wire().Replace("\"kind\":0","\"kind\":2"));
        Reject(Wire().Replace("[0.2,0.4,1.5]","[-0.2,0.4,1.5]"));Reject(Wire().Replace("\"9007199254740997\"","9007199254740997"));
        Reject("{\"source\":\"original-power-influence\",\"eligible\":false,\"phase\":1}");
    }
    [Test]
    public void StagedRecordKeepsOriginal64ByteLayoutAndDoesNotInventFinalLineWidthOrPattern()
    {
        Check.Equal(64,Marshal.SizeOf<GalaxyOriginalPowerInfluence>());
        Check.That(GalaxyOriginalPowerInfluenceGeometry.TryCreate(Read(Wire()),out var record));
        Check.Equal(1f,record.From.X);Check.Equal(6f,record.To.X);Check.Equal(0f,record.From.W);Check.Equal(0f,record.To.W);
        Check.Equal(1.5f,record.Colour.Z);Check.Equal(1f,record.Colour.W);Check.Equal(-.375f,record.Pattern.X);
        Check.Equal(0f,record.Pattern.Y);Check.Equal(0f,record.Pattern.Z);Check.Equal(0f,record.Pattern.W);
        Check.That(!GalaxyOriginalPowerInfluenceGeometry.TryCreate(Read(Wire())! with{ToSystemAddress=Centre},out _));
    }
    [Test]
    public void InitialPhaseUsesExactAddressHashAndOneOver256InsteadOfOneOver255()
    {
        foreach(ulong address in new[]{1UL,42UL,9007199254740995UL,9007199254741119UL,(1UL<<55)-1})
        {
            var phase=GalaxyOriginalPowerInfluenceGeometry.InitialPhase(address);Check.That(phase>=0&&phase<1);
            Check.Equal(MathF.Truncate(phase*256),phase*256);
        }
        Check.That(GalaxyOriginalPowerInfluenceGeometry.InitialPhase(9007199254740995UL)!=GalaxyOriginalPowerInfluenceGeometry.InitialPhase(9007199254740996UL));
    }
}