namespace XFEEDToolBox.Plugin;
internal static unsafe partial class Navigation
{
private static uint LocalDockingHandoffSelfTest()
{
uint passed=0;
if(LocalDockingZeroConfirmed(true,false,.5f,.75))passed|=1;
if(!LocalDockingZeroConfirmed(false,false,0,0))passed|=2;
if(!LocalDockingZeroConfirmed(false,true,.5f,0))passed|=4;
// Regression: a zero controller and old input receipt did not prove
// that the actual .75 SCA throttle had reached zero.
if(!LocalDockingZeroConfirmed(false,true,0,.75))passed|=8;
if(LocalDockingZeroConfirmed(false,true,0,0))passed|=16;
if(!LocalDockingZeroConfirmed(false,true,0,double.NaN))passed|=32;
if(!LocalDockingZeroConfirmed(false,true,0,double.PositiveInfinity))passed|=64;
var memory=Platform.Allocate(8192);if(memory==0)return passed;
var saved=(dockingZeroAxisRoot,dockingZeroAxisVersion,dockingZeroAxisCommits,dockingZeroAxisRestoresSkipped);
try
{
var root=memory;var controller=memory+4096;
void Reset(){Write(root+0x2F8,controller);Write(root+0x70,.75f);Write(root+0x80,.2f);Write(controller+0x680,0f);}
Reset();if(CommitOriginalDockingZeroAxis(root,controller,.75f,true,true,out var changed)&&changed&&Read<float>(root+0x70)==0&&Read<float>(root+0x80)==.2f)passed|=128;
Reset();Write(root+0x70,.5f);if(!CommitOriginalDockingZeroAxis(root,controller,.75f,true,true,out _)&&Read<float>(root+0x70)==.5f)passed|=256;
Reset();if(!CommitOriginalDockingZeroAxis(root,controller,.75f,false,true,out _)&&Read<float>(root+0x70)==.75f)passed|=512;
Reset();if(!CommitOriginalDockingZeroAxis(root,controller,.75f,true,false,out _)&&Read<float>(root+0x70)==.75f)passed|=1024;
Reset();Write(controller+0x680,.1f);if(!CommitOriginalDockingZeroAxis(root,controller,.75f,true,true,out _)&&Read<float>(root+0x70)==.75f)passed|=2048;
Reset();Write(root+0x2F8,controller+8);if(!CommitOriginalDockingZeroAxis(root,controller,.75f,true,true,out _)&&Read<float>(root+0x70)==.75f)passed|=4096;
Reset();if(!CommitOriginalDockingZeroAxis(root,controller,float.NaN,true,true,out _))passed|=8192;
Reset();Write(root+0x70,0f);if(CommitOriginalDockingZeroAxis(root,controller,.75f,true,true,out changed)&&!changed)passed|=16384;
if(!CommitOriginalDockingZeroAxis(0,controller,0,true,true,out _))passed|=32768;
Reset();var outer=dockingZeroAxisVersion;
CommitOriginalDockingZeroAxis(root,controller,.75f,true,true,out _);
RestoreOverlayAxis(root,0,.75f,0,outer);
if(Read<float>(root+0x70)==0)passed|=65536;
RestoreOverlayAxis(root,0,.75f,0,outer);
if(Read<float>(root+0x70)==0)passed|=131072;
Write(root+0x80,0f);RestoreOverlayAxis(root,1,.2f,0,outer);
if(Read<float>(root+0x80)==.2f)passed|=262144;
Write(root+0x70,.3f);RestoreOverlayAxis(root,0,.75f,0,outer);
if(Read<float>(root+0x70)==.3f)passed|=524288;
Write(root+0x70,0f);RestoreOverlayAxis(root,0,.4f,0,dockingZeroAxisVersion);
if(Read<float>(root+0x70)==.4f)passed|=1048576;
var other=root+256;Write(other+0x70,0f);RestoreOverlayAxis(other,0,.6f,0,outer);
if(Read<float>(other+0x70)==.6f)passed|=2097152;
Reset();Write(root+0x70,0f);outer=dockingZeroAxisVersion;
if(CommitOriginalDockingZeroAxis(root,controller,0,true,true,out changed)&&!changed&&dockingZeroAxisVersion!=outer)passed|=4194304;
RestoreOverlayAxis(root,0,.75f,0,outer);
if(Read<float>(root+0x70)==0)passed|=8388608;
}
finally{(dockingZeroAxisRoot,dockingZeroAxisVersion,dockingZeroAxisCommits,dockingZeroAxisRestoresSkipped)=saved;Platform.Free(memory);}
return passed;
}
#if PLUGIN_NAVIGATION
[UnmanagedCallersOnly(EntryPoint="XFENavigationLocalDockingHandoffSelfTest")]
internal static uint ExportLocalDockingHandoffSelfTest()=>RunTest(LocalDockingHandoffSelfTest);
#endif
}
namespace XFEEDToolBox.Plugin;
internal static unsafe partial class Navigation
{
private static uint LocalDockingHandoffSelfTest()
{
uint passed=0;
if(LocalDockingZeroConfirmed(true,false,.5f,.75))passed|=1;
if(!LocalDockingZeroConfirmed(false,false,0,0))passed|=2;
if(!LocalDockingZeroConfirmed(false,true,.5f,0))passed|=4;
// Regression: a zero controller and old input receipt did not prove
// that the actual .75 SCA throttle had reached zero.
if(!LocalDockingZeroConfirmed(false,true,0,.75))passed|=8;
if(LocalDockingZeroConfirmed(false,true,0,0))passed|=16;
if(!LocalDockingZeroConfirmed(false,true,0,double.NaN))passed|=32;
if(!LocalDockingZeroConfirmed(false,true,0,double.PositiveInfinity))passed|=64;
var memory=Platform.Allocate(8192);if(memory==0)return passed;
var saved=(dockingZeroAxisRoot,dockingZeroAxisVersion,dockingZeroAxisCommits,dockingZeroAxisRestoresSkipped);
try
{
var root=memory;var controller=memory+4096;
void Reset(){Write(root+0x2F8,controller);Write(root+0x70,.75f);Write(root+0x80,.2f);Write(controller+0x680,0f);}
Reset();if(CommitOriginalDockingZeroAxis(root,controller,.75f,true,true,out var changed)&&changed&&Read<float>(root+0x70)==0&&Read<float>(root+0x80)==.2f)passed|=128;
Reset();Write(root+0x70,.5f);if(!CommitOriginalDockingZeroAxis(root,controller,.75f,true,true,out _)&&Read<float>(root+0x70)==.5f)passed|=256;
Reset();if(!CommitOriginalDockingZeroAxis(root,controller,.75f,false,true,out _)&&Read<float>(root+0x70)==.75f)passed|=512;
Reset();if(!CommitOriginalDockingZeroAxis(root,controller,.75f,true,false,out _)&&Read<float>(root+0x70)==.75f)passed|=1024;
Reset();Write(controller+0x680,.1f);if(!CommitOriginalDockingZeroAxis(root,controller,.75f,true,true,out _)&&Read<float>(root+0x70)==.75f)passed|=2048;
Reset();Write(root+0x2F8,controller+8);if(!CommitOriginalDockingZeroAxis(root,controller,.75f,true,true,out _)&&Read<float>(root+0x70)==.75f)passed|=4096;
Reset();if(!CommitOriginalDockingZeroAxis(root,controller,float.NaN,true,true,out _))passed|=8192;
Reset();Write(root+0x70,0f);if(CommitOriginalDockingZeroAxis(root,controller,.75f,true,true,out changed)&&!changed)passed|=16384;
if(!CommitOriginalDockingZeroAxis(0,controller,0,true,true,out _))passed|=32768;
Reset();var outer=dockingZeroAxisVersion;
CommitOriginalDockingZeroAxis(root,controller,.75f,true,true,out _);
RestoreOverlayAxis(root,0,.75f,0,outer);
if(Read<float>(root+0x70)==0)passed|=65536;
RestoreOverlayAxis(root,0,.75f,0,outer);
if(Read<float>(root+0x70)==0)passed|=131072;
Write(root+0x80,0f);RestoreOverlayAxis(root,1,.2f,0,outer);
if(Read<float>(root+0x80)==.2f)passed|=262144;
Write(root+0x70,.3f);RestoreOverlayAxis(root,0,.75f,0,outer);
if(Read<float>(root+0x70)==.3f)passed|=524288;
Write(root+0x70,0f);RestoreOverlayAxis(root,0,.4f,0,dockingZeroAxisVersion);
if(Read<float>(root+0x70)==.4f)passed|=1048576;
var other=root+256;Write(other+0x70,0f);RestoreOverlayAxis(other,0,.6f,0,outer);
if(Read<float>(other+0x70)==.6f)passed|=2097152;
Reset();Write(root+0x70,0f);outer=dockingZeroAxisVersion;
if(CommitOriginalDockingZeroAxis(root,controller,0,true,true,out changed)&&!changed&&dockingZeroAxisVersion!=outer)passed|=4194304;
RestoreOverlayAxis(root,0,.75f,0,outer);
if(Read<float>(root+0x70)==0)passed|=8388608;
}
finally{(dockingZeroAxisRoot,dockingZeroAxisVersion,dockingZeroAxisCommits,dockingZeroAxisRestoresSkipped)=saved;Platform.Free(memory);}
return passed;
}
#if PLUGIN_NAVIGATION
[UnmanagedCallersOnly(EntryPoint="XFENavigationLocalDockingHandoffSelfTest")]
internal static uint ExportLocalDockingHandoffSelfTest()=>RunTest(LocalDockingHandoffSelfTest);
#endif
}