Esempio n. 1
0
        private Game GetSubject(IRules rules = default, IBoardBuilder boardBuilder = default, IGameStatistics gameStatistics = default)
        {
            if (rules == default)
            {
                rules = new EnglishDraughtsRules();
            }
            if (boardBuilder == default)
            {
                boardBuilder = new DraughtsBoardBuilder();
            }
            if (gameStatistics == default)
            {
                gameStatistics = new GameStatistics();
            }

            return(new Game(rules, boardBuilder, gameStatistics));
        }
Esempio n. 2
0
        public void FindBestMove_ProcessingCancellation_ExtraTimeLessThanSeccond()
        {
            var boardBuilder    = new DraughtsBoardBuilder();
            var board           = boardBuilder.Build();
            var turnTimeLimitMs = 2000;

            var subject = GetSubject();
            var results = new List <(int depth, long timeMs, int estimations)>();

            for (int depth = 4; depth <= 20; depth += 4)
            {
                var watch = Stopwatch.StartNew();
                var cts   = new CancellationTokenSource(turnTimeLimitMs);
                subject.FindBestMove(board, Side.Black, cts.Token, Options(maxParallel: 4, maxDepth: depth, isDebug: false));
                watch.Stop();
                results.Add((depth, watch.ElapsedMilliseconds, subject.TotalMovesEstimated));
            }

            results.ForEach(x => _testOutput.WriteLine(x.ToString()));
            var maxTimeMs = results.Average(x => x.timeMs);

            Assert.InRange(maxTimeMs - turnTimeLimitMs, Int32.MinValue, 3000);
        }