Updated ffish.js to 0.5.1
authorQueensGambit <curry-berry@freenet.de>
Thu, 7 Jan 2021 00:41:12 +0000 (01:41 +0100)
committerFabian Fichter <ianfab@users.noreply.github.com>
Thu, 7 Jan 2021 12:48:37 +0000 (13:48 +0100)
* added fix when alternative move sequence breaks to new line
* added .split(' ').sort().join() to unit tests for board.legalMoves()
and board.legalMovesSan() because move generation ordering has changed
in FairyStockfish

src/ffishjs.cpp
tests/js/package.json
tests/js/test.js

index c720643..d9b765c 100644 (file)
@@ -516,6 +516,8 @@ Game read_game_pgn(std::string pgn) {
             default: ;  // pass
           }
           ++curIdx;
+          if (curIdx > lineEnd)
+            lineEnd = pgn.find('\n', curIdx);
         }
 
         if (pgn[curIdx] == '$') {
index 5d7c798..9e44aa0 100644 (file)
@@ -1,6 +1,6 @@
 {
   "name": "ffish",
-  "version": "0.5.0",
+  "version": "0.5.1",
   "description": "A high performance WebAssembly chess variant library based on Fairy-Stockfish",
   "main": "ffish.js",
   "scripts": {
index 79fcf34..cb24d72 100644 (file)
@@ -81,7 +81,7 @@ describe('board.legalMoves()', function () {
         ' P@d5 P@f5 P@g5 P@h5 P@a6 P@b6 P@d6 P@e6 P@f6 P@g6 P@h6 P@e7 Q@b1 Q@d1 Q@f1 Q@e2 Q@a3 Q@b3 Q@d3 Q@e3 Q@f3 ' +
         'Q@g3 Q@h3 Q@a4 Q@b4 Q@c4 Q@d4 Q@f4 Q@g4 Q@h4 Q@a5 Q@b5 Q@d5 Q@f5 Q@g5 Q@h5 Q@a6 Q@b6 Q@d6 Q@e6 Q@f6 Q@g6' +
         ' Q@h6 Q@e7 Q@b8 Q@d8 Q@e8 Q@f8 e1d1 e1f1 e1e2';
-    chai.expect(board.legalMoves()).to.equal(expectedMoves);
+    chai.expect(board.legalMoves().split(' ').sort().join()).to.equal(expectedMoves.split(' ').sort().join());
     board.delete();
   });
 });
@@ -94,7 +94,7 @@ describe('board.legalMovesSan()', function () {
         ' P@d6 P@e6+ P@f6 P@g6+ P@h6 P@e7 Q@b1 Q@d1 Q@f1 Q@e2 Q@a3 Q@b3+ Q@d3 Q@e3 Q@f3+ Q@g3 Q@h3 Q@a4 Q@b4 Q@c4+' +
         ' Q@d4 Q@f4+ Q@g4 Q@h4 Q@a5 Q@b5 Q@d5+ Q@f5+ Q@g5 Q@h5+ Q@a6 Q@b6 Q@d6 Q@e6+ Q@f6+ Q@g6+ Q@h6 Q@e7+ Q@b8' +
         ' Q@d8 Q@e8+ Q@f8+ Kd1 Kf1 Ke2';
-    chai.expect(board.legalMovesSan()).to.equal(expectedMoves);
+    chai.expect(board.legalMovesSan().split(' ').sort().join()).to.equal(expectedMoves.split(' ').sort().join());
     board.delete();
   });
 });
