Minecraft-Console-Client/MinecraftClient.Tests/Pathing/Execution/PathTimingContractTests.cs
2026-04-13 17:20:46 +00:00

69 lines
3 KiB
C#

using MinecraftClient.Tests.Pathing.Execution.Contracts;
using Xunit;
namespace MinecraftClient.Tests.Pathing.Execution;
public sealed class PathTimingContractTests
{
[Fact]
public void Run_ManagerAcceptedAscendChain_CapturesPerSegmentTicks_AndZeroReplan()
{
PathingExecutionScenario scenario = PathingExecutionScenarioCatalog.Get("manager-accepted-ascend-chain");
PathingScenarioResult result = PathingScenarioRunner.RunAccepted(scenario);
Assert.Equal(0, result.ReplanCount);
Assert.True(result.Completed);
Assert.Equal(6, result.SegmentRuns.Count);
Assert.All(result.SegmentRuns, run => Assert.True(run.ElapsedTicks > 0));
}
[Theory]
[InlineData("same-move-ascend-staircase")]
[InlineData("same-move-descend-staircase")]
public void Scenario_ExecutionStaysWithinTimingBudget(string scenarioId)
{
PathingExecutionScenario scenario = PathingExecutionScenarioCatalog.Get(scenarioId);
PathingTimingBudget budget = PathingContractStore.LoadFromRepositoryRoot().GetTiming(scenarioId);
PathingScenarioResult result = PathingScenarioRunner.RunAccepted(scenario);
PathingContractAssert.TimingMatches(budget, result);
}
[Theory]
[InlineData("repeated-cardinal-parkour-chain")]
[InlineData("repeated-diagonal-parkour-chain")]
[InlineData("obstructed-parkour-l-turns")]
[InlineData("vertical-jump-mix")]
[InlineData("diagonal-vertical-mix")]
public void JumpCombo_ExecutionStaysWithinBudget(string scenarioId)
{
PathingExecutionScenario scenario = PathingExecutionScenarioCatalog.Get(scenarioId);
PathingTimingBudget budget = PathingContractStore.LoadFromRepositoryRoot().GetTiming(scenarioId);
PathingScenarioResult result = PathingScenarioRunner.RunAccepted(scenario);
PathingContractAssert.TimingMatches(budget, result);
}
[Theory]
[InlineData("same-move-straight-traverse-chain")]
[InlineData("same-move-diagonal-chain")]
[InlineData("same-move-ascend-staircase")]
[InlineData("same-move-descend-staircase")]
[InlineData("same-move-aligned-parkour-chain")]
[InlineData("mixed-traverse-turn-parkour-turn-traverse")]
[InlineData("mixed-diagonal-ascend-traverse-descend")]
[InlineData("mixed-traverse-ascend-parkour-descend")]
[InlineData("turn-density-alternating-traverse-diagonal-chain")]
[InlineData("speed-carry-repeated-traverse-ascend")]
[InlineData("speed-carry-repeated-traverse-descend")]
[InlineData("speed-carry-repeated-traverse-parkour")]
public void LongRoute_ExecutionStaysWithinBudget(string scenarioId)
{
PathingExecutionScenario scenario = PathingExecutionScenarioCatalog.Get(scenarioId);
PathingTimingBudget budget = PathingContractStore.LoadFromRepositoryRoot().GetTiming(scenarioId);
PathingScenarioResult result = PathingScenarioRunner.RunAccepted(scenario);
PathingContractAssert.TimingMatches(budget, result);
}
}