test: complete sidewall fixture matrix

This commit is contained in:
BruceChen 2026-04-18 15:29:42 +00:00
parent 056d7afef1
commit 43db3950e3
2 changed files with 113 additions and 8 deletions

View file

@ -13,26 +13,40 @@ public static class SidewallParkourScenarioBuilder
public static IEnumerable<object[]> AcceptedCases()
{
yield return ["sidewall-flat-gap2-wo0", 2, 0, 0];
yield return ["sidewall-flat-gap3-wo1", 3, 0, 1];
yield return ["sidewall-ascend-gap2-dy+1-wo0", 2, 1, 0];
yield return ["sidewall-ascend-gap3-dy+1-wo0", 3, 1, 0];
yield return ["sidewall-ascend-gap3-dy+1-wo1", 3, 1, 1];
yield return ["sidewall-descend-gap2-dy-1-wo0", 2, -1, 0];
yield return ["sidewall-descend-gap3-dy-1-wo1", 3, -1, 1];
yield return ["sidewall-descend-gap2-dy-2-wo0", 2, -2, 0];
yield return ["sidewall-descend-gap3-dy-2-wo0", 3, -2, 0];
yield return ["sidewall-descend-gap4-dy-2-wo0", 4, -2, 0];
yield return ["sidewall-descend-gap5-dy-2-wo0", 5, -2, 0];
yield return ["sidewall-descend-gap3-dy-2-wo1", 3, -2, 1];
yield return ["sidewall-descend-gap4-dy-2-wo1", 4, -2, 1];
yield return ["sidewall-descend-gap5-dy-2-wo1", 5, -2, 1];
yield return ["sidewall-descend-gap2-dy-1-wo0", 2, -1, 0];
yield return ["sidewall-descend-gap3-dy-1-wo0", 3, -1, 0];
yield return ["sidewall-descend-gap4-dy-1-wo0", 4, -1, 0];
yield return ["sidewall-descend-gap5-dy-1-wo0", 5, -1, 0];
yield return ["sidewall-descend-gap3-dy-1-wo1", 3, -1, 1];
yield return ["sidewall-descend-gap4-dy-1-wo1", 4, -1, 1];
yield return ["sidewall-descend-gap5-dy-1-wo1", 5, -1, 1];
yield return ["sidewall-flat-gap2-wo0", 2, 0, 0];
yield return ["sidewall-flat-gap3-wo0", 3, 0, 0];
yield return ["sidewall-flat-gap4-wo0", 4, 0, 0];
yield return ["sidewall-flat-gap3-wo1", 3, 0, 1];
yield return ["sidewall-flat-gap4-wo1", 4, 0, 1];
}
public static IEnumerable<object[]> RejectedCases()
{
yield return ["sidewall-flat-gap5-wo0", 5, 0, 0];
yield return ["sidewall-flat-gap5-wo1", 5, 0, 1];
yield return ["sidewall-ascend-gap4-dy+1-wo0", 4, 1, 0];
yield return ["sidewall-ascend-gap4-dy+1-wo1", 4, 1, 1];
yield return ["sidewall-descend-gap6-dy-1-wo0", 6, -1, 0];
yield return ["sidewall-descend-gap6-dy-1-wo1", 6, -1, 1];
yield return ["sidewall-descend-gap6-dy-2-wo0", 6, -2, 0];
yield return ["sidewall-descend-gap6-dy-2-wo1", 6, -2, 1];
yield return ["sidewall-descend-gap6-dy-1-wo0", 6, -1, 0];
yield return ["sidewall-descend-gap6-dy-1-wo1", 6, -1, 1];
yield return ["sidewall-flat-gap5-wo0", 5, 0, 0];
yield return ["sidewall-flat-gap5-wo1", 5, 0, 1];
}
internal static PathingExecutionScenario Create(string scenarioId, int gap, int deltaY, int wallOffset, int maxExecutionTicks = 700)

View file

