From 23c6ef78cb21c7dac5a6a43c8f3c2875efa76891 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Tue, 9 Feb 2021 00:05:18 +0100 Subject: [PATCH] Fix some corner cases around in-TB positions. --- remoteglot.pl | 20 +++++++--- www/js/remoteglot.js | 90 +++++++++++++++++++++++--------------------- 2 files changed, 61 insertions(+), 49 deletions(-) diff --git a/remoteglot.pl b/remoteglot.pl index 9742a5a..b9055a6 100755 --- a/remoteglot.pl +++ b/remoteglot.pl @@ -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) { diff --git a/www/js/remoteglot.js b/www/js/remoteglot.js index db81656..4045bb5 100644 --- a/www/js/remoteglot.js +++ b/www/js/remoteglot.js @@ -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') { -- 2.39.2