@@ -398,10 +398,26 @@ describe('board.pocket(turn)', function () {
 describe('board.toString()', function () {
   it("it returns a compact string representation of the board.", () => {
     const board = new ffish.Board("chess", "rnb1kbnr/ppp1pppp/8/3q4/8/8/PPPP1PPP/RNBQKBNR w KQkq - 0 3");
-    chai.expect(board.toString()).to.equal("r n b . k b n r\np p p . p p p p\n. . . . . . . .\n. . . q . . . .\n. . . . . . . .\n. . . . . . . .\nP P P P . P P P\nR N B Q K B N R");
+    chai.expect(board.toString()).to.equal("r n b . k b n r\n" +
+                                           "p p p . p p p p\n" +
+                                           ". . . . . . . .\n" +
+                                           ". . . q . . . .\n" +
+                                           ". . . . . . . .\n" +
+                                           ". . . . . . . .\n" +
+                                           "P P P P . P P P\n" +
+                                           "R N B Q K B N R");
     board.delete();
     const board2 = new ffish.Board("xiangqi");
-    chai.expect(board2.toString()).to.equal("r n b a k a b n r\n. . . . . . . . .\n. c . . . . . c .\np . p . p . p . p\n. . . . . . . . .\n. . . . . . . . .\nP . P . P . P . P\n. C . . . . . C .\n. . . . . . . . .\nR N B A K A B N R");
+    chai.expect(board2.toString()).to.equal("r n b a k a b n r\n" +
+                                            ". . . . . . . . .\n" +
+                                            ". c . . . . . c .\n" +
+                                            "p . p . p . p . p\n" +
+                                            ". . . . . . . . .\n" +
+                                            ". . . . . . . . .\n" +
+                                            "P . P . P . P . P\n" +
+                                            ". C . . . . . C .\n" +
+                                            ". . . . . . . . .\n" +
+                                            "R N B A K A B N R");
     board2.delete();
   });
 });
@@ -409,10 +425,54 @@ describe('board.toString()', function () {
 describe('board.toVerboseString()', function () {
   it("it returns a verbose string representation of the board.", () => {
     const board = new ffish.Board("chess", "rnb1kbnr/ppp1pppp/8/3q4/8/8/PPPP1PPP/RNBQKBNR w KQkq - 0 3");
-    chai.expect(board.toVerboseString()).to.equal("\n +---+---+---+---+---+---+---+---+\n | r | n | b |   | k | b | n | r |8  \n +---+---+---+---+---+---+---+---+\n | p | p | p |   | p | p | p | p |7\n +---+---+---+---+---+---+---+---+\n |   |   |   |   |   |   |   |   |6\n +---+---+---+---+---+---+---+---+\n |   |   |   | q |   |   |   |   |5\n +---+---+---+---+---+---+---+---+\n |   |   |   |   |   |   |   |   |4\n +---+---+---+---+---+---+---+---+\n |   |   |   |   |   |   |   |   |3\n +---+---+---+---+---+---+---+---+\n | P | P | P | P |   | P | P | P |2\n +---+---+---+---+---+---+---+---+\n | R | N | B | Q | K | B | N | R |1 *\n +---+---+---+---+---+---+---+---+\n   a   b   c   d   e   f   g   h\n\nFen: rnb1kbnr/ppp1pppp/8/3q4/8/8/PPPP1PPP/RNBQKBNR w KQkq - 0 3\nSfen: rnb1kbnr/ppp1pppp/8/3q4/8/8/PPPP1PPP/RNBQKBNR b - 5\nKey: AE7D48F19DB356CD\nCheckers: ")
+    chai.expect(board.toVerboseString()).to.equal("\n +---+---+---+---+---+---+---+---+\n" +
+                                                  " | r | n | b |   | k | b | n | r |8  \n" +
+                                                  " +---+---+---+---+---+---+---+---+\n" +
+                                                  " | p | p | p |   | p | p | p | p |7\n" +
+                                                  " +---+---+---+---+---+---+---+---+\n" +
+                                                  " |   |   |   |   |   |   |   |   |6\n" +
+                                                  " +---+---+---+---+---+---+---+---+\n" +
+                                                  " |   |   |   | q |   |   |   |   |5\n" +
+                                                  " +---+---+---+---+---+---+---+---+\n" +
+                                                  " |   |   |   |   |   |   |   |   |4\n" +
+                                                  " +---+---+---+---+---+---+---+---+\n" +
+                                                  " |   |   |   |   |   |   |   |   |3\n" +
+                                                  " +---+---+---+---+---+---+---+---+\n" +
+                                                  " | P | P | P | P |   | P | P | P |2\n" +
+                                                  " +---+---+---+---+---+---+---+---+\n" +
+                                                  " | R | N | B | Q | K | B | N | R |1 *\n" +
+                                                  " +---+---+---+---+---+---+---+---+\n" +
+                                                  "   a   b   c   d   e   f   g   h\n\n" +
+                                                  "Fen: rnb1kbnr/ppp1pppp/8/3q4/8/8/PPPP1PPP/RNBQKBNR w KQkq - 0 3\n" +
+                                                  "Sfen: rnb1kbnr/ppp1pppp/8/3q4/8/8/PPPP1PPP/RNBQKBNR b - 5\n" +
+                                                  "Key: AE7D48F19DB356CD\nCheckers: ")
     board.delete();
     const board2 = new ffish.Board("xiangqi");
-    chai.expect(board2.toVerboseString()).to.equal("\n +---+---+---+---+---+---+---+---+---+\n | r | n | b | a | k | a | b | n | r |10  \n +---+---+---+---+---+---+---+---+---+\n |   |   |   |   |   |   |   |   |   |9\n +---+---+---+---+---+---+---+---+---+\n |   | c |   |   |   |   |   | c |   |8\n +---+---+---+---+---+---+---+---+---+\n | p |   | p |   | p |   | p |   | p |7\n +---+---+---+---+---+---+---+---+---+\n |   |   |   |   |   |   |   |   |   |6\n +---+---+---+---+---+---+---+---+---+\n |   |   |   |   |   |   |   |   |   |5\n +---+---+---+---+---+---+---+---+---+\n | P |   | P |   | P |   | P |   | P |4\n +---+---+---+---+---+---+---+---+---+\n |   | C |   |   |   |   |   | C |   |3\n +---+---+---+---+---+---+---+---+---+\n |   |   |   |   |   |   |   |   |   |2\n +---+---+---+---+---+---+---+---+---+\n | R | N | B | A | K | A | B | N | R |1 *\n +---+---+---+---+---+---+---+---+---+\n   a   b   c   d   e   f   g   h   i\n\nFen: rnbakabnr/9/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/9/RNBAKABNR w - - 0 1\nSfen: rnbakabnr/9/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/9/RNBAKABNR b - 1\nKey: 1FBADA178B89E4C3\nCheckers: ");
+    chai.expect(board2.toVerboseString()).to.equal("\n +---+---+---+---+---+---+---+---+---+\n" +
+                                                   " | r | n | b | a | k | a | b | n | r |10  \n" +
+                                                   " +---+---+---+---+---+---+---+---+---+\n" +
+                                                   " |   |   |   |   |   |   |   |   |   |9\n" +
+                                                   " +---+---+---+---+---+---+---+---+---+\n" +
+                                                   " |   | c |   |   |   |   |   | c |   |8\n" +
+                                                   " +---+---+---+---+---+---+---+---+---+\n" +
+                                                   " | p |   | p |   | p |   | p |   | p |7\n" +
+                                                   " +---+---+---+---+---+---+---+---+---+\n" +
+                                                   " |   |   |   |   |   |   |   |   |   |6\n" +
+                                                   " +---+---+---+---+---+---+---+---+---+\n" +
+                                                   " |   |   |   |   |   |   |   |   |   |5\n" +
+                                                   " +---+---+---+---+---+---+---+---+---+\n" +
+                                                   " | P |   | P |   | P |   | P |   | P |4\n" +
+                                                   " +---+---+---+---+---+---+---+---+---+\n" +
+                                                   " |   | C |   |   |   |   |   | C |   |3\n" +
+                                                   " +---+---+---+---+---+---+---+---+---+\n" +
+                                                   " |   |   |   |   |   |   |   |   |   |2\n" +
+                                                   " +---+---+---+---+---+---+---+---+---+\n" +
+                                                   " | R | N | B | A | K | A | B | N | R |1 *\n" +
+                                                   " +---+---+---+---+---+---+---+---+---+\n" +
+                                                   "   a   b   c   d   e   f   g   h   i\n\n" +
+                                                   "Fen: rnbakabnr/9/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/9/RNBAKABNR w - - 0 1\n" +
+                                                   "Sfen: rnbakabnr/9/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/9/RNBAKABNR b - 1\n" +
+                                                   "Key: 1FBADA178B89E4C3\nCheckers: ");
     board2.delete();
   });
 });