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)); }
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); }