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);
        }
            internal TestPerftCaseData(
                PerftPosition position,
                [NotNull] ExpectedPerftResult expectedResult,
                bool enableParallelism = true)
                : base(position, enableParallelism, expectedResult)
            {
                Assert.That(expectedResult, Is.Not.Null);

                Position          = position;
                ExpectedResult    = expectedResult;
                EnableParallelism = enableParallelism;
            }
Exemplo n.º 3
0
 static PerftTest()
 {
     Positions    = new PerftPosition[5];
     Positions[0] = new PerftPosition(Fen.StartPositionFen, new List <ulong>(6)
     {
         20, 400, 8902, 197281, 4865609, 119060324
     });
     Positions[1] = new PerftPosition("r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq - 0 1", new List <ulong>(6)
     {
         48, 2039, 97862, 4085603, 193690690, 8031647685
     });
     Positions[2] = new PerftPosition("8/2p5/3p4/KP5r/1R3p1k/8/4P1P1/8 w - - 0 1", new List <ulong>(6)
     {
         14, 191, 2812, 43238, 674624, 11030083, 178633661
     });
     Positions[3] = new PerftPosition("r3k2r/Pppp1ppp/1b3nbN/nP6/BBP1P3/q4N2/Pp1P2PP/R2Q1RK1 w kq - 0 1", new List <ulong>(6)
     {
         6, 264, 9467, 422333, 15833292, 706045033
     });
     Positions[4] = new PerftPosition("r4rk1/1pp1qppp/p1np1n2/2b1p1B1/2B1P1b1/P1NP1N2/1PP1QPPP/R4RK1 w - - 0 10", new List <ulong>(6)
     {
         46, 2079, 89890, 3894594, 164075551, 6923051137
     });
 }