Fix some corner cases around in-TB positions.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Mon, 8 Feb 2021 23:05:18 +0000 (00:05 +0100)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Mon, 8 Feb 2021 23:05:18 +0000 (00:05 +0100)
remoteglot.pl
www/js/remoteglot.js

index 9742a5a09a8686e93270290961ac4fa3704a2dae..b9055a64d30616ff945bed8fd59c500ab8eeb62c 100755 (executable)
@@ -1180,13 +1180,21 @@ sub score_digest {
                }
                if (exists($info->{'splicepos' . $mpv})) {
                        my $sp = $info->{'splicepos' . $mpv};
-                       if ($mate < 0) {
-                               return ['tb', -$sp];
+                       if ($mate > 0) {
+                               return ['T', $sp];
                        } else {
-                               return ['tb', $sp];
+                               return ['t', $sp];
                        }
                } else {
-                       return ['m', $mate];
+                       if ($mate > 0) {
+                               return ['M', $mate];
+                       } elsif ($mate < 0) {
+                               return ['m', -$mate];
+                       } elsif ($pos->{'toplay'} eq 'B') {
+                               return ['M', 0];
+                       } else {
+                               return ['m', 0];
+                       }
                }
        } else {
                if (exists($info->{'score_cp' . $mpv})) {
@@ -1216,9 +1224,9 @@ sub long_score {
                if (exists($info->{'splicepos' . $mpv})) {
                        my $sp = $info->{'splicepos' . $mpv};
                        if ($mate > 0) {
-                               return sprintf "White wins in %u/%u", int(($sp + 1) * 0.5), $sp;
+                               return sprintf "White wins in %u", int(($sp + 1) * 0.5);
                        } else {
-                               return sprintf "Black wins in %u/%u", int(($sp + 1) * 0.5), $sp;
+                               return sprintf "Black wins in %u", int(($sp + 1) * 0.5);
                        }
                } else {
                        if ($mate > 0) {
index db816564829ca7a293be77c4ecc623cdccb89a2f..4045bb54f7cdce2306d43d138f741c2cae5c71d9 100644 (file)
@@ -7,7 +7,7 @@
  * @type {Number}
  * @const
  * @private */
-var SCRIPT_VERSION = 2021010200;
+var SCRIPT_VERSION = 2021010201;
 
 /**
  * The current backend URL.
@@ -1300,6 +1300,11 @@ var update_board = function() {
                        hiddenboard = new Chess(base_fen);
                        hiddenboard.move(line['pv'][0]);
                        var this_response = hiddenboard.move(line['pv'][1]);
+                       if (this_response === null) {
+                               console.log("BUG: ", i);
+                               console.log(data);
+                               console.log(line['pv']);
+                       }
                        if (response.from !== this_response.from || response.to !== this_response.to) {
                                // Different response depending on lines, abort.
                                response = undefined;
@@ -2116,24 +2121,25 @@ var format_short_score = function(score) {
        if (!score) {
                return "???";
        }
-       if (score[0] === 'tb') {
+       if (score[0] === 'T' || score[0] === 't') {
                var ret = "TB\u00a0";
                if (score[2]) {  // Is a bound.
                        ret = score[2] + "\u00a0TB\u00a0";
                }
-               if (score[1] > 0) {
+               if (score[0] === 'T') {
                        return ret + Math.ceil(score[1] / 2);
                } else {
                        return ret + "-" + Math.ceil(-score[1] / 2);
                }
-       } else if (score[0] === 'm') {
+       } else if (score[0] === 'M' || score[0] === 'm') {
+               var sign = (score[0] === 'm') ? '-' : '';
                if (score[2]) {  // Is a bound.
-                       return score[2] + "\u00a0M " + score[1];
+                       return score[2] + "\u00a0M " + sign + score[1];
                } else {
-                       return "M " + score[1];
+                       return "M " + sign + score[1];
                }
        } else if (score[0] === 'd') {
-               return "TB draw";
+               return "TB =0";
        } else if (score[0] === 'cp') {
                if (score[2]) {  // Is a bound.
                        return score[2] + "\u00a0" + fmt_cp(score[1]);
@@ -2148,25 +2154,29 @@ var format_long_score = function(score) {
        if (!score) {
                return "???";
        }
-       if (score[0] === 'tb') {
-               if (score[1] > 0) {
-                       if (score[1] == 0) {
-                               return "Won for white (tablebase)";
-                       } else {
-                               return "White wins in " + Math.ceil(score[1] / 2);
-                       }
+       if (score[0] === 'T') {
+               if (score[1] == 0) {
+                       return "Won for white (tablebase)";
                } else {
-                       if (score[1] == -1) {
-                               return "Won for black (tablebase)";
-                       } else {
-                               return "Black wins in " + Math.ceil(-score[1] / 2);
-                       }
+                       return "White wins in " + Math.ceil(score[1]);
                }
-       } else if (score[0] === 'm') {
-               if (score[1] > 0) {
+       } else if (score[0] === 't') {
+               if (score[1] == -1) {
+                       return "Won for black (tablebase)";
+               } else {
+                       return "Black wins in " + Math.ceil(score[1] / 2);
+               }
+       } else if (score[0] === 'M') {
+               if (score[1] == 0) {
+                       return "White wins by checkmate";
+               } else {
                        return "White mates in " + score[1];
+               }
+       } else if (score[0] === 'm') {
+               if (score[1] == 0) {
+                       return "Black wins by checkmate";
                } else {
-                       return "Black mates in " + (-score[1]);
+                       return "Black mates in " + score[1];
                }
        } else if (score[0] === 'd') {
                return "Theoretical draw";
@@ -2177,12 +2187,10 @@ var format_long_score = function(score) {
 }
 
 var compute_plot_score = function(score) {
-       if (score[0] === 'm' || score[0] === 'tb') {
-               if (score[1] > 0) {
-                       return 500;
-               } else {
-                       return -500;
-               }
+       if (score[0] === 'M' || score[0] === 'T') {
+               return 500;
+       } else if (score[0] === 'm' || score[0] === 't') {
+               return -500;
        } else if (score[0] === 'd') {
                return 0;
        } else if (score[0] === 'cp') {
@@ -2209,22 +2217,18 @@ var compute_score_sort_key = function(score, depth, invert, depth_secondary_key)
        if (!score) {
                return -10000000;
        }
-       if (score[0] === 'tb') {
-               if (score[1] > 0) {
-                       // White reaches TB win.
-                       s = 89999 - score[1];
-               } else {
-                       // Black reaches TB win (note the double negative for score[1]).
-                       s = -89999 - score[1];
-               }
+       if (score[0] === 'T') {
+               // White reaches TB win.
+               s = 89999 - score[1];
+       } else if (score[0] === 't') {
+               // Black reaches TB win.
+               s = -(89999 - score[1]);
+       } else if (score[0] === 'M') {
+               // White mates.
+               s = 99999 - score[1];
        } else if (score[0] === 'm') {
-               if (score[1] > 0) {
-                       // White mates.
-                       s = 99999 - score[1];
-               } else {
-                       // Black mates (note the double negative for score[1]).
-                       s = -99999 - score[1];
-               }
+               // Black mates.
+               s = -(99999 - score[1]);
        } else if (score[0] === 'd') {
                s = 0;
        } else if (score[0] === 'cp') {