@ -5,6 +5,62 @@ namespace MinecraftClient.Tests.Pathing.Execution;
public sealed class SidewallParkourScenarioBuilderTests
{
[Fact]
public void AcceptedCases_MatchLiveSidewallMatrix()
{
string[] caseIds = SidewallParkourScenarioBuilder.AcceptedCases()
.Select(static c => Assert.IsType<string>(c[0]))
.ToArray();
Assert.Equal(
[
"sidewall-ascend-gap2-dy+1-wo0",
"sidewall-ascend-gap3-dy+1-wo0",
"sidewall-ascend-gap3-dy+1-wo1",
"sidewall-descend-gap2-dy-2-wo0",
"sidewall-descend-gap3-dy-2-wo0",
"sidewall-descend-gap4-dy-2-wo0",
"sidewall-descend-gap5-dy-2-wo0",
"sidewall-descend-gap3-dy-2-wo1",
"sidewall-descend-gap4-dy-2-wo1",
"sidewall-descend-gap5-dy-2-wo1",
"sidewall-descend-gap2-dy-1-wo0",
"sidewall-descend-gap3-dy-1-wo0",
"sidewall-descend-gap4-dy-1-wo0",
"sidewall-descend-gap5-dy-1-wo0",
"sidewall-descend-gap3-dy-1-wo1",
"sidewall-descend-gap4-dy-1-wo1",
"sidewall-descend-gap5-dy-1-wo1",
"sidewall-flat-gap2-wo0",
"sidewall-flat-gap3-wo0",
"sidewall-flat-gap4-wo0",
"sidewall-flat-gap3-wo1",
"sidewall-flat-gap4-wo1",
],
caseIds);
}
[Fact]
public void RejectedCases_MatchLiveSidewallMatrix()
{
string[] caseIds = SidewallParkourScenarioBuilder.RejectedCases()
.Select(static c => Assert.IsType<string>(c[0]))
.ToArray();
Assert.Equal(
[
"sidewall-ascend-gap4-dy+1-wo0",
"sidewall-ascend-gap4-dy+1-wo1",
"sidewall-descend-gap6-dy-2-wo0",
"sidewall-descend-gap6-dy-2-wo1",
"sidewall-descend-gap6-dy-1-wo0",
"sidewall-descend-gap6-dy-1-wo1",
"sidewall-flat-gap5-wo0",
"sidewall-flat-gap5-wo1",
],
caseIds);
}
[Fact]
public void BuildWorld_FlatGap2Wo0_MatchesLiveRouteGeometry()
{
@ -16,6 +72,9 @@ public sealed class SidewallParkourScenarioBuilderTests
Assert.Equal(Material.Stone, world.GetBlock(new Location(99, 78, 100)).Type);
Assert.Equal(Material.Stone, world.GetBlock(new Location(99, 79, 102)).Type);
Assert.Equal(Material.Air, world.GetBlock(new Location(100, 79, 101)).Type);
Assert.Equal(Material.Stone, world.GetBlock(new Location(98, 78, 102)).Type);
Assert.Equal(Material.Stone, world.GetBlock(new Location(97, 79, 106)).Type);
Assert.Equal(Material.Air, world.GetBlock(new Location(98, 79, 103)).Type);
}
[Fact]
@ -44,4 +103,36 @@ public sealed class SidewallParkourScenarioBuilderTests
Assert.Equal(106, scenario.Goal.Z);
Assert.Equal(0f, scenario.StartYaw);
}
[Fact]
public void Create_AscendGap3Wo1_ComputesGoalForLaterRaisedEndpoint()
{
PathingExecutionScenario scenario = SidewallParkourScenarioBuilder.Create(
"sidewall-ascend-gap3-dy+1-wo1",
gap: 3,
deltaY: 1,
wallOffset: 1);
Assert.Equal(new Location(100.5, 80, 100.5), scenario.Start);
Assert.Equal(97, scenario.Goal.X);
Assert.Equal(83, scenario.Goal.Y);
Assert.Equal(109, scenario.Goal.Z);
Assert.Equal(0f, scenario.StartYaw);
}
[Fact]
public void Create_DescendGap5Wo1_ComputesGoalForLowerEndpoint()
{
PathingExecutionScenario scenario = SidewallParkourScenarioBuilder.Create(
"sidewall-descend-gap5-dy-2-wo1",
gap: 5,
deltaY: -2,
wallOffset: 1);
Assert.Equal(new Location(100.5, 80, 100.5), scenario.Start);
Assert.Equal(97, scenario.Goal.X);
Assert.Equal(74, scenario.Goal.Y);
Assert.Equal(115, scenario.Goal.Z);
Assert.Equal(0f, scenario.StartYaw);
}
}