From 0c90f874b347b00fed0617cc35567596e8d94ada Mon Sep 17 00:00:00 2001 From: "Christoph J. Scherr" Date: Wed, 24 Jul 2024 11:54:02 +0200 Subject: [PATCH] test: add test to check manual guessing --- src/game/evaluation.rs | 6 ++++++ tests/solver.rs | 48 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/src/game/evaluation.rs b/src/game/evaluation.rs index 83a790b..1587e4a 100644 --- a/src/game/evaluation.rs +++ b/src/game/evaluation.rs @@ -46,6 +46,12 @@ impl From> for Evaluation { } } +impl From<&str> for Evaluation { + fn from(value: &str) -> Self { + Self::from_str(value).unwrap() + } +} + impl FromStr for Evaluation { type Err = Infallible; fn from_str(s: &str) -> Result { diff --git a/tests/solver.rs b/tests/solver.rs index 580ad97..e8a9e1c 100644 --- a/tests/solver.rs +++ b/tests/solver.rs @@ -1,7 +1,7 @@ use wordle_analyzer::game::Game; use wordle_analyzer::solve::{AnyBuiltinSolver, NaiveSolver, Solver, StupidSolver}; use wordle_analyzer::wlist::builtin::BuiltinWList; -use wordle_analyzer::wlist::word::Word; +use wordle_analyzer::wlist::word::{Word, WordData}; use wordle_analyzer::wlist::WordList; fn wordlist() -> impl WordList { @@ -67,3 +67,49 @@ fn test_naive_play_predetermined_game() -> anyhow::Result<()> { Ok(()) } + +#[test] +fn test_naive_play_predetermined_game_by_manual_guess_and_evak() -> anyhow::Result<()> { + let wl = wordlist(); + let sl = + AnyBuiltinSolver::Naive(NaiveSolver::build(&wl).expect("could not build naive solver")); + // we don't insert the solution yet, + // pretend that a user inputs guesses manually + let mut game = Game::build(5, false, 6, &wl, false)?; + let _actual_solution: Option = Some(("nines".into(), 0.002)); + let mut next_guess; + + next_guess = sl.guess_for(&game)?; + assert_eq!(next_guess, Word::from("which")); + game.guess(next_guess, Some("xxfxx".into()))?; + + next_guess = sl.guess_for(&game)?; + assert_eq!(next_guess, Word::from("their")); + game.guess(next_guess, Some("xxffx".into()))?; + + next_guess = sl.guess_for(&game)?; + assert_eq!(next_guess, Word::from("being")); + game.guess(next_guess, Some("xfffx".into()))?; + + next_guess = sl.guess_for(&game)?; + assert_eq!(next_guess, Word::from("since")); + game.guess(next_guess, Some("fcfxf".into()))?; + + next_guess = sl.guess_for(&game)?; + assert_eq!(next_guess, Word::from("lines")); + game.guess(next_guess, Some("xcccc".into()))?; + + next_guess = sl.guess_for(&game)?; + assert_eq!(next_guess, Word::from("mines")); + game.guess(next_guess, Some("xcccc".into()))?; + + next_guess = sl.guess_for(&game)?; + assert_eq!(next_guess, Word::from("wines")); + game.guess(next_guess, Some("xcccc".into()))?; + + // naive is at the moment too bad to solve "nines" + assert!(game.finished()); + assert!(!game.won()); + + Ok(()) +}