public async IAsyncEnumerable <ulong> DoPerft(int depth) { if (Positions.Count == 0) { yield break; } foreach (var fd in Positions.Select(p => new FenData(p.Fen))) { Game.Table.NewSearch(); CurrentGame.Pos.SetFen(fd); if (_results.TryGetValue(CurrentGame.Pos.State.Key, out var result)) { yield return(result); continue; } result = CurrentGame.Perft(depth, true); _results[CurrentGame.Pos.State.Key] = result; // BoardPrintCallback?.Invoke(fd.ToString()); yield return(result); } }
public ulong DoPerft(int depth) { var total = 0ul; if (Positions.Count == 0) { return(total); } foreach (var position in Positions) { var fp = new FenData(position.Fen); CurrentGame.SetFen(fp); var res = CurrentGame.Perft(depth); total += res; BoardPrintCallback?.Invoke(position.Fen); } return(total); }
public Task <ulong> DoPerftAsync(int depth) => Task.Run(() => CurrentGame.Perft(depth));