-module(gchess). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). -export([perft/2]). -spec perft(gleam@erlang@process:subject(game_server:message()), integer()) -> integer(). perft(Game_server_subject, Depth) -> case Depth of 0 -> 1; _ -> Moves = game_server:all_legal_moves(Game_server_subject), Nodes@2 = gleam@list:fold( Moves, 0, fun(Nodes, Move) -> game_server:apply_move(Game_server_subject, Move), Nodes@1 = Nodes + perft(Game_server_subject, Depth - 1), game_server:undo_move(Game_server_subject), Nodes@1 end ), Nodes@2 end.