Make mvv_lva to map pieces to their material score instead of abritrary matrix
Add time limits, use anyhow crate to improve error handling, remove depth limit on quiescence search
This commit is contained in:
@@ -75,31 +75,35 @@ mod tests {
|
||||
board::fen::from_fen,
|
||||
evaluation::{MAX_SCORE, MIN_SCORE},
|
||||
movegen::attack_generator::init_attacks,
|
||||
search::{self, transposition_table::TranspositionTable, MAX_TT_SIZE},
|
||||
search::{
|
||||
negamax::negamax, time::TimeInfo, transposition_table::TranspositionTable, MAX_TT_SIZE,
|
||||
},
|
||||
};
|
||||
|
||||
const FEN: &str = "1r2k2r/2P1pq1p/2npb3/1p3ppP/p3P3/P2B1Q2/1P1PNPP1/R3K2R w KQk g6 0 1";
|
||||
const FEN_WILL_BE: &str = "1r2k2r/2P1pq1p/2npb3/1B3ppP/p3P3/P4Q2/1P1PNPP1/R3K2R b KQk - 0 1";
|
||||
const FEN_WONT_BE: &str = "1Q2k2r/2P1pq1p/2npb3/1p3ppP/p3P3/P2B4/1P1PNPP1/R3K2R b KQk - 0 1";
|
||||
const FEN_POSSIBLE: &str = "1r2k2r/2P1pq1p/2npb3/1B3ppP/p3P3/P4Q2/1P1PNPP1/R3K2R b KQk - 0 1";
|
||||
const FEN_IMPOSSIBLE: &str = "1Q2k2r/2P1pq1p/2npb3/1p3ppP/p3P3/P2B4/1P1PNPP1/R3K2R b KQk - 0 1";
|
||||
|
||||
#[test]
|
||||
fn test_transposition_table() -> Result<(), String> {
|
||||
fn test_transposition_table() -> anyhow::Result<()> {
|
||||
init_attacks();
|
||||
let mut game = from_fen(FEN)?;
|
||||
let mut game = from_fen(FEN).unwrap();
|
||||
let mut tt = TranspositionTable::new(MAX_TT_SIZE);
|
||||
let time_now = std::time::Instant::now();
|
||||
let time_info = TimeInfo::new(std::time::Instant::now(), 30000);
|
||||
|
||||
// fill Transposition Table
|
||||
search::negamax::negamax(&mut game, MIN_SCORE, MAX_SCORE, 4, 0, &mut tt);
|
||||
dbg!(time_now.elapsed());
|
||||
negamax(&mut game, MIN_SCORE, MAX_SCORE, 2, 0, &time_info, &mut tt)
|
||||
.expect("Expected a search result")
|
||||
.best_move
|
||||
.expect("Expected a move");
|
||||
|
||||
let will_be_hash = from_fen(FEN_WILL_BE)?.hash;
|
||||
dbg!(time_info.time.elapsed());
|
||||
|
||||
let will_be_hash = from_fen(FEN_POSSIBLE).unwrap().hash;
|
||||
let tt_entry = tt.lookup(will_be_hash);
|
||||
|
||||
assert!(tt_entry.is_some());
|
||||
|
||||
// needs a bigger tt size because it could be a collision entry
|
||||
let wont_be_hash = from_fen(FEN_WONT_BE)?.hash;
|
||||
let wont_be_hash = from_fen(FEN_IMPOSSIBLE).unwrap().hash;
|
||||
let tt_entry = tt.lookup(wont_be_hash);
|
||||
|
||||
assert!(tt_entry.is_none());
|
||||
|
||||
Reference in New Issue
Block a user