--- /dev/null
+"use strict";\r
+module.exports = newSuite;\r
+\r
+var benchmark = require("benchmark"),\r
+ chalk = require("chalk");\r
+\r
+var padSize = 27;\r
+\r
+function newSuite(name) {\r
+ var benches = [];\r
+ return new benchmark.Suite(name)\r
+ .on("add", function(event) {\r
+ benches.push(event.target);\r
+ })\r
+ .on("start", function() {\r
+ process.stdout.write("benchmarking " + name + " performance ...\n\n");\r
+ })\r
+ .on("cycle", function(event) {\r
+ process.stdout.write(String(event.target) + "\n");\r
+ })\r
+ .on("complete", function() {\r
+ if (benches.length > 1) {\r
+ var fastest = this.filter("fastest"), // eslint-disable-line no-invalid-this\r
+ fastestHz = getHz(fastest[0]);\r
+ process.stdout.write("\n" + chalk.white(pad(fastest[0].name, padSize)) + " was " + chalk.green("fastest") + "\n");\r
+ benches.forEach(function(bench) {\r
+ if (fastest.indexOf(bench) === 0)\r
+ return;\r
+ var hz = hz = getHz(bench);\r
+ var percent = (1 - hz / fastestHz) * 100;\r
+ process.stdout.write(chalk.white(pad(bench.name, padSize)) + " was " + chalk.red(percent.toFixed(1) + "% slower") + "\n");\r
+ });\r
+ }\r
+ process.stdout.write("\n");\r
+ });\r
+}\r
+\r
+function getHz(bench) {\r
+ return 1 / (bench.stats.mean + bench.stats.moe);\r
+}\r
+\r
+function pad(str, len, l) {\r
+ while (str.length < len)\r
+ str = l ? str + " " : " " + str;\r
+ return str;\r
+}\r