public void SimplePerft_EndGameBoard(int depth, ulong expectedLeafsCount)
        {
            var boardState = FenToBoard.Parse("7r/8/2k3P1/1p1p2Kp/1P6/2P5/7r/Q7 w - - 0 1");

            var result = SimplePerft.Run(boardState, depth);

            Assert.Equal(expectedLeafsCount, result.LeafsCount);
        }
        public void SimplePerft_MidGameBoard(int depth, ulong expectedLeafsCount)
        {
            var boardState = FenToBoard.Parse("r2qr1k1/p2n1p2/1pb3pp/2ppN1P1/1R1PpP2/BQP1n1PB/P4N1P/1R4K1 w - - 0 21");

            var result = SimplePerft.Run(boardState, depth);

            Assert.Equal(expectedLeafsCount, result.LeafsCount);
        }
        public void SimplePerft_DefaultBoard(int depth, ulong expectedLeafsCount)
        {
            var boardState = new BoardState();

            boardState.SetDefaultState();

            var result = SimplePerft.Run(boardState, depth);

            Assert.Equal(expectedLeafsCount, result.LeafsCount);
        }
Example #4
0
        public void Run(params string[] parameters)
        {
            if (parameters.Length < 1 || !int.TryParse(parameters[0], out var depth))
            {
                _interactiveConsole.WriteLine("No depth specified");
                return;
            }

            var boardState = new BoardState(true);

            boardState.SetDefaultState();

            for (var i = 0; i <= depth; i++)
            {
                var result             = SimplePerft.Run(boardState, i);
                var megaLeafsPerSecond = result.LeafsPerSecond / 1_000_000;
                var nanosecondsPerLeaf = result.TimePerLeaf * 1_000_000_000;

                _interactiveConsole.WriteLine($"Depth {i} - Leafs: {result.LeafsCount} ({megaLeafsPerSecond:F} ML/s), " +
                                              $"Time: {result.Time:F} s, Time per leaf: {nanosecondsPerLeaf:F} ns");
            }
        }