/* global Snap */ ;(function () { SVG.bench = { // Initalize test store _chain: [], _before: function () {}, _after: function () {}, draw: SVG().addTo('#draw'), snap: Snap(100, 100), raw: document.getElementById('native'), // Add descriptor describe: function (name, closure) { this._chain.push({ name: name, run: closure }) return this }, // Add test test: function (name, run) { // run test var start = (new Date()).getTime() run() this.write(name, (new Date()).getTime() - start) // clear everything this.clear() }, // Skip test skip: function (name, run) { this.write(name, false) }, // Run tests run: function () { this.pad() for (var h, i = 0, il = this._chain.length; i < il; i++) { h = document.createElement('h1') h.innerHTML = this._chain[i].name this.pad().appendChild(h) this._chain[i].run(this) } }, // Write result write: function (name, ms) { var test = document.createElement('div') if (typeof ms === 'number') { test.className = 'test' test.innerHTML = '' + name + ' completed in ' + ms + 'ms' } else { test.className = 'test skipped' test.innerHTML = name + ' (skipped)' } this.pad().appendChild(test) return this }, // Reference writable element pad: function () { var pad = document.getElementById('pad') if (!pad) { pad = document.createElement('div') document.getElementsByTagName('body')[0].appendChild(pad) } return pad }, // Clear canvasses clear: function () { while (this.raw.hasChildNodes()) { this.raw.removeChild(this.raw.lastChild) } this.draw.clear() this.snap.clear() } } })()