#include #include #include #include #include #include #include #include "board/board.hpp" #include "misc.hpp" #include "uci.hpp" #include "zobrist.hpp" static void perft(int argc, char *argv[]) { if (argc != 4 || std::string(argv[1]) != "perft") { std::cout << "Usage: ./mono\n"; std::cout << " ./mono perft \n"; exit(1); } int depth = -1; try { depth = std::stoi(argv[2]); } catch (const std::exception &) { std::cout << "info string usage: ./mono perft \n"; exit(1); } if (depth < 0) { std::cout << "info string usage: ./mono perft \n"; exit(1); } std::string fen = argv[3]; auto start = std::chrono::steady_clock::now(); Game game = initBoard(fen, nullptr); uint64_t count = MoveGenTest(depth, &game); auto end = std::chrono::steady_clock::now(); auto ms = std::chrono::duration_cast(end - start) .count(); std::ostringstream oss; oss << "{\"ms\": " << ms << ", \"result\": " << count << "}"; std::cout << oss.str() << "\n"; } int main(int argc, char *argv[]) { InitZobrist(); if (argc == 4) { perft(argc, argv); return 0; } std::cout << engine_info(); Uci(); return 0; }