using XFEEDToolBox.Core.Navigation; using XFEExtension.NetCore.XUnit.Attributes; namespace XFEEDToolBox.Test; [TestFixture]public sealed class ShipDamageRecoveryPolicyTests { [Test]public void OldDamageClearsAfterThreeSecondsOfFreshStableSamples() { var state=ShipDamageRecoveryPolicy.Observe(false,true,0,0,1000); for(ulong now=1100;now<4000;now+=100) {state=ShipDamageRecoveryPolicy.Observe(state.Emergency,false,state.StableSince,now-100,now);Check.That(state.Emergency);} Check.That(!ShipDamageRecoveryPolicy.Observe(state.Emergency,false,state.StableSince,3900,4000).Emergency); } [Test]public void ContinuingDamageRestartsTheStableInterval() { var state=ShipDamageRecoveryPolicy.Observe(true,true,1000,3900,4000); Check.Equal(4000UL,state.StableSince);Check.That(state.Emergency); Check.That(ShipDamageRecoveryPolicy.Observe(true,false,state.StableSince,4500,4600).Emergency); } [Test]public void MissingTelemetryDoesNotCountAsStableFlight() { var state=ShipDamageRecoveryPolicy.Observe(true,false,1000,1200,5000); Check.That(state.Emergency);Check.Equal(5000UL,state.StableSince); } [Test]public void ANewShipIdentityDoesNotInheritThePreviousEmergency() { var state=ShipDamageRecoveryPolicy.Observe(false,false,1000,1200,1300); Check.That(!state.Emergency);Check.Equal(1300UL,state.StableSince); } [Test]public void ABackwardsClockRestartsObservationWithoutUnderflow() { var state=ShipDamageRecoveryPolicy.Observe(true,false,1500,1600,1000); Check.That(state.Emergency);Check.Equal(1000UL,state.StableSince); } }