public void TestKingsNextToEachOther()
        {
            Piece[][] board = new Piece[8][]
            {
                new Piece[8] {
                    o, o, o, o, o, o, o, o
                },
                new Piece[8] {
                    o, o, o, o, o, o, o, o
                },
                new Piece[8] {
                    o, o, o, o, o, o, o, o
                },
                new Piece[8] {
                    o, o, o, pb, nb, o, o, o
                },
                new Piece[8] {
                    o, o, o, pw, pb, o, o, o
                },
                new Piece[8] {
                    o, o, o, o, o, nw, o, o
                },
                new Piece[8] {
                    o, o, o, o, o, o, o, o
                },
                new Piece[8] {
                    o, o, kb, o, kw, o, o, o
                }
            };

            AtomarChessGame game = new AtomarChessGame(board, Player.White);

            Assert.True(game.IsValidMove(new Move("E1", "D1", Player.White)));

            game.MakeMove(new Move("E1", "D1", Player.White), true);
            Assert.False(game.IsInCheck(Player.Black));
            Assert.False(game.IsInCheck(Player.White));
            Assert.False(game.IsValidMove(new Move("C1", "D1", Player.Black)));
            Assert.True(game.IsValidMove(new Move("C1", "D2", Player.Black)));
            Assert.True(game.IsValidMove(new Move("C1", "C2", Player.Black)));
        }
        public void TestCastling()
        {
            AtomarChessGame game = new AtomarChessGame("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1");

            game.MakeMove(new Move("G1", "F3", Player.White), true);
            game.MakeMove(new Move("G8", "F6", Player.Black), true);
            game.MakeMove(new Move("G2", "G3", Player.White), true);
            game.MakeMove(new Move("G7", "G6", Player.Black), true);
            game.MakeMove(new Move("F1", "G2", Player.White), true);
            game.MakeMove(new Move("F8", "G7", Player.Black), true);
            Assert.True(game.IsValidMove(new Move("E1", "H1", Player.White)));
            var moves = game.GetValidMoves(Player.White);
            int ok    = 0;

            foreach (var move in moves)
            {
                if (move.OriginalPosition.ToString() == "E1" && (move.NewPosition.ToString() == "G1" || move.NewPosition.ToString() == "H1"))
                {
                    ok++;
                }
            }
            Assert.AreEqual(2, ok);
        }
        public void TestKingsImmuneToExplosions()
        {
            Piece[][] board = new Piece[8][]
            {
                new Piece[8] {
                    nb, nw, nb, o, o, o, o, o
                },
                new Piece[8] {
                    o, o, o, o, o, o, o, o
                },
                new Piece[8] {
                    o, o, o, o, o, o, o, o
                },
                new Piece[8] {
                    o, o, o, kb, o, o, o, o
                },
                new Piece[8] {
                    o, o, o, bb, o, o, o, rw
                },
                new Piece[8] {
                    o, o, o, kw, o, o, o, o
                },
                new Piece[8] {
                    o, o, o, o, o, o, o, o
                },
                new Piece[8] {
                    o, o, o, o, o, o, o, o
                }
            };

            AtomarChessGame game = new AtomarChessGame(board, Player.White);

            Assert.True(game.IsValidMove(new Move("H4", "D4", Player.White)));
            game.MakeMove(new Move("H4", "D4", Player.White), true);
            Assert.AreEqual("nNn5/8/8/3k4/8/3K4/8/8", game.GetFen().Split(" ")[0]);
        }
        public void TestExplosions()
        {
            Piece[][] board = new Piece[8][]
            {
                new Piece[8] {
                    o, o, o, o, kb, o, o, o
                },
                new Piece[8] {
                    o, o, o, o, o, o, o, o
                },
                new Piece[8] {
                    o, o, o, o, o, o, o, o
                },
                new Piece[8] {
                    o, o, o, pw, qb, o, o, o
                },
                new Piece[8] {
                    o, o, o, bw, pb, o, o, o
                },
                new Piece[8] {
                    o, o, o, o, o, o, nw, o
                },
                new Piece[8] {
                    o, o, o, o, o, o, o, o
                },
                new Piece[8] {
                    o, o, o, o, kw, o, o, o
                }
            };

            AtomarChessGame game = new AtomarChessGame(board, Player.White);

            Assert.AreEqual(game.MakeMove(new Move("G3", "E4", Player.White), true), MoveType.Move | MoveType.Capture);

            Piece[][] expected = new Piece[8][]
            {
                new Piece[8] {
                    o, o, o, o, kb, o, o, o
                },
                new Piece[8] {
                    o, o, o, o, o, o, o, o
                },
                new Piece[8] {
                    o, o, o, o, o, o, o, o
                },
                new Piece[8] {
                    o, o, o, pw, o, o, o, o
                },
                new Piece[8] {
                    o, o, o, o, o, o, o, o
                },
                new Piece[8] {
                    o, o, o, o, o, o, o, o
                },
                new Piece[8] {
                    o, o, o, o, o, o, o, o
                },
                new Piece[8] {
                    o, o, o, o, kw, o, o, o
                }
            };
            Piece[][] actual = game.GetBoard();
            Assert.AreEqual(expected, actual);
        }