public void ShouldReturn7Moves() { //Arrange var game = FakeTowerGameDataBuilder.CreateWithRandomProps().WithMaxDiscsPerPeg(3).Build(); var sut = CreateSut(); //Act var actual = sut.SolveFromStart(game).ToArray(); //Assert actual.Should().HaveCount(7); }
public void GivenTowerWithMoreThan3Discs_Throws() { //Arrange var game = FakeTowerGameDataBuilder.CreateWithRandomProps().WithMaxDiscsPerPeg(4).Build(); var sut = CreateSut(); //Act Action action = () => sut.SolveFromStart(game).ToArray(); //Assert action.Should().Throw <NotSupportedException>() .WithMessage("I'm a SIMPLE solver, I can only solve towers that have 3 discs"); }
public void GivenGameNotAtStart_Throws() { //Arrange var game = FakeTowerGameDataBuilder.CreateWithRandomProps().WithTouchedGame().Build(); var sut = CreateSut(); //Act Action action = () => sut.SolveFromStart(game).ToArray(); //Assert action.Should().Throw <NotSupportedException>() .WithMessage("This solver can only solve games from the start"); }
public void ShouldReturnOptimalAmountOfMoves() { //Arrange var discsPerPeg = RandomTower.Peg.MaxDiscs; var expectedMoves = Convert.ToInt32(Math.Pow(2, discsPerPeg) - 1); var game = FakeTowerGameDataBuilder .CreateWithRandomProps() .WithMaxDiscsPerPeg(discsPerPeg) .WithUntouchedGame() .Build(); var sut = CreateSut(); //Act var actual = sut.SolveFromStart(game).ToArray(); //Assert actual.Should().HaveCount(expectedMoves); }