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