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()); }
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); }
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;