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