using XFEEDToolBox.Core.Navigation; using XFEExtension.NetCore.XUnit.Attributes; namespace XFEEDToolBox.Test; [TestFixture] public class OriginalCruiseCycleQualificationTests { private static readonly OriginalCruiseCycleIdentity Id=new(new('a',32),new('b',32),4,12,24); private static readonly string StopId=new('c',32); private static OriginalCruiseCycleQualification Started(int count=5) {var proof=new OriginalCruiseCycleQualification();Check.That(proof.Begin(Id,1000,true,1));for(var i=1;i<=count;i++)proof.Observe(12,24,(ulong)(1000+i*20),2);return proof;} [Test]public void OneOriginalCycleRequiresFiveUpdatesAndLaterOff() {var proof=Started();Check.That(proof.Stop(Id,StopId,1120,true,2,3,true));Check.That(!proof.Qualified);proof.Observe(12,24,1140,3);Check.That(proof.Qualified);Check.Equal(5,proof.Completed!.ActiveSamples);} [Test]public void DuplicateAndReversedTimestampsCannotCountAsFiveUpdates() {var proof=Started(0);for(var i=0;i<8;i++){proof.Observe(12,24,1020,2);proof.Observe(12,24,1010,2);}Check.Equal(1,proof.ActiveSamples);Check.That(!proof.Stop(Id,StopId,1120,true,2,0,true));} [Test]public void AnotherShipOrReferenceCannotSupplyActiveFrames() {var proof=Started(0);for(var i=1;i<8;i++){proof.Observe(13,24,(ulong)(1000+i*20),2);proof.Observe(12,25,(ulong)(1000+i*20),2);}Check.Equal(0,proof.ActiveSamples);} [Test]public void ASecondEnableCannotBorrowTheEarlierCyclesFrames() {var proof=Started();var next=Id with{StartRequestId=new('d',32)};Check.That(proof.Begin(next,1200,true,1));Check.Equal(0,proof.ActiveSamples);Check.That(!proof.Stop(next,StopId,1250,true,2,0,true));} [Test]public void AcknowledgedEnableWithoutOriginalCallCannotQualify() {var proof=new OriginalCruiseCycleQualification();Check.That(!proof.Begin(Id,1000,false,1));for(var i=1;i<8;i++)proof.Observe(12,24,(ulong)(1000+i*20),2);Check.That(!proof.Stop(Id,StopId,1200,true,2,0,true));} [Test]public void StopMustMatchOwnerRequestSelectionAndShip() {foreach(var different in new[]{Id with{Owner=new('d',32)},Id with{StartRequestId=new('d',32)},Id with{SelectionGeneration=5},Id with{Entity=13},Id with{World=25}}){var proof=Started();Check.That(!proof.Stop(different,StopId,1120,true,2,0,true));proof.Observe(12,24,1140,0);Check.That(!proof.Qualified);}} [Test]public void IdleObservationAndGlobalDisableCountsCannotReplaceAnOriginalStop() {var proof=Started();Check.That(!proof.Stop(Id,StopId,1120,false,0,0,true));proof.Observe(12,24,1140,0);Check.That(!proof.Qualified);} [Test]public void AutomaticExpiryIsNotTheExplicitReleaseQualification() {var proof=Started();Check.That(!proof.Stop(Id,StopId,1120,true,2,3,false));proof.Observe(12,24,1140,3);Check.That(!proof.Qualified);} [Test]public void OffMustFollowTheCallAndBelongToTheSameMainShip() {var proof=Started();Check.That(proof.Stop(Id,StopId,1120,true,2,3,true));proof.Observe(12,24,1120,3);proof.Observe(13,24,1140,3);proof.Observe(12,25,1140,3);Check.That(!proof.Qualified);proof.Observe(12,24,1160,0);Check.That(proof.Qualified);} }