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 GalaxyOriginalExposureTests
{
    [Test] public void OriginalInitialManualControlsRetainExactStoresAndProduceFiniteExposure()
    {
        var input=GalaxyOriginalExposure.InitialManualControls;
        Check.Equal(0x3F80A3D7,BitConverter.SingleToInt32Bits(input.ToeModifier));
        Check.Equal(0x40133333,BitConverter.SingleToInt32Bits(input.ShoulderModifier));
        Check.Equal(0f,input.ManualExposureEv);Check.Equal(5f,input.Offset);Check.Equal(1f,input.Slope);
        Check.That(GalaxyOriginalExposure.TryManualExposure(input,out var result));
        Check.That(float.IsFinite(result.Type2EmissiveRescaling)&&result.Type2EmissiveRescaling>0);
    }
    [Test] public void OriginalZeroDefaultIsSeparateFromAComputedViewExposure()
    {
        Check.Equal(0f,GalaxyOriginalExposure.DefaultHistogram.Type2EmissiveRescaling);
        Check.That(GalaxyOriginalExposure.DefaultHistogram.SixTexels().All(v=>v==0));
        Check.That(GalaxyOriginalExposure.TryManualExposure(new(0,1,2,0,1),out var result));
        Check.That(result.CompensatedLuminance>0&&result.Type2EmissiveRescaling>0&&result.LinearAdaptation==1);
    }
    [Test] public void EmissiveCompensationNeedsItsNamedCurveInputsAndIsNotHdrStorageScaling()
    {
        Check.That(GalaxyOriginalExposure.TryManualExposure(new(0,1,2,0,1),out var first));
        Check.That(GalaxyOriginalExposure.TryManualExposure(new(0,1.2f,2,0,1),out var changed));
        Check.That(first.Type2EmissiveRescaling!=changed.Type2EmissiveRescaling);
        Check.That(first.Type2EmissiveRescaling!=GalaxyOriginalHdr.WriteScale&&first.Type2EmissiveRescaling!=GalaxyOriginalHdr.ReadScale);
        Check.Equal(0f,GalaxyOriginalExposure.ManualConstants(new(0,1,2,0,1))[6].X);
    }
    [Test] public void InvalidOrMissingCurveParametersNeverBecomeAUnityFallback()
    {
        Check.That(!GalaxyOriginalExposure.TryManualExposure(new(float.NaN,1,2,0,1),out _));
        Check.That(!GalaxyOriginalExposure.TryManualExposure(new(0,0,0,0,0),out _));
        Check.Throws<ArgumentOutOfRangeException>(()=>GalaxyOriginalExposure.ManualConstants(new(0,0,0,0,0)));
    }
}