private static ChessBoard GetHorizontalMirroredCb(ChessBoard cb) { var testCb = ChessBoardInstances.Get(1); for (var color = White; color <= Black; color++) { for (var piece = Pawn; piece <= King; piece++) { testCb.Pieces[color][piece] = Util.MirrorHorizontal(cb.Pieces[color][piece]); } } testCb.ColorToMove = cb.ColorToMove; ChessBoardUtil.Init(testCb); testCb.MoveCounter = cb.MoveCounter; return(testCb); }
private static ChessBoard GetVerticalMirroredCb(ChessBoard cb) { var testCb = ChessBoardInstances.Get(1); for (var piece = Pawn; piece <= King; piece++) { testCb.Pieces[White][piece] = Util.MirrorVertical(cb.Pieces[Black][piece]); } for (var piece = Pawn; piece <= King; piece++) { testCb.Pieces[Black][piece] = Util.MirrorVertical(cb.Pieces[White][piece]); } testCb.ColorToMove = cb.ColorToMoveInverse; ChessBoardUtil.Init(testCb); testCb.MoveCounter = cb.MoveCounter; return(testCb); }
public static void TestValues(ChessBoard cb) { var iterativeZk = cb.ZobristKey; var iterativeZkPawn = cb.PawnZobristKey; var iterativeAllPieces = cb.AllPieces; var iterativePsqt = cb.PsqtScore; var phase = cb.Phase; long materialKey = cb.MaterialKey; var testPieceIndexes = new int[64]; Array.Copy(cb.PieceIndexes, testPieceIndexes, cb.PieceIndexes.Length); Assert.IsTrue(BitOperations.TrailingZeroCount(cb.Pieces[White][King]) == cb.KingIndex[White]); Assert.IsTrue(BitOperations.TrailingZeroCount(cb.Pieces[Black][King]) == cb.KingIndex[Black]); ChessBoardUtil.Init(cb); // zobrist keys Assert.IsTrue(iterativeZk == cb.ZobristKey); Assert.IsTrue(iterativeZkPawn == cb.PawnZobristKey); // combined pieces Assert.IsTrue(iterativeAllPieces == cb.AllPieces); // psqt Assert.IsTrue(iterativePsqt == cb.PsqtScore); // piece-indexes for (var i = 0; i < testPieceIndexes.Length; i++) { Assert.IsTrue(testPieceIndexes[i] == cb.PieceIndexes[i]); } Assert.IsTrue(phase == cb.Phase); Assert.IsTrue(materialKey == cb.MaterialKey); }
public static void Print() { if (!Enabled) { return; } var totalMoveCount = ChessBoardUtil.CalculateTotalMoveCount(); Console.WriteLine("AB-nodes " + AbNodes); Console.WriteLine("PV-nodes " + _pvNodes + " = 1/" + (_pvNodes + _cutNodes + _allNodes) / _pvNodes); Console.WriteLine("Cut-nodes " + _cutNodes); PrintPercentage("Cut 1 ", FailHigh[0], _cutNodes - FailHigh[0]); PrintPercentage("Cut 2 ", FailHigh[1], _cutNodes - FailHigh[1]); PrintPercentage("Cut 3 ", FailHigh[2], _cutNodes - FailHigh[2]); Console.WriteLine("All-nodes " + _allNodes); Console.WriteLine("Q-nodes " + QNodes); Console.WriteLine("See-nodes " + SeeNodes); Console.WriteLine("Evaluated " + EvalNodes); Console.WriteLine("Moves " + totalMoveCount); var threadData = ThreadData.GetInstance(0); Console.WriteLine("### Caches #######"); PrintPercentage("TT ", TtHits, TtMisses); Console.WriteLine("usage " + TtUtil.GetUsagePercentage() / 10 + "%"); PrintPercentage("Eval ", EvalCacheHits, EvalCacheMisses); Console.WriteLine("usage " + Util.GetUsagePercentage(threadData.EvalCache) + "%"); PrintPercentage("Pawn eval ", PawnEvalCacheHits, PawnEvalCacheMisses); Console.WriteLine("usage " + Util.GetUsagePercentage(threadData.PawnCache) + "%"); PrintPercentage("Material ", MaterialCacheHits, MaterialCacheMisses); Console.WriteLine("usage " + Util.GetUsagePercentage(threadData.MaterialCache) + "%"); Console.WriteLine("## Best moves #####"); Console.WriteLine("TT " + _bestMoveTt); Console.WriteLine("TT-upper " + _bestMoveTtUpper); Console.WriteLine("TT-lower " + _bestMoveTtLower); Console.WriteLine("Win-cap " + _bestMoveWinningCapture); Console.WriteLine("Los-cap " + _bestMoveLosingCapture); Console.WriteLine("Promo " + _bestMovePromotion); Console.WriteLine("Killer1 " + _bestMoveKiller1); Console.WriteLine("Killer2 " + _bestMoveKiller2); Console.WriteLine("Killer1 evasi " + _bestMoveKillerEvasive1); Console.WriteLine("Killer2 evasi " + _bestMoveKillerEvasive2); Console.WriteLine("Counter " + _bestMoveCounter); Console.WriteLine("Other " + _bestMoveOther); Console.WriteLine("### Outcome #####"); Console.WriteLine("Checkmate " + MateCount); Console.WriteLine("Stalemate " + StaleMateCount); Console.WriteLine("Repetitions " + Repetitions + "(" + _repetitionTests + ")"); Console.WriteLine("### Extensions #####"); Console.WriteLine("Check " + CheckExtensions); Console.WriteLine("### Pruning #####"); PrintPercentage("Null-move ", NullMoveHit, NullMoveMiss); PrintDepthTotals("Static nmp ", StaticNullMoved, false); PrintDepthTotals("Razored ", Razored, false); PrintDepthTotals("Futile ", Futile, false); PrintDepthTotals("LMP ", Lmped, false); }
public override string ToString() { return(ChessBoardUtil.ToString(this)); }