acdream/tests/AcDream.App.Tests/Net/StaminaExhaustionEdgeTrackerTests.cs

52 lines
1.4 KiB
C#

using AcDream.App.Net;
namespace AcDream.App.Tests.Net;
public sealed class StaminaExhaustionEdgeTrackerTests
{
[Theory]
[InlineData(100)]
[InlineData(0)]
public void FirstSample_EstablishesBaselineWithoutNotification(int stamina)
{
var tracker = new StaminaExhaustionEdgeTracker();
Assert.False(tracker.Observe(stamina));
}
[Fact]
public void RepeatedStatsTicks_DoNotRedispatchMovement()
{
var tracker = new StaminaExhaustionEdgeTracker();
Assert.False(tracker.Observe(100));
Assert.False(tracker.Observe(99));
Assert.False(tracker.Observe(50));
Assert.False(tracker.Observe(1));
}
[Fact]
public void ExhaustedStateTransitions_ReportExactlyOncePerEdge()
{
var tracker = new StaminaExhaustionEdgeTracker();
Assert.False(tracker.Observe(50));
Assert.True(tracker.Observe(0));
Assert.False(tracker.Observe(0));
Assert.True(tracker.Observe(1));
Assert.False(tracker.Observe(80));
}
[Fact]
public void Reset_PreventsCrossGenerationSyntheticEdge()
{
var tracker = new StaminaExhaustionEdgeTracker();
Assert.False(tracker.Observe(50));
Assert.True(tracker.Observe(0));
tracker.Reset();
Assert.False(tracker.Observe(75));
Assert.True(tracker.Observe(0));
}
}