using AcDream.App.Streaming; namespace AcDream.App.Tests.Streaming; public sealed class TeleportTransitCoordinatorTests { [Fact] public void ReplacementRejectsDelayedPriorDestinationAndAcceptsCurrentAdvance() { var transit = new TeleportTransitCoordinator(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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(); 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 _)); } }