%PDF- %PDF-
| Direktori : /proc/self/root/home/infra/fusioninventory/lib/lazy.js-0.5.1/spec/ |
| Current File : //proc/self/root/home/infra/fusioninventory/lib/lazy.js-0.5.1/spec/node_benchmark.js |
// Right now this script only tests uniq, because that's what I'm working on at
// the moment. Short-term goal is to refactor this to basically do a quick run
// on ANY method. Medium-term goal is to make it environment-agnostic (so have
// a browser runner as well) and have it run against any other library.
// Long-term goal is to make it library-agnostic (not just for Lazy.js). At that
// point I think we'll have a separate open-source project on our hands ;)
var Benchmark = require("../site/lib/benchmark.js");
var ComparisonSuite = require("./support/comparison_suite.js");
var Lazy = require("../lazy.js");
var _ = require("../site/lib/lodash.js");
Benchmark.options.maxTime = 1;
// Yeah, yeah. Big deal.
String.prototype.padLeft = function(width, delimiter) {
var padding = width - this.length;
if (padding <= 0) {
return this;
}
return this + new Array(padding + 1).join(delimiter || " ");
};
String.prototype.repeat = function(count) {
return "".padLeft(count, this);
};
function readValue(object, keys) {
var value = Lazy(keys.split(".")).reduce(function(obj, key) {
return obj[key];
}, object);
return typeof value === "number" && Math.floor(value) !== value ?
value.toFixed(3) : value;
};
var size = parseInt(process.argv[2], 10);
if (!size) {
console.log("You must specify a size.");
process.exit();
}
var type = process.argv[3];
var input = (function getArrayForType(type) {
var map;
switch (type) {
case "mostdupe":
map = function(x) { return Math.floor(x * Math.sqrt(size)) + 1; };
break;
case "halfdupe":
map = function(x) { return Math.floor(x * size / 2) + 1; };
break;
case "mostuniq":
map = function(x) { return Math.floor(x * size) + 1; };
break;
default:
console.log("You must specify a type: 'mostdupe', 'halfdupe', or 'mostuniq'.");
process.exit();
}
return Lazy.generate(Math.random)
.map(map)
.take(size)
.toArray();
}(type));
var suite = new ComparisonSuite({
reporter: {
onRunning: function(test) {
console.log("Running test '" + test.label + "'.");
},
onTestResults: function(tests) {
console.log("\nResults:\n");
var results = Lazy(tests)
.sortBy(function(test) { return test.hz; })
.reverse();
var columns = ["label", "hz", "count", "cycles", "stats.rme", "stats.deviation"];
var columnWidths = Lazy(columns)
.map(function(columnName) {
return [
columnName,
results
.map(function(result) { return readValue(result, columnName); })
.map(String)
.pluck("length")
.concat([columnName.length])
.max()
];
})
.toObject();
var header = Lazy(columns)
.map(function(column) { return column.padLeft(columnWidths[column]); })
.join(" | ");
console.log(header);
console.log("-".repeat(header.length));
results.each(function(result) {
console.log(
Lazy(columns)
.map(function(column) { return String(readValue(result, column)).padLeft(columnWidths[column]); })
.join(" | ")
);
});
}
}
});
suite.add("uniq", {
tests: {
"Lazy.js (no cache)": function(array) { Lazy(array).uniq().eachNoCache(function(e) {}); },
"Lazy.js (array cache)": function(array) { Lazy(array).uniq().eachArrayCache(function(e) {}); },
"Lazy.js (set cache)": function(array) { Lazy(array).uniq().eachSetCache(function(e) {}); },
"Lo-Dash": function(array) { _.each(_.uniq(array), function(e) {}); }
},
inputs: {
"array": [input]
}
});
console.log("Running benchmarks...");
suite.run();