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