Exemplo n.º 1
0
        public void ValidateCastleling()
        {
            // position only has pawns, rooks and kings
            const string fen = "r3k2r/pppppppp/8/8/8/8/PPPPPPPP/R3K2R w KQkq - 0 1";
            const PositionValidationTypes validationType = PositionValidationTypes.Castleling;
            var game = GameFactory.Create();

            game.NewGame(fen);

            var validator = game.Pos.Validate(validationType);

            Assert.True(validator.IsOk);
            Assert.True(validator.ErrorMsg.IsNullOrEmpty());
        }
Exemplo n.º 2
0
        public IPositionValidator Validate(PositionValidationTypes types = PositionValidationTypes.All)
        {
            var error = string.Empty;

            if (types.HasFlagFast(PositionValidationTypes.Basic))
            {
                error = ValidateBasic();
            }

            if (types.HasFlagFast(PositionValidationTypes.Castleling))
            {
                error = ValidateCastleling(error);
            }

            if (types.HasFlagFast(PositionValidationTypes.Kings))
            {
                error = ValidateKings(error);
            }

            if (types.HasFlagFast(PositionValidationTypes.Pawns))
            {
                error = ValidatePawns(error);
            }

            if (types.HasFlagFast(PositionValidationTypes.PieceConsistency))
            {
                error = ValidatePieceConsistency(error);
            }

            if (types.HasFlagFast(PositionValidationTypes.PieceCount))
            {
                error = ValidatePieceCount(error);
            }

            if (types.HasFlagFast(PositionValidationTypes.PieceTypes))
            {
                error = ValidatePieceTypes(error);
            }

            if (types.HasFlagFast(PositionValidationTypes.State))
            {
                error = ValidateState(error);
            }

            IsOk     = error.IsNullOrEmpty();
            ErrorMsg = error;
            return(this);
        }
Exemplo n.º 3
0
        public void ValidationKingsNegative()
        {
            const PositionValidationTypes type = PositionValidationTypes.Kings;
            var expectedErrorMsg = $"king count for player {Player.White} was 2";

            var game = GameFactory.Create();

            game.NewGame();

            var pc = PieceTypes.King.MakePiece(Player.White);

            game.Pos.AddPiece(pc, Squares.e4);

            var validator = game.Pos.Validate(type);

            Assert.NotEmpty(validator.ErrorMsg);

            var actualErrorMessage = validator.ErrorMsg;

            Assert.Equal(expectedErrorMsg, actualErrorMessage);
            Assert.False(validator.IsOk);
        }
 public static bool HasFlagFast(this PositionValidationTypes @this, PositionValidationTypes flag)
 => (@this & flag) != 0;