Files
advent-of-code-2023/02/CubeConundrum.Tests/PuzzelSolverTests.cs
T

159 lines
3.8 KiB
C#

namespace CubeConundrum.Tests;
public class PuzzleSolverTests
{
private readonly PuzzleSolver _sut = new();
[Theory, MemberData(nameof(TestData.Results), MemberType = typeof(TestData))]
public void IsResultPossible_GivenAResult_ItShouldReturnExpectedOutcome(Result givenResult, bool expected)
{
var result = _sut.IsResultPossible(givenResult);
result.Should().Be(expected);
}
[Theory, MemberData(nameof(TestData.Games), MemberType = typeof(TestData))]
public void IsGamePossible_GivenAGame_ItShouldReturnExpectedOutcome(Game givenGame, bool expected)
{
var result = _sut.IsGamePossible(givenGame);
result.Should().Be(expected);
}
[Fact]
public void SumPossibleGameIds_GivenAGameCollection_ItShouldReturnTheSumOfTheIdsOfAllPossibleGames()
{
var games = TestData.Games.Select(o => (Game)o[0]);
var result = _sut.SumPossibleGameIds(games);
result.Should().Be(1);
}
public static class TestData
{
public static readonly IEnumerable<object[]> Games = new List<object[]>
{
new object[]
{
new Game
{
Id = 1,
Results =
{
new()
{
Cubes =
{
new() { Count = 3, Color = CubeColor.Blue },
new() { Count = 4, Color = CubeColor.Red }
}
},
new()
{
Cubes =
{
new() { Count = 1, Color = CubeColor.Red },
new() { Count = 2, Color = CubeColor.Green },
new() { Count = 6, Color = CubeColor.Blue }
}
},
new()
{
Cubes =
{
new() { Count = 2, Color = CubeColor.Green }
}
}
}
},
true
},
new object[]
{
new Game
{
Id = 2,
Results =
{
new()
{
Cubes =
{
new() { Count = 3, Color = CubeColor.Blue },
new() { Count = 4, Color = CubeColor.Red }
}
},
new()
{
Cubes =
{
new() { Count = 1, Color = CubeColor.Red },
new() { Count = 2, Color = CubeColor.Green },
new() { Count = 6, Color = CubeColor.Blue }
}
},
new()
{
Cubes =
{
new() { Count = 40, Color = CubeColor.Green }
}
},
}
},
false
},
};
public static readonly IEnumerable<object[]> Results = new List<object[]>
{
new object[]
{
new Result
{
Cubes =
{
new() { Count = 4, Color = CubeColor.Red },
new() { Count = 1, Color = CubeColor.Green },
new() { Count = 2, Color = CubeColor.Blue }
}
},
true
},
new object[]
{
new Result
{
Cubes =
{
new() { Count = 13, Color = CubeColor.Red },
new() { Count = 14, Color = CubeColor.Green },
new() { Count = 14, Color = CubeColor.Blue },
}
},
false
},
new object[]
{
new Result
{
Cubes =
{
new() { Count = 13, Color = CubeColor.Red },
new() { Count = 5, Color = CubeColor.Green },
new() { Count = 5, Color = CubeColor.Blue },
}
},
false
},
new object[]
{
new Result
{
Cubes =
{
new() { Count = 40, Color = CubeColor.Red },
}
},
false
}
};
}
}