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 DockingOriginalResetProofTests
{
    private static readonly DateTimeOffset Now=DateTimeOffset.FromUnixTimeMilliseconds(10000);
    private static JsonElement Receipt(double before=.05,double sourceBefore=.05,double after=0,double sourceAfter=0,string entity="7",long market=8,long at=9900,bool applied=true,bool failed=false,double actual=0,double controller=0,bool called=true)
        =>JsonSerializer.SerializeToElement(new{accumulatorBefore=before,sourceBefore,accumulatorAfter=after,sourceAfter,actualThrottleAfter=actual,controllerThrottleAfter=controller,entityId=entity,marketId=market,observedAtUnixMilliseconds=at,applied,failed,expired=false,pending=false,originalResetCalled=called,node="a",source="c",registry="b"});
    private static bool Valid(JsonElement value)=>DockingValidationProof.OriginalResetZero(value,7,8,Now.AddMilliseconds(-200),Now,true);
    [Test]public void ActualNonzeroResetMayPassButDoesNotProvePersistent075()
    {var value=Receipt();Check.That(Valid(value));Check.That(!DockingValidationProof.Persistent075(value));}
    [Test]public void RetainedZeroCannotCountButOriginalPerFrameAggregateMayAlreadyBeCleared()
    {Check.That(!Valid(Receipt(before:0)));Check.That(Valid(Receipt(sourceBefore:0)));}
    private static JsonElement Published(double source=.05,string node="a",string registry="b",string output="c",long at=9850)
        =>JsonSerializer.SerializeToElement(new{expectedType=true,node,registry,source=output,sourceName="ForwardReverseThrust",absoluteName="ForwardReverseThrust_Set",zeroName="SetSpeedZero",observedAtUnixMilliseconds=at,sourceAfter=source,accumulatorAfter=source});
    [Test]public void IndependentPublishedSourceMustBeNonzeroFreshAndSameNode()
    {
        var receipt=Receipt(sourceBefore:0);
        Check.That(DockingValidationProof.PriorPublishedResetSource(receipt,Published(),"a","c","b"));
        Check.That(!DockingValidationProof.PriorPublishedResetSource(receipt,Published(source:0),"a","c","b"));
        Check.That(!DockingValidationProof.PriorPublishedResetSource(receipt,Published(node:"d"),"a","c","b"));
        Check.That(!DockingValidationProof.PriorPublishedResetSource(receipt,Published(registry:"d"),"a","c","b"));
        Check.That(!DockingValidationProof.PriorPublishedResetSource(receipt,Published(output:"d"),"a","c","b"));
        Check.That(!DockingValidationProof.PriorPublishedResetSource(receipt,Published(at:9600),"a","c","b"));
        Check.That(!DockingValidationProof.PriorPublishedResetSource(receipt,Published(at:9950),"a","c","b"));
        Check.That(!DockingValidationProof.PriorPublishedResetSource(receipt,Published(source:.75),"a","c","b"));
    }
    [Test]public void ControllerOnlyZeroAndMissingActualFieldsCannotPass()
    {
        Check.That(!Valid(Receipt(sourceAfter:.05)));Check.That(!Valid(Receipt(after:.05)));
        Check.That(!Valid(Receipt(actual:.05)));Check.That(!Valid(Receipt(controller:.05)));
        var absent=System.Text.Json.Nodes.JsonNode.Parse(Receipt().GetRawText())!.AsObject();absent.Remove("actualThrottleAfter");
        Check.That(!Valid(JsonSerializer.SerializeToElement(absent)));
    }
    [Test]public void DifferentShipMarketOrStaleAndFutureReceiptsCannotPass()
    {Check.That(!Valid(Receipt(entity:"9")));Check.That(!Valid(Receipt(market:9)));Check.That(!Valid(Receipt(at:9700)));Check.That(!Valid(Receipt(at:10001)));}
    [Test]public void FailedOrUnappliedReceiptCannotPass()
    {Check.That(!Valid(Receipt(applied:false)));Check.That(!Valid(Receipt(failed:true)));Check.That(!Valid(Receipt(called:false)));}
}