/// <summary>
        ///     Initializes a new instance of the <see cref="EnginePlayerMoveSearcher"/> class
        ///     using the specified parameters.
        /// </summary>
        internal EnginePlayerMoveSearcher(
            [NotNull] ILogger logger,
            [NotNull] GameBoard rootBoard,
            int plyDepth,
            [NotNull] BoardHelper boardHelper,
            [CanBeNull] TranspositionTable transpositionTable,
            [CanBeNull] VariationLineCache previousIterationVariationLineCache,
            [NotNull] GameControlInfo gameControlInfo,
            bool useMultipleProcessors,
            [NotNull] MoveHistoryStatistics moveHistoryStatistics)
        {
            if (plyDepth < CommonEngineConstants.MaxPlyDepthLowerLimit)
            {
                throw new ArgumentOutOfRangeException(
                          nameof(plyDepth),
                          plyDepth,
                          $@"The value must be at least {CommonEngineConstants.MaxPlyDepthLowerLimit}.");
            }

            _logger             = logger ?? throw new ArgumentNullException(nameof(logger));
            _rootBoard          = rootBoard ?? throw new ArgumentNullException(nameof(rootBoard));
            _plyDepth           = plyDepth;
            _boardHelper        = boardHelper;
            _transpositionTable = transpositionTable;
            _previousIterationVariationLineCache = previousIterationVariationLineCache;
            _gameControlInfo       = gameControlInfo ?? throw new ArgumentNullException(nameof(gameControlInfo));
            _useMultipleProcessors = useMultipleProcessors;
            _moveHistoryStatistics = moveHistoryStatistics ?? throw new ArgumentNullException(nameof(moveHistoryStatistics));
            _evaluator             = new Evaluator(gameControlInfo, boardHelper);

            VariationLineCache = new VariationLineCache(rootBoard);
        }
 internal Evaluator([NotNull] GameControlInfo gameControlInfo, [NotNull] BoardHelper boardHelper)
 {
     _gameControlInfo = gameControlInfo ?? throw new ArgumentNullException(nameof(gameControlInfo));
     _boardHelper     = boardHelper ?? throw new ArgumentNullException(nameof(boardHelper));
 }