From aa358d344ddc6596d6d62ae99a4bb5c6788196c9 Mon Sep 17 00:00:00 2001 From: Fabian Fichter Date: Sat, 1 May 2021 21:47:31 +0200 Subject: [PATCH] Allow to skip pocket in FEN validation Part of #288. --- src/apiutil.h | 5 ++++- test.py | 2 +- tests/js/test.js | 4 +++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/apiutil.h b/src/apiutil.h index d1e35b3..267e42e 100644 --- a/src/apiutil.h +++ b/src/apiutil.h @@ -657,7 +657,7 @@ inline Validation check_pocket_info(const std::string& fenBoard, int nbRanks, co // look for last '/' stopChar = '/'; } - else + else if (std::count(fenBoard.begin(), fenBoard.end(), '[') == 1) { // pocket is defined as [ and ] stopChar = '['; @@ -668,6 +668,9 @@ inline Validation check_pocket_info(const std::string& fenBoard, int nbRanks, co return NOK; } } + else + // allow to skip pocket + return OK; // look for last '/' for (auto it = fenBoard.rbegin()+offset; it != fenBoard.rend(); ++it) diff --git a/test.py b/test.py index f174a0c..13d2c85 100644 --- a/test.py +++ b/test.py @@ -127,7 +127,7 @@ variant_positions = { }, "sittuyin": { "8/8/4pppp/pppp4/4PPPP/PPPP4/8/8[KFRRSSNNkfrrssnn] w - - 0 1": (False, False), # startpos - "k7/8/8/8/8/8/8/K7[] w - - 0 1": (True, True), # K vs K + "k7/8/8/8/8/8/8/K7 w - - 0 1": (True, True), # K vs K, skip pocket "k6P/8/8/8/8/8/8/K7[] w - - 0 1": (True, True), # KP vs K "k6P/8/8/8/8/8/8/K6p[] w - - 0 1": (False, False), # KP vs KP "k7/8/8/8/8/8/8/KFF5[] w - - 0 1": (False, True), # KFF vs K diff --git a/tests/js/test.js b/tests/js/test.js index 64b38f2..2e3b432 100644 --- a/tests/js/test.js +++ b/tests/js/test.js @@ -562,9 +562,11 @@ describe('ffish.validateFen(fen, uciVariant)', function () { chai.expect(ffish.validateFen(board.fen(), variant)).to.equal(1); board.delete(); } - // alternative pocket piece formulation + // alternative or skipped pocket formulation chai.expect(ffish.validateFen("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR/RB w KQkq - 3+3 0 1", "3check-crazyhouse")).to.equal(1); chai.expect(ffish.validateFen("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR/ w KQkq - 3+3 0 1", "3check-crazyhouse")).to.equal(1); + chai.expect(ffish.validateFen("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 3+3 0 1", "3check-crazyhouse")).to.equal(1); + chai.expect(ffish.validateFen("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR[-] w KQkq - 3+3 0 1", "3check-crazyhouse")).to.equal(1); // error id checks chai.expect(ffish.validateFen("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR[]wKQkq-3+301", "3check-crazyhouse")).to.equal(-10); -- 1.7.0.4