using System.Text.Json;
using XFEEDToolBox.Core.Navigation;
using XFEExtension.NetCore.XUnit.Attributes;
namespace XFEEDToolBox.Test;
[TestFixture]
public class NativeDockingHandoffTests
{
private static JsonElement Local(double throttle,bool controllerZero=true,bool sent=true)=>JsonSerializer.SerializeToElement(new{throttle,docking=new{throttleZero=controllerZero,zeroThrottleInputSent=sent}});
[Test]public void ControllerZeroReceiptCannotHideAnActualSeventyFivePercentInput()
{
Check.That(!NativeSystemFlightObservation.DockingInputZeroConfirmed(Local(.75)));
Check.That(!NativeSystemFlightObservation.DockingInputZeroConfirmed(Local(.05)));
Check.That(NativeSystemFlightObservation.DockingInputZeroConfirmed(Local(0)));
}
[Test]public void ActualZeroRequiresBothTheControllerStateAndOriginalInputReceipt()
{
Check.That(!NativeSystemFlightObservation.DockingInputZeroConfirmed(Local(0,false)));
Check.That(!NativeSystemFlightObservation.DockingInputZeroConfirmed(Local(0,true,false)));
Check.That(!NativeSystemFlightObservation.DockingInputZeroConfirmed(JsonSerializer.SerializeToElement(new{docking=new{throttleZero=true,zeroThrottleInputSent=true}})));
}
[Test]public void LandingPolicyReleasesTheTemporaryOverlayBeforeRequestingOriginalZero()
{
var at=DateTimeOffset.UtcNow;
var station=new SystemNavigationTarget(7,99,"Station",SystemTargetKind.Station,77);
var frame=new SystemFlightFrame{Sequence=1,ObservedAt=at,GameSha256=new('a',64),LoadoutFingerprint="ship",ShipEntity=1,InGame=true,GeometryVerified=true,SystemAddress=7,SelectedTarget=station,ReferenceWorld=7,
Position=new(0,0,-6000),TargetPosition=new(0,0,0),Forward=new(0,0,1),Up=new(0,1,0),TargetDistance=6000,Speed=200,Throttle=.75,
MaximumNormalSpeed=300,MaximumCruiseSpeed=1e10,BrakingAcceleration=10,TranslationAcceleration=10,LegalApproachSpeed=100,AssistAlignmentDegrees=5,Mode=LocalFlightMode.Normal,Assists=new(false,true,false),
DockingAssist=NativeAssistState.Ready,DockingAssistEnabled=true,Clearance=new(77,DockingPermission.Granted,1,at,at.AddSeconds(1))};
var decision=new SystemFlightNavigator().Decide(frame,station,at);
Check.That(decision.Throttle==0);Check.That(decision.Actions.HasFlag(SystemNavigationAction.EnableDockingAssist));
Check.That(decision.Actions.HasFlag(SystemNavigationAction.ReleaseFlightAxes));
}
}
using System.Text.Json;
using XFEEDToolBox.Core.Navigation;
using XFEExtension.NetCore.XUnit.Attributes;
namespace XFEEDToolBox.Test;
[TestFixture]
public class NativeDockingHandoffTests
{
private static JsonElement Local(double throttle,bool controllerZero=true,bool sent=true)=>JsonSerializer.SerializeToElement(new{throttle,docking=new{throttleZero=controllerZero,zeroThrottleInputSent=sent}});
[Test]public void ControllerZeroReceiptCannotHideAnActualSeventyFivePercentInput()
{
Check.That(!NativeSystemFlightObservation.DockingInputZeroConfirmed(Local(.75)));
Check.That(!NativeSystemFlightObservation.DockingInputZeroConfirmed(Local(.05)));
Check.That(NativeSystemFlightObservation.DockingInputZeroConfirmed(Local(0)));
}
[Test]public void ActualZeroRequiresBothTheControllerStateAndOriginalInputReceipt()
{
Check.That(!NativeSystemFlightObservation.DockingInputZeroConfirmed(Local(0,false)));
Check.That(!NativeSystemFlightObservation.DockingInputZeroConfirmed(Local(0,true,false)));
Check.That(!NativeSystemFlightObservation.DockingInputZeroConfirmed(JsonSerializer.SerializeToElement(new{docking=new{throttleZero=true,zeroThrottleInputSent=true}})));
}
[Test]public void LandingPolicyReleasesTheTemporaryOverlayBeforeRequestingOriginalZero()
{
var at=DateTimeOffset.UtcNow;
var station=new SystemNavigationTarget(7,99,"Station",SystemTargetKind.Station,77);
var frame=new SystemFlightFrame{Sequence=1,ObservedAt=at,GameSha256=new('a',64),LoadoutFingerprint="ship",ShipEntity=1,InGame=true,GeometryVerified=true,SystemAddress=7,SelectedTarget=station,ReferenceWorld=7,
Position=new(0,0,-6000),TargetPosition=new(0,0,0),Forward=new(0,0,1),Up=new(0,1,0),TargetDistance=6000,Speed=200,Throttle=.75,
MaximumNormalSpeed=300,MaximumCruiseSpeed=1e10,BrakingAcceleration=10,TranslationAcceleration=10,LegalApproachSpeed=100,AssistAlignmentDegrees=5,Mode=LocalFlightMode.Normal,Assists=new(false,true,false),
DockingAssist=NativeAssistState.Ready,DockingAssistEnabled=true,Clearance=new(77,DockingPermission.Granted,1,at,at.AddSeconds(1))};
var decision=new SystemFlightNavigator().Decide(frame,station,at);
Check.That(decision.Throttle==0);Check.That(decision.Actions.HasFlag(SystemNavigationAction.EnableDockingAssist));
Check.That(decision.Actions.HasFlag(SystemNavigationAction.ReleaseFlightAxes));
}
}