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..b5e89a2 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("which")); + game.guess(next_guess, Some("xxfxx".into()))?; + + 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("which")); + game.guess(next_guess, Some("xxfxx".into()))?; + + 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("which")); + game.guess(next_guess, Some("xxfxx".into()))?; + + next_guess = sl.guess_for(&game)?; + assert_eq!(next_guess, Word::from("which")); + game.guess(next_guess, Some("xxfxx".into()))?; + + // naive is at the moment too bad to solve "nines" + assert!(game.finished()); + assert!(!game.won()); + + Ok(()) +}