Spawn a separate thread to receive UCI messages via mpsc channel, simplify output to println

This commit is contained in:
stefiosif
2025-03-01 23:54:51 +02:00
parent 7accc28aba
commit 91345848c6
3 changed files with 38 additions and 94 deletions

View File

@@ -1,9 +1,7 @@
use std::io;
use crate::{
board::game::Game,
evaluation::{MAX_SCORE, MIN_SCORE},
interface::uci::{write_response, Response},
interface::uci::Response,
movegen::r#move::Move,
};
@@ -19,10 +17,7 @@ pub fn iterative_deepening(
for depth in 1..=max_depth {
if time.exceed_soft_limit() {
write_response(
&mut io::stdout(),
&Response::Info("Soft limit exceeded in negamax".to_string()),
)?;
println!("Soft limit exceeded in negamax");
return Ok(best_move);
}
@@ -44,7 +39,7 @@ pub fn iterative_deepening(
let score = match score {
Ok(score) => score,
Err(ref e) => {
write_response(&mut io::stdout(), &Response::Info(format!("{e}")))?;
println!("Error: {}", Response::Info(e.to_string()));
break_from_aw = false;
break;
}
@@ -68,46 +63,25 @@ pub fn iterative_deepening(
}
if let Err(e) = score {
write_response(&mut io::stdout(), &Response::Info(format!("{e}")))?;
println!("Error: {}", Response::Info(e.to_string()));
break;
}
best_move = game.tt.lookup(game.hash).and_then(|entry| entry.mv);
write_response(
&mut io::stdout(),
&log_depth_results(
depth,
time.instant.elapsed().as_secs(),
nodes,
time.nps(nodes),
score?,
best_move,
),
)?;
println!(
"info depth {} ms {} nodes {} nps {} eval {} bestmove {}",
depth,
time.instant.elapsed().as_millis(),
nodes,
time.nps(nodes),
score?,
best_move.expect("No best move found")
);
}
Ok(best_move)
}
fn log_depth_results(
depth: u8,
seconds: u64,
nodes: u64,
nps: u64,
best_score: i16,
best_move: Option<Move>,
) -> Response {
Response::Info(format!(
"info depth {} seconds {} nodes {} nps {} eval {} bestmove {}",
depth,
seconds,
nodes,
nps,
best_score,
best_move.expect("No best move found")
))
}
#[cfg(test)]
mod tests {
use crate::{