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)));
}
}
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)));
}
}