diff options
Diffstat (limited to 'big-integer/benchmark/testWorker.js')
-rw-r--r-- | big-integer/benchmark/testWorker.js | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/big-integer/benchmark/testWorker.js b/big-integer/benchmark/testWorker.js new file mode 100644 index 0000000..cd94762 --- /dev/null +++ b/big-integer/benchmark/testWorker.js @@ -0,0 +1,70 @@ +var haveScripts = false, timeout; +function getScripts(msg) { + if (haveScripts) return; + importScripts.apply(null, ["benchmark.js"].concat(msg.url)); + var start = new Function(msg.onStart); + start(); + haveScripts = true; +} + +onmessage = function (e) { + var msg = e.data; + getScripts(msg); + if (!msg.testsToRun) { + postMessage({ + type: "loaded" + }); + return; + } + Benchmark.options.minTime = 1 / 64; + Benchmark.options.maxTime = 1 / 2; + Benchmark.options.minSamples = 5; + var suite = new Benchmark.Suite(); + for (var i = 0; i < msg.testsToRun.length; i++) { + var name = msg.testsToRun[i]; + suite.add(name, msg.tests[name], { + onCycle: msg.onCycle ? new Function(msg.onCycle) : function () { } + }); + } + suite.on("cycle", function (e) { + var target = e.target, + name = target.name, + stats = target.stats, + desc = createDescription(stats); + if (target.aborted) { + if (!stats.mean) + desc = "Test timed out."; + } + postMessage({ + type: "cycle", + name: name, + stats: stats, + desc: desc + }); + clearTimeout(timeout); + }) + .on("complete", function (e) { + postMessage({ + type: "complete" + }); + }).run({ + async: true + }); + timeout = setTimeout(function () { // abort tests after 10 seconds + suite.abort(); + }, msg.timeout); +}; + +function createDescription(stats) { + var runs = stats.sample.length; + var rme = stats.rme.toFixed(2); + var mean = 1 / stats.mean || 0; + if (mean >= 100) mean = Math.round(mean) + ""; + else if (mean >= 10) mean = mean.toFixed(1); + else if (mean >= 1) mean = mean.toFixed(2); + else mean = mean.toFixed(3); + while (/(\d+)(\d{3})/.test(mean)) { + mean = mean.replace(/(\d+)(\d{3})/, '$1' + ',' + '$2'); + } + return mean + " ops/sec ±" + rme + "% (" + runs + " samples)"; +}
\ No newline at end of file |