public void TestPerft(PerftPosition perftPosition, bool enableParallelism, ExpectedPerftResult expectedResult)
        {
            var fen       = PerftPositionToFenMap[perftPosition];
            var gameBoard = new GameBoard(fen, PerformInternalBoardValidation);

            var flags = PerftFlags.IncludeDivideMap;

            if (enableParallelism)
            {
                flags |= PerftFlags.EnableParallelism;
            }

            var includeExtraCountTypes = expectedResult.CheckCount.HasValue || expectedResult.CheckmateCount.HasValue;

            if (includeExtraCountTypes)
            {
                flags |= PerftFlags.IncludeExtraCountTypes;
            }

            #region For Finding Bugs in Move Generator

            var extraMoves = new GameMove[]
            {
            };

            gameBoard = extraMoves.Aggregate(gameBoard, (current, extraMove) => current.MakeMove(extraMove));

            #endregion

            var actualResult = gameBoard.Perft(expectedResult.Depth - extraMoves.Length, flags);

            string extraInfo = null;
            if (actualResult.Flags.HasFlag(PerftFlags.IncludeDivideMap))
            {
                var divideResult = actualResult
                                   .DividedMoves
                                   .OrderBy(pair => pair.Key.ToString())
                                   .Select(pair => $@"  {pair.Key} -> {pair.Value}")
                                   .Join(Environment.NewLine);

                extraInfo =
                    $@"{Environment.NewLine}Divide ({actualResult.DividedMoves.Count}):{Environment.NewLine}{
                        divideResult}";
            }

            Console.WriteLine(
                @"[{0}] ({1}) {2} {{ {3} }} ({4}) : {5}{6}",
                MethodBase.GetCurrentMethod().GetQualifiedName(),
                ChessHelper.PlatformVersion,
                perftPosition.GetName(),
                fen,
                actualResult.Flags,
                actualResult,
                extraInfo);

            Console.WriteLine();

            AssertPerftResult(actualResult, expectedResult);
        }