using XFEEDToolBox.Core.Navigation;
using XFEExtension.NetCore.XUnit.Attributes;
namespace XFEEDToolBox.Test;
[TestFixture]
public sealed class ScoOriginalEffectQualificationTests
{
[Test]public void CompleteOriginalPredicateRequiresAllFourConditionsNotJustARegisteredPointer()
{
Check.Equal(44,ScoOriginalEffectQualification.ExternalPredicateCode.Length);
Check.Equal((byte)0xC3,ScoOriginalEffectQualification.ExternalPredicateCode[^1]);
for(var bits=0;bits<16;bits++)Check.Equal(bits==15,ScoOriginalEffectQualification.ExternalEnabled((bits&1)!=0,(bits&2)!=0,(bits&4)!=0,(bits&8)!=0));
}
[Test]public void ZeroWeightOrZeroVectorProvesNoTargetAdditionWhileNonzeroAndUnknownDoNot()
{
Check.That(ScoOriginalEffectQualification.TargetCacheHasZeroEffect(0,100,200,300));
Check.That(ScoOriginalEffectQualification.TargetCacheHasZeroEffect(1,0,0,0));
foreach(var value in new[]{(.5,0d,0d,1d),(double.NaN,0d,0d,0d),(0d,double.NaN,0d,0d),(2d,0d,0d,0d),(-1d,0d,0d,0d)})
Check.That(!ScoOriginalEffectQualification.TargetCacheHasZeroEffect(value.Item1,value.Item2,value.Item3,value.Item4));
}
[Test]public void CompletedOutputRequiresExactIdentityThreadStepAndAtMostTwentyFiveMillisecondsLag()
{
bool Fresh(ulong entity=1,ulong world=2,uint thread=3,ulong at=1000,ulong now=1025,ulong step=1,double dt=.025)
=>ScoOriginalEffectQualification.FreshCompletedOutput(entity,world,1,2,thread,3,at,now,step,dt);
Check.That(Fresh());
Check.That(!Fresh(now:1026));Check.That(!Fresh(entity:2));Check.That(!Fresh(world:3));Check.That(!Fresh(thread:4));
Check.That(!Fresh(step:0));Check.That(!Fresh(at:1026));Check.That(!Fresh(dt:double.NaN));Check.That(!Fresh(dt:.026));
Check.That(Fresh(now:1011,dt:.005));Check.That(!Fresh(now:1012,dt:.005));
}
}
using XFEEDToolBox.Core.Navigation;
using XFEExtension.NetCore.XUnit.Attributes;
namespace XFEEDToolBox.Test;
[TestFixture]
public sealed class ScoOriginalEffectQualificationTests
{
[Test]public void CompleteOriginalPredicateRequiresAllFourConditionsNotJustARegisteredPointer()
{
Check.Equal(44,ScoOriginalEffectQualification.ExternalPredicateCode.Length);
Check.Equal((byte)0xC3,ScoOriginalEffectQualification.ExternalPredicateCode[^1]);
for(var bits=0;bits<16;bits++)Check.Equal(bits==15,ScoOriginalEffectQualification.ExternalEnabled((bits&1)!=0,(bits&2)!=0,(bits&4)!=0,(bits&8)!=0));
}
[Test]public void ZeroWeightOrZeroVectorProvesNoTargetAdditionWhileNonzeroAndUnknownDoNot()
{
Check.That(ScoOriginalEffectQualification.TargetCacheHasZeroEffect(0,100,200,300));
Check.That(ScoOriginalEffectQualification.TargetCacheHasZeroEffect(1,0,0,0));
foreach(var value in new[]{(.5,0d,0d,1d),(double.NaN,0d,0d,0d),(0d,double.NaN,0d,0d),(2d,0d,0d,0d),(-1d,0d,0d,0d)})
Check.That(!ScoOriginalEffectQualification.TargetCacheHasZeroEffect(value.Item1,value.Item2,value.Item3,value.Item4));
}
[Test]public void CompletedOutputRequiresExactIdentityThreadStepAndAtMostTwentyFiveMillisecondsLag()
{
bool Fresh(ulong entity=1,ulong world=2,uint thread=3,ulong at=1000,ulong now=1025,ulong step=1,double dt=.025)
=>ScoOriginalEffectQualification.FreshCompletedOutput(entity,world,1,2,thread,3,at,now,step,dt);
Check.That(Fresh());
Check.That(!Fresh(now:1026));Check.That(!Fresh(entity:2));Check.That(!Fresh(world:3));Check.That(!Fresh(thread:4));
Check.That(!Fresh(step:0));Check.That(!Fresh(at:1026));Check.That(!Fresh(dt:double.NaN));Check.That(!Fresh(dt:.026));
Check.That(Fresh(now:1011,dt:.005));Check.That(!Fresh(now:1012,dt:.005));
}
}