function benchmarkImpl(configuration) {
var verbosity = configuration.verbosity;
var numAircraft = configuration.numAircraft;
var numFrames = configuration.numFrames;
var expectedCollisions = configuration.expectedCollisions;
var exclude = configuration.exclude;
var simulator = new Simulator(numAircraft);
var detector = new CollisionDetector();
var lastTime = performance.now();
var results = [];
for (var i = 0; i < numFrames; ++i) {
var time = i / 10;
var collisions = detector.handleNewFrame(simulator.simulate(time));
var before = lastTime;
var after = performance.now();
lastTime = after;
var result = {
time: after - before,
numCollisions: collisions.length
};
if (verbosity >= 2)
print("CDjs: " + result.time);
if (verbosity >= 3)
result.collisions = collisions;
results.push(result);
}
results.splice(0, exclude);
if (verbosity >= 1) {
for (var i = 0; i < results.length; ++i) {
var string = "Frame " + i + ": " + results[i].time + " ms.";
if (results[i].numCollisions)
string += " (" + results[i].numCollisions + " collisions.)";
print(string);
if (verbosity >= 2 && results[i].collisions.length)
print(" Collisions: " + results[i].collisions);
}
}
var actualCollisions = 0;
for (var i = 0; i < results.length; ++i)
actualCollisions += results[i].numCollisions;
if (actualCollisions != expectedCollisions) {
throw new Error("Bad number of collisions: " + actualCollisions + " (expected " + expectedCollisions + ")");
}
}
function benchmark() {
return benchmarkImpl({
verbosity: 0,
numAircraft: 1000,
numFrames: 18,
expectedCollisions: 1336,
exclude: 0
});
}
class Benchmark {
runIteration() {
benchmark();
}
}