public void AdvancedPerft_DefaultBoard(int depth, ulong expectedLeafsCount, ulong expectedCapturesCount, ulong expectedEnPassantsCount,
                                               ulong expectedCastlesCount, ulong expectedChecksCount, ulong expectedCheckmatesCount)
        {
            var boardState = new BoardState();

            boardState.SetDefaultState();

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

            Assert.Equal(expectedLeafsCount, result.Leafs);
            Assert.Equal(expectedCapturesCount, result.Captures);
            Assert.Equal(expectedEnPassantsCount, result.EnPassants);
            Assert.Equal(expectedCastlesCount, result.Castles);
            Assert.Equal(expectedChecksCount, result.Checks);
            Assert.Equal(expectedCheckmatesCount, result.Checkmates);
        }
        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();

            boardState.SetDefaultState();

            for (var i = 0; i <= depth; i++)
            {
                var result = AdvancedPerft.Run(boardState, i);

                _interactiveConsole.WriteLine($"Depth {i}: {result.Leafs} leafs ({result.Time:F} s), Captures: {result.Captures}, " +
                                              $"Checkmates: {result.Checkmates}, Castlings: {result.Castles}, " +
                                              $"En passants: {result.EnPassants}, Checks: {result.Checks}");
            }
        }