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

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
using XFEEDToolBox.Core.Rendering;
using XFEExtension.NetCore.XUnit.Attributes;

namespace XFEEDToolBox.Test;

[TestFixture]
public sealed class GalaxyOriginalDustFrameTests
{
    private static GalaxyOriginalDustInputs Inputs=>new(1066,1280,[new(2.659f,103.566f),new(9.826f,13.726f),new(4.848f,16.692f)],.5f,32,100,200);
    private static GalaxyOriginalDustPublication[] Published=>[new(0,10,10,2147483648,140),new(1,20,21,12500,30),new(2,30,30,6250,12)];

    [Test] public void ActualThreeLayerRecordRangesUsePublishedRadiiAndOrdinalOneException()
    {
        var source=Inputs;var layers=Published;
        Check.That(GalaxyOriginalDustFrame.TryCreate(source,layers,0,out var coarse));
        Check.Equal(106600f,coarse.TransitionWidth);Check.Equal(-40800f,coarse.LowerDistance);Check.Equal(300000f,coarse.UpperDistance);Check.That(coarse.HeightMultiplierEnabled);
        Check.That(GalaxyOriginalDustFrame.TryCreate(source,layers,1,out var middle));
        Check.Equal(53300f,middle.TransitionWidth);Check.Equal(200f,middle.LowerDistance);Check.Equal(65800f,middle.UpperDistance);Check.That(!middle.HeightMultiplierEnabled);
        Check.That(GalaxyOriginalDustFrame.TryCreate(source,layers,2,out var fine));
        Check.Equal(26650f,fine.TransitionWidth);Check.Equal(200f,fine.LowerDistance);Check.Equal(32900f,fine.UpperDistance);
        Check.Equal(source.Layers[1].Alpha*.5f,middle.AlphaMultiplier);Check.Equal(source.Layers[2].Size*32,fine.SizeMultiplier);
    }

    [Test] public void PendingOwnPublicationStaysUnknownAndMissingNextUsesActualMinimum()
    {
        var layers=Published;layers[1]=new(1,0,21,float.NaN,0);
        Check.That(GalaxyOriginalDustFrame.TryCreate(Inputs,layers,0,out var frame));Check.Equal(200f,frame.LowerDistance);
        Check.That(!GalaxyOriginalDustFrame.TryCreate(Inputs,layers,1,out _));
        // A newer requested revision does not discard the previous completed
        // publication: the original consumer uses publishedRevision directly.
        layers=Published;Check.That(layers[1].RequestedRevision!=layers[1].PublishedRevision&&GalaxyOriginalDustFrame.TryCreate(Inputs,layers,1,out _));
    }

    [Test] public void CurrentRuntimeSettingsAreExplicitAndNeverReplacedByDefaults()
    {
        var source=Inputs with{Step=1000,AlphaMultiplier=.25f,SizeMultiplier=4,TransitionPerStep=2,MinimumDistance=123,
            Layers=new[]{new GalaxyOriginalDustLayerFactors(8,9),new(10,11),new(12,13)}};
        Check.That(GalaxyOriginalDustFrame.TryCreate(source,Published,1,out var frame));
        Check.Equal(1000f,frame.TransitionWidth);Check.Equal(123f,frame.LowerDistance);Check.Equal(13500f,frame.UpperDistance);
        Check.Equal(2.5f,frame.AlphaMultiplier);Check.Equal(44f,frame.SizeMultiplier);
        Check.That(!GalaxyOriginalDustFrame.TryCreate(null,Published,0,out _)&&!GalaxyOriginalDustFrame.TryCreate(Inputs,null,0,out _));
        Check.That(!GalaxyOriginalDustFrame.TryCreate(Inputs with{Step=0},Published,0,out _)&&!GalaxyOriginalDustFrame.TryCreate(Inputs with{TransitionPerStep=float.NaN},Published,0,out _));
    }

    [Test] public void OriginalShaderUsesLinearDistanceFadesAndWidthPlusPointZeroZeroOne()
    {
        var frame=new GalaxyOriginalDustLayerFrame(100,500,200,1,1,false);
        Check.Equal(0f,GalaxyOriginalDustFrame.DistanceFade(100,frame)!.Value);Check.Equal(0f,GalaxyOriginalDustFrame.DistanceFade(500,frame)!.Value);
        Check.Equal(Math.Clamp(100f/200.001f,0,1),GalaxyOriginalDustFrame.DistanceFade(200,frame)!.Value);
        Check.That(GalaxyOriginalDustFrame.DistanceFade(float.NaN,frame) is null);
        Check.Equal(1f,GalaxyOriginalDustFrame.DistanceFade(200,frame with{TransitionWidth=0})!.Value);
        var inconsistent=Published;inconsistent[2]=new(1,30,30,6250,12);
        Check.That(!GalaxyOriginalDustFrame.TryCreate(Inputs,inconsistent,0,out _));
    }
}