コード例 #1
0
ファイル: PerftRunner.cs プロジェクト: tuxmania87/ChessLib
 private async ValueTask WriteOutput(IPerftResult result, string baseFileName, CancellationToken cancellationToken)
 {
     // ReSharper disable once MethodHasAsyncOverload
     var contents       = JsonConvert.SerializeObject(result, _outputSettings);
     var outputFileName = $"{baseFileName}{result.Depth}].json";
     await System.IO.File.WriteAllTextAsync(outputFileName, contents, cancellationToken).ConfigureAwait(false);
 }
コード例 #2
0
ファイル: PerftRunner.cs プロジェクト: raphaelbg/ChessLib
        public PerftRunner(IEpdParser parser, ILogger log, IBuildTimeStamp buildTimeStamp, IPerft perft, IPerftResult result, IConfiguration configuration)
        {
            _epdParser                = parser;
            _log                      = log;
            _buildTimeStamp           = buildTimeStamp;
            _perft                    = perft;
            _perft.BoardPrintCallback = PrintBoard;
            _result                   = result;
            _configuration            = configuration;
            _runners                  = new Func <CancellationToken, IAsyncEnumerable <IPerftPosition> >[] { ParseEpd, ParseFen };

            TranspositionTableOptions      = Framework.IoC.Resolve <IOptions>(serviceKey: OptionType.TTOptions) as TTOptions;
            TranspositionTableOptions.Use  = configuration.GetValue <bool>("TranspositionTable:Use");
            TranspositionTableOptions.Size = configuration.GetValue <int>("TranspositionTable:Size");
        }
コード例 #3
0
ファイル: PerftRunner.cs プロジェクト: tuxmania87/ChessLib
        private Task <int> LogResults(IPerftResult result)
        {
            return(Task.Run(() =>
            {
                _log.Information("Time passed : {0}", result.Elapsed);
                _log.Information("Nps         : {0}", result.Nps);
                if (_usingEpd)
                {
                    _log.Information("Result      : {0} - should be {1}", result.Result, result.CorrectResult);
                    if (result.Result != result.CorrectResult)
                    {
                        var difference = (long)(result.CorrectResult - result.Result);
                        _log.Information("Difference  : {0}", difference < 0 ? -difference : difference);
                    }
                }
                else
                {
                    _log.Information("Result      : {0}", result.Result);
                }
                _log.Information("TT hits     : {0}", Game.Table.Hits);

                var error = 0;

                if (!_usingEpd)
                {
                    return error;
                }

                if (result.CorrectResult == result.Result)
                {
                    _log.Information("Move count matches!");
                }
                else
                {
                    _log.Error("Failed for position: {0}", _perft.CurrentGame.Pos.GenerateFen());
                    error = 1;
                }

                return error;
            }));
        }
コード例 #4
0
ファイル: PerftRunner.cs プロジェクト: raphaelbg/ChessLib
        private Task <int> LogResults(IPerftResult result)
        {
            return(Task.Run(() =>
            {
                _log.Information("Time passed : {0}", result.ElapsedMs);
                _log.Information("Nps         : {0}", result.Nps);
                if (_usingEpd)
                {
                    _log.Information("Result      : {0} - should be {1}", result.Result, result.CorrectResult);
                }
                else
                {
                    _log.Information("Result      : {0}", result.Result);
                }
                _log.Information("TT hits     : {0}", Game.Table.Hits);

                int error = 0;

                if (!_usingEpd)
                {
                    return error;
                }

                if (result.CorrectResult == result.Result)
                {
                    _log.Information("Move count matches!");
                }
                else
                {
                    _log.Error("Move count failed!");
                    error = 1;
                }

                return error;
            }));
        }
コード例 #5
0
ファイル: PerftRunner.cs プロジェクト: tuxmania87/ChessLib
 private void ComputeResultsAsync(ulong result, int depth, ulong expected, long elapsedMs, IPerftResult results)
 {
     // compute results
     results.Result = result;
     results.Depth  = depth;
     // add 1 to avoid potential dbz
     results.Elapsed       = TimeSpan.FromMilliseconds(elapsedMs + 1);
     results.Nps           = (ulong)_uci.Nps(result, results.Elapsed);
     results.CorrectResult = expected;
     results.Passed        = expected == result;
     results.TableHits     = Game.Table.Hits;
 }
コード例 #6
0
ファイル: PerftRunner.cs プロジェクト: raphaelbg/ChessLib
 private static Task ComputeResults(ulong result, int depth, ulong expected, long elapsedMs, IPerftResult results)
 {
     return(Task.Run(() =>
     {
         // compute results
         results.Result = result;
         results.Depth = depth;
         // add 1 to avoid potential dbz
         results.ElapsedMs = elapsedMs + 1;
         results.Nps = 1000 * result / (ulong)results.ElapsedMs;
         results.CorrectResult = expected;
         results.Passed = expected == result;
         results.TableHits = Game.Table.Hits;
     }));
 }