Example #1
0
        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);
            }
        }
Example #2
0
        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);
        }
Example #3
0
 public Task <ulong> DoPerftAsync(int depth)
 => Task.Run(()
             => CurrentGame.Perft(depth));