fix(world): remove non-retail portal exit fade
This commit is contained in:
parent
842bd89c16
commit
dded9e6b17
21 changed files with 919 additions and 347 deletions
|
|
@ -0,0 +1,133 @@
|
|||
using AcDream.App.Streaming;
|
||||
|
||||
namespace AcDream.App.Tests.Streaming;
|
||||
|
||||
public sealed class TeleportTransitCoordinatorTests
|
||||
{
|
||||
[Fact]
|
||||
public void ReplacementRejectsDelayedPriorDestinationAndAcceptsCurrentAdvance()
|
||||
{
|
||||
var transit = new TeleportTransitCoordinator<int>();
|
||||
Assert.True(transit.QueueStart(10));
|
||||
Assert.False(transit.Activate(out _));
|
||||
transit.EndActive();
|
||||
Assert.True(transit.QueueStart(11));
|
||||
Assert.False(transit.Activate(out _));
|
||||
|
||||
Assert.False(transit.OfferDestination(10, true, 100, out _));
|
||||
Assert.True(transit.OfferDestination(11, true, 110, out int accepted));
|
||||
Assert.Equal(110, accepted);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void PositionBeforeF751IsBufferedAndEqualFollowupCannotReplaceIt()
|
||||
{
|
||||
var transit = new TeleportTransitCoordinator<int>();
|
||||
|
||||
Assert.False(transit.OfferDestination(11, true, 110, out _));
|
||||
Assert.True(transit.QueueStart(11));
|
||||
Assert.True(transit.Activate(out int buffered));
|
||||
Assert.Equal(110, buffered);
|
||||
Assert.False(transit.OfferDestination(11, false, 111, out _));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InactiveOrdinaryPositionIsNeverBuffered()
|
||||
{
|
||||
var transit = new TeleportTransitCoordinator<int>();
|
||||
|
||||
Assert.False(transit.OfferDestination(11, false, 110, out _));
|
||||
Assert.True(transit.QueueStart(11));
|
||||
Assert.False(transit.Activate(out _));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DuplicateStartIsRejectedButSequenceWrapIsFresh()
|
||||
{
|
||||
var transit = new TeleportTransitCoordinator<int>();
|
||||
Assert.True(transit.QueueStart(ushort.MaxValue));
|
||||
Assert.False(transit.Activate(out _));
|
||||
transit.EndActive();
|
||||
|
||||
Assert.False(transit.CanBegin(ushort.MaxValue));
|
||||
Assert.False(transit.QueueStart(ushort.MaxValue));
|
||||
Assert.True(transit.CanBegin(0));
|
||||
Assert.True(transit.QueueStart(0));
|
||||
Assert.True(transit.HasPendingStart);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ExactHalfRangeUsesRetailLowerStampTieBreak()
|
||||
{
|
||||
var transit = new TeleportTransitCoordinator<int>();
|
||||
Assert.True(transit.QueueStart(0x8000));
|
||||
Assert.False(transit.Activate(out _));
|
||||
transit.EndActive();
|
||||
|
||||
Assert.True(transit.CanBegin(0x0000));
|
||||
Assert.True(transit.QueueStart(0x0000));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ClearSessionAllowsSameSequenceInNewSession()
|
||||
{
|
||||
var transit = new TeleportTransitCoordinator<int>();
|
||||
Assert.True(transit.QueueStart(7));
|
||||
Assert.False(transit.Activate(out _));
|
||||
|
||||
transit.ClearSession();
|
||||
|
||||
Assert.False(transit.IsActive);
|
||||
Assert.True(transit.CanBegin(7));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void PendingStartAcceptsEqualPositionUntilPresentationCanActivate()
|
||||
{
|
||||
var transit = new TeleportTransitCoordinator<int>();
|
||||
Assert.True(transit.QueueStart(11));
|
||||
|
||||
Assert.False(transit.OfferDestination(11, false, 110, out _));
|
||||
Assert.True(transit.Activate(out int buffered));
|
||||
|
||||
Assert.Equal(110, buffered);
|
||||
Assert.True(transit.IsActive);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AdvancingPositionPrunesSkippedDestination()
|
||||
{
|
||||
var transit = new TeleportTransitCoordinator<int>();
|
||||
|
||||
Assert.False(transit.OfferDestination(11, true, 110, out _));
|
||||
Assert.False(transit.OfferDestination(12, true, 120, out _));
|
||||
Assert.True(transit.QueueStart(12));
|
||||
Assert.True(transit.Activate(out int buffered));
|
||||
|
||||
Assert.Equal(120, buffered);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ObsoleteDestinationCannotSurviveSequenceWrap()
|
||||
{
|
||||
var transit = new TeleportTransitCoordinator<int>();
|
||||
|
||||
Assert.False(transit.OfferDestination(ushort.MaxValue, true, 999, out _));
|
||||
Assert.False(transit.OfferDestination(0, true, 0, out _));
|
||||
Assert.True(transit.QueueStart(0));
|
||||
Assert.True(transit.Activate(out int wrapped));
|
||||
Assert.Equal(0, wrapped);
|
||||
transit.EndActive();
|
||||
|
||||
// Advance in legal retail-newer hops until 0xFFFF is current again.
|
||||
Assert.True(transit.QueueStart(0x7FFF));
|
||||
Assert.False(transit.Activate(out _));
|
||||
transit.EndActive();
|
||||
Assert.True(transit.QueueStart(0xFFFE));
|
||||
Assert.False(transit.Activate(out _));
|
||||
transit.EndActive();
|
||||
Assert.True(transit.QueueStart(ushort.MaxValue));
|
||||
|
||||
Assert.False(transit.Activate(out _));
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue