feat: solved day 15 part 2
This commit is contained in:
@@ -0,0 +1,295 @@
|
||||
namespace WarehouseWoes.Tests;
|
||||
|
||||
public class WideWarehouseMapTests
|
||||
{
|
||||
[Test]
|
||||
[MethodDataSource(nameof(CalculateTotalBoxGpsCoordinatesTestCases))]
|
||||
public async Task CalculateTotalBoxGpsCoordinates_WhenCalledWithExampleInput_ItShouldReturnExpectedValue(CalculateTotalBoxGpsCoordinatesTestCase testCase)
|
||||
{
|
||||
var map = WideWarehouseMap.From(testCase.MapInput);
|
||||
|
||||
var result = map.CalculateTotalBoxGpsCoordinates();
|
||||
|
||||
await Assert.That(result).IsEqualTo(testCase.ExpectedValue);
|
||||
}
|
||||
|
||||
public static IEnumerable<Func<CalculateTotalBoxGpsCoordinatesTestCase>> CalculateTotalBoxGpsCoordinatesTestCases()
|
||||
{
|
||||
yield return () => new(
|
||||
[
|
||||
"####################",
|
||||
"##[].......[].[][]##",
|
||||
"##[]...........[].##",
|
||||
"##[]........[][][]##",
|
||||
"##[]......[]....[]##",
|
||||
"##..##......[]....##",
|
||||
"##..[]............##",
|
||||
"##..@......[].[][]##",
|
||||
"##......[][]..[]..##",
|
||||
"####################",
|
||||
],
|
||||
9021
|
||||
);
|
||||
}
|
||||
|
||||
public record CalculateTotalBoxGpsCoordinatesTestCase(string[] MapInput, int ExpectedValue);
|
||||
|
||||
[Test]
|
||||
[MethodDataSource(nameof(MoveTestCases))]
|
||||
public async Task Move_WhenCalled_ItShouldMoveValuesToExpectedPositions(MoveTestCase testCase)
|
||||
{
|
||||
var expected = WideWarehouseMap.From(testCase.ExpectedMap);
|
||||
var directions = testCase.Directions.Select(Direction.From).ToList();
|
||||
|
||||
var result = WideWarehouseMap.From(testCase.MapInput).MoveRobot(directions);
|
||||
|
||||
await Assert.That(result.Positions).IsEquivalentTo(expected.Positions);
|
||||
}
|
||||
|
||||
public static IEnumerable<Func<MoveTestCase>> MoveTestCases()
|
||||
{
|
||||
yield return () => new(
|
||||
[
|
||||
"##############",
|
||||
"##......##..##",
|
||||
"##..........##",
|
||||
"##....[][]@.##",
|
||||
"##....[]....##",
|
||||
"##..........##",
|
||||
"##############",
|
||||
],
|
||||
"<",
|
||||
[
|
||||
"##############",
|
||||
"##......##..##",
|
||||
"##..........##",
|
||||
"##...[][]@..##",
|
||||
"##....[]....##",
|
||||
"##..........##",
|
||||
"##############",
|
||||
]
|
||||
);
|
||||
|
||||
yield return () => new(
|
||||
[
|
||||
"##############",
|
||||
"##......##..##",
|
||||
"##..........##",
|
||||
"##...[][]@..##",
|
||||
"##....[]....##",
|
||||
"##..........##",
|
||||
"##############",
|
||||
],
|
||||
"v",
|
||||
[
|
||||
"##############",
|
||||
"##......##..##",
|
||||
"##..........##",
|
||||
"##...[][]...##",
|
||||
"##....[].@..##",
|
||||
"##..........##",
|
||||
"##############",
|
||||
]
|
||||
);
|
||||
|
||||
yield return () => new(
|
||||
[
|
||||
"##############",
|
||||
"##......##..##",
|
||||
"##..........##",
|
||||
"##...[][]...##",
|
||||
"##....[].@..##",
|
||||
"##..........##",
|
||||
"##############",
|
||||
],
|
||||
"v",
|
||||
[
|
||||
"##############",
|
||||
"##......##..##",
|
||||
"##..........##",
|
||||
"##...[][]...##",
|
||||
"##....[]....##",
|
||||
"##.......@..##",
|
||||
"##############",
|
||||
]
|
||||
);
|
||||
|
||||
yield return () => new(
|
||||
[
|
||||
"##############",
|
||||
"##......##..##",
|
||||
"##..........##",
|
||||
"##...[][]...##",
|
||||
"##....[]....##",
|
||||
"##.......@..##",
|
||||
"##############",
|
||||
],
|
||||
"<",
|
||||
[
|
||||
"##############",
|
||||
"##......##..##",
|
||||
"##..........##",
|
||||
"##...[][]...##",
|
||||
"##....[]....##",
|
||||
"##......@...##",
|
||||
"##############",
|
||||
]
|
||||
);
|
||||
|
||||
yield return () => new(
|
||||
[
|
||||
"##############",
|
||||
"##......##..##",
|
||||
"##..........##",
|
||||
"##...[][]...##",
|
||||
"##....[]....##",
|
||||
"##......@...##",
|
||||
"##############",
|
||||
],
|
||||
"<",
|
||||
[
|
||||
"##############",
|
||||
"##......##..##",
|
||||
"##..........##",
|
||||
"##...[][]...##",
|
||||
"##....[]....##",
|
||||
"##.....@....##",
|
||||
"##############",
|
||||
]
|
||||
);
|
||||
|
||||
yield return () => new(
|
||||
[
|
||||
"##############",
|
||||
"##......##..##",
|
||||
"##..........##",
|
||||
"##...[][]...##",
|
||||
"##....[]....##",
|
||||
"##.....@....##",
|
||||
"##############",
|
||||
],
|
||||
"^",
|
||||
[
|
||||
"##############",
|
||||
"##......##..##",
|
||||
"##...[][]...##",
|
||||
"##....[]....##",
|
||||
"##.....@....##",
|
||||
"##..........##",
|
||||
"##############",
|
||||
]
|
||||
);
|
||||
|
||||
yield return () => new(
|
||||
[
|
||||
"##############",
|
||||
"##......##..##",
|
||||
"##...[][]...##",
|
||||
"##....[]....##",
|
||||
"##.....@....##",
|
||||
"##..........##",
|
||||
"##############",
|
||||
],
|
||||
"^",
|
||||
[
|
||||
"##############",
|
||||
"##......##..##",
|
||||
"##...[][]...##",
|
||||
"##....[]....##",
|
||||
"##.....@....##",
|
||||
"##..........##",
|
||||
"##############",
|
||||
]
|
||||
);
|
||||
|
||||
yield return () => new(
|
||||
[
|
||||
"##############",
|
||||
"##......##..##",
|
||||
"##...[][]...##",
|
||||
"##....[]....##",
|
||||
"##.....@....##",
|
||||
"##..........##",
|
||||
"##############",
|
||||
],
|
||||
"<",
|
||||
[
|
||||
"##############",
|
||||
"##......##..##",
|
||||
"##...[][]...##",
|
||||
"##....[]....##",
|
||||
"##....@.....##",
|
||||
"##..........##",
|
||||
"##############",
|
||||
]
|
||||
);
|
||||
|
||||
yield return () => new(
|
||||
[
|
||||
"##############",
|
||||
"##......##..##",
|
||||
"##...[][]...##",
|
||||
"##....[]....##",
|
||||
"##....@.....##",
|
||||
"##..........##",
|
||||
"##############",
|
||||
],
|
||||
"<",
|
||||
[
|
||||
"##############",
|
||||
"##......##..##",
|
||||
"##...[][]...##",
|
||||
"##....[]....##",
|
||||
"##...@......##",
|
||||
"##..........##",
|
||||
"##############",
|
||||
]
|
||||
);
|
||||
|
||||
yield return () => new(
|
||||
[
|
||||
"##############",
|
||||
"##......##..##",
|
||||
"##...[][]...##",
|
||||
"##....[]....##",
|
||||
"##...@......##",
|
||||
"##..........##",
|
||||
"##############",
|
||||
],
|
||||
"^",
|
||||
[
|
||||
"##############",
|
||||
"##......##..##",
|
||||
"##...[][]...##",
|
||||
"##...@[]....##",
|
||||
"##..........##",
|
||||
"##..........##",
|
||||
"##############",
|
||||
]
|
||||
);
|
||||
|
||||
yield return () => new(
|
||||
[
|
||||
"##############",
|
||||
"##......##..##",
|
||||
"##...[][]...##",
|
||||
"##...@[]....##",
|
||||
"##..........##",
|
||||
"##..........##",
|
||||
"##############",
|
||||
],
|
||||
"^",
|
||||
[
|
||||
"##############",
|
||||
"##...[].##..##",
|
||||
"##...@.[]...##",
|
||||
"##....[]....##",
|
||||
"##..........##",
|
||||
"##..........##",
|
||||
"##############",
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
public record MoveTestCase(string[] MapInput, string Directions, string[] ExpectedMap);
|
||||
}
|
||||
Reference in New Issue
Block a user