Spawn a separate thread to receive UCI messages via mpsc channel, simplify output to println
This commit is contained in:
@@ -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::{
|
||||
|
||||
Reference in New Issue
Block a user