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);
        }
Example #4
0
        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);
        }
Example #5
0
 public override string ToString()
 {
     return(ChessBoardUtil.ToString(this));
 }