From b476a8fe66d637d9a827d50222e106080327ab2d Mon Sep 17 00:00:00 2001 From: powersagitar <114868133+powersagitar@users.noreply.github.com> Date: Thu, 9 Jan 2025 13:29:27 -0500 Subject: [PATCH] Add `DonaldKnuthAlgorithm` unit test --- .../solvers/DonaldKnuthAlgorithmTest.java | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 culminating-mastermind/app/src/test/java/mastermind/solvers/DonaldKnuthAlgorithmTest.java diff --git a/culminating-mastermind/app/src/test/java/mastermind/solvers/DonaldKnuthAlgorithmTest.java b/culminating-mastermind/app/src/test/java/mastermind/solvers/DonaldKnuthAlgorithmTest.java new file mode 100644 index 0000000..f04f147 --- /dev/null +++ b/culminating-mastermind/app/src/test/java/mastermind/solvers/DonaldKnuthAlgorithmTest.java @@ -0,0 +1,46 @@ +package mastermind.solvers; + +import mastermind.core.Code; +import mastermind.core.Response; +import mastermind.core.solvers.DonaldKnuthAlgorithm; +import mastermind.core.solvers.MastermindSolver; +import mastermind.utils.Tuple2; + +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; + +class DonaldKnuthAlgorithmTest { + @Test + void testFirstGuess() { + final DonaldKnuthAlgorithm solver = new DonaldKnuthAlgorithm(); + final Code firstGuess = solver.guess(); + final Code expectedFirstGuess = new Code(List.of(0, 0, 1, 1)); + + assertEquals(expectedFirstGuess.getColors(), firstGuess.getColors()); + } + + @Test + void testGuesses() { + // Secret code is purple yellow blue red + final Code secretCode = new Code(List.of(5, 3, 2, 1)); + final DonaldKnuthAlgorithm solver = new DonaldKnuthAlgorithm(); + + Tuple2 result = new Tuple2<>(MastermindSolver.Status.Continue, solver.guess()); + + while (result.first == MastermindSolver.Status.Continue) { + final Response hints = new Response(secretCode, result.second); + result = solver.guess(hints); + } + + if (result.first == MastermindSolver.Status.Lose) { + fail("Donald Knuth algorithm failed to solve the secret code"); + } + + assertTrue(solver.getAttempts() <= 6); + } +}