XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
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));
    }
}