UNPKG

chess-tools

Version:

A collection of tools / libraries for programming chess applications.

75 lines (70 loc) 2.61 kB
/* A script that takes a set of positions from an .epd file and compares them against komodo and stockfish (as defined by komodo_path and stockfish path below) shows the best move and the evaluation (if provided by the engine) */ const ChessTools = require("../index.js"); const epd = new ChessTools.EPD(); const EPD_FILE_PATH = process.cwd() + "/test/sample-data/epd-test.epd" const komodo_path = process.cwd() + '/bin/komodo-9.02-64-osx'; const stockfish_path = '/usr/local/bin/stockfish'; const fs = require("fs"); epd.on("loaded", ()=> { console.log("epd loaded"); start(); }); epd.load_stream(fs.createReadStream(EPD_FILE_PATH)); const ponder_time = 5000; const komodo_conn = new ChessTools.Engines.Connection.LocalProcess(komodo_path); const komodo =new ChessTools.Engines.Manager.UCI(komodo_conn, {ponder_timeout : ponder_time, 'name' : 'komodo'}); komodo.on("initialized", ()=>{ console.log("komodo initialized"); start(); }); const stockfish_conn = new ChessTools.Engines.Connection.LocalProcess(stockfish_path); const stockfish = new ChessTools.Engines.Manager.UCI(stockfish_conn, {ponder_timeout : ponder_time, 'name' : 'stockfish'}); stockfish.on("initialized", ()=>{ console.log("stockfish initialized"); start(); }) async function start() { if (!epd.loaded || !komodo.state.initialized || !stockfish.state.initialized) { console.log("initializing..."); return; } for (let entry of epd.entries) { let fen = entry.fen; let lines = []; let best_move = entry.best_move[0]; let chess = await entry.toChess() console.log("\n\n================\nPondering Position\n=========") console.log(chess.ascii()); let m = chess.move(best_move, {sloppy: true}); console.log("\tEPD Test: " + m.from + m.to + "("+ best_move +")"); let komodo_r = await komodo.ponderPosition(fen, {}); console.log("\tKomodo: " + komodo_r ); show_line_details(komodo.getLinesForMove(komodo_r)); let stockfish_r = await stockfish.ponderPosition(fen, {}); console.log("\tStockfish: " + stockfish_r); show_line_details(stockfish.getLinesForMove(stockfish_r)); } end(); } function end() { stockfish.quit() komodo.quit(); } process.on("exit", ()=>{ stockfish.quit(); komodo.quit(); }); function show_line_details(lines) { let s = false; for (let line of lines) { if (line && line.pv) { s= true; console.log("\t\tScore:", line.score, "Line:", line.pv); } } return s; }