Allow to skip pocket in FEN validation
authorFabian Fichter <ianfab@users.noreply.github.com>
Sat, 1 May 2021 19:47:31 +0000 (21:47 +0200)
committerFabian Fichter <ianfab@users.noreply.github.com>
Sat, 1 May 2021 19:47:31 +0000 (21:47 +0200)
Part of #288.

src/apiutil.h
test.py
tests/js/test.js

index d1e35b3..267e42e 100644 (file)
@@ -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 (file)
--- 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
index 64b38f2..2e3b432 100644 (file)
@@ -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);