From: Simon Tatham Date: Mon, 18 May 2015 15:39:12 +0000 (+0100) Subject: Add sorting-order buttons to the benchmark output. X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=commitdiff_plain;h=fb0ff8c33857e31d93dc36e1b4b2ed28837e5e44;hp=894921015dde693697647b98b0c41467dcc91c08;p=sgt-puzzles.git Add sorting-order buttons to the benchmark output. Since I'm committed to HTML5ish Javascript already, that shouldn't be too much of an inconvenience. --- diff --git a/benchmark.pl b/benchmark.pl index 26a5a98..9876385 100755 --- a/benchmark.pl +++ b/benchmark.pl @@ -125,20 +125,62 @@ function initPlots() { ctx.stroke(); } } + document.getElementById('sort_orig').onclick = function() { + sort(function(e) { + return parseFloat(e.getAttribute("data-index")); + }); + }; + document.getElementById('sort_median').onclick = function() { + sort(function(e) { + return -parseFloat(e.getAttribute("data-median")); + }); + }; + document.getElementById('sort_mean').onclick = function() { + sort(function(e) { + return -parseFloat(e.getAttribute("data-mean")); + }); + }; +} +function sort(keyfn) { + var rows = document.getElementsByTagName("tr"); + var trs = []; + for (var i = 0; i < rows.length; i++) + trs.push(rows[i]); + trs.sort(function(a,b) { + var akey = keyfn(a); + var bkey = keyfn(b); + return akey < bkey ? -1 : akey > bkey ? +1 : 0; + }); + var parent = trs[0].parentElement; + for (var i = 0; i < trs.length; i++) + parent.removeChild(trs[i]); + for (var i = 0; i < trs.length; i++) + parent.appendChild(trs[i]); } //]]>

Puzzle generation-time benchmarks

+

Sort order: + + + EOF +my $index = 0; for my $preset (@presets) { - print "\n"; + $index++; } print <
Preset
", &escape($preset), " $b } @{$presets{$preset}}; + my @data = sort { $a <=> $b } @{$presets{$preset}}; + my $median = ($#data % 2 ? + ($data[($#data-1)/2]+$data[($#data+1)/2])/2 : + $data[$#data/2]); + my $mean = 0; map { $mean += $_ } @data; $mean /= @data; + print "
", &escape($preset), "