diff options
Diffstat (limited to 'includes/js/dojox/string/tests/BuilderPerf.html')
-rw-r--r-- | includes/js/dojox/string/tests/BuilderPerf.html | 403 |
1 files changed, 0 insertions, 403 deletions
diff --git a/includes/js/dojox/string/tests/BuilderPerf.html b/includes/js/dojox/string/tests/BuilderPerf.html deleted file mode 100644 index 4280caa..0000000 --- a/includes/js/dojox/string/tests/BuilderPerf.html +++ /dev/null @@ -1,403 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" - "http://www.w3.org/TR/html4/strict.dtd"> -<html> - <head> - <title>Builder Perf Tests</title> - <script type="text/javascript" src="../../../dojo/dojo.js"></script> - <script type="text/javascript" src="../Builder.js"></script> - <script type="text/javascript" src="lipsum.js"></script> - <script type="text/javascript"> - - dojo.addOnLoad(function(){ - dojo.byId("run").disabled=""; - dojo.connect(dojo.byId("run"), - "onclick", - function(evt) { - setTimeout(function() { - var words = parseInt(dojo.byId("numWords").value) || 10; - var iters = parseInt(dojo.byId("numIters").value) || 1000; - var dict = eval(dojo.byId("dict").value); - buildAndRunSet(words, dict, iters); - }, 0); - }); - }); - - function element(tag, textOrChildOrArray) { - var e = document.createElement(tag); - function append(n) { - if(dojo.isString(n)){ - n = document.createTextNode(n); - } - e.appendChild(n); - } - if(dojo.isArray(textOrChildOrArray)) { - dojo.forEach(textOrChildOrArray, append); - }else{ - append(textOrChildOrArray); - } - return e; - } - - function log(t) { - dojo.byId("mess").innerHTML = t; - console.log(t); - } - - function reportRun(results){ - var runs = results.runs - var report = element("dl", - element("dt", - "Run with " + results.words + " words, " + - results.iterations + " iterations, for loop overhead of " + - results.overhead + ", average phrase of " + - results.wordSize + " characters")); - - runs.sort(function(a,b) { return a.time - b.time; }); - dojo.forEach(runs, function(r) { - report.appendChild(element("dd", r.time + " - " + r.name)); - }); - - dojo.body().appendChild(report); - } - - function runTest(test, iterations, expected) { - var i; - if(expected != test()) throw new Error("Test failed expecting " + expected + ", got " + test()); - var start = new Date().getTime(), end; - for(i=0; i < iterations; i++){ - test(); - } - end = new Date().getTime(); - return end-start; - } - - function runSet(set, iterations){ - - function averagePhraseLen(words) { - var sizes = dojo.map(words, function(w) { return w.length; }); - var total = 0; - dojo.forEach(sizes, function(s) { total += s; }); - return total / sizes.length; - } - - var tests = set.tests.concat(); //copy tests - var resultSet = {}; - resultSet.words = set.words.length; - resultSet.overhead = runTest(set.overhead, iterations); - resultSet.iterations = iterations; - resultSet.wordSize = averagePhraseLen(set.words); - var runs = []; - - function _run() { - var t = tests.pop(); - try { - log("Running " + t.name); - if(t) runs.push({ name: t.name, time: runTest(t.test, iterations, set.expected)}); - } catch(e) { - console.error("Error running " + t.name); - console.error(e); - } - if(tests.length > 0) { - setTimeout(_run, 0); - } - else { - log("Done!"); - resultSet.runs = runs; - reportRun(resultSet); - dojo.publish("perf/run/done"); - } - } - setTimeout(_run, 25); - } - - function buildTestSet(numWords, dict) { - var words = [], i, dl = dict.length; - for(i = numWords; i > 0; i-=dl) { - if(i >= dl) { words = words.concat(dict); } - else { words = words.concat(dict.slice(-i)); } - } - if(words.length != numWords) throw new Error("wrong number of words, got " + words.length + ", expected " + numWords); - - var expected = words.join(""); - - var _builder = new dojox.string.Builder(); - - return { - tests: [ - { - name: "concatFor", - test: function() { - var s = ""; - for(var i = 0; i < words.length; i++) { - s = s.concat(words[i]); - } - return s; - } - }, - /* - { - name: "concatForAlias", - test: function() { - var s = "", w = words, l = w.length; - for(var i = 0; i < l; i++) { - s = s.concat(w[i]); - } - return s; - } - }, - { - name: "concatForEach", - test: function() { - var s = ""; - dojo.forEach(words, function(w) { - s = s.concat(w); - }); - return s; - } - }, - */ - { - name: "concatOnce", - test: function() { - var s = ""; - s = String.prototype.concat.apply(s, words); - return s; - } - }, - { - name: "builderFor", - test: function() { - var b = new dojox.string.Builder(); - for(var i = 0; i < words.length; i++) { - b.append(words[i]); - } - return b.toString(); - } - }, - /* - { - name: "builderForEach", - test: function() { - var b = new dojox.string.Builder(); - dojo.forEach(words, function(w) { - b.append(w); - }); - return b.toString(); - } - }, - */ - { - name: "builderReusedFor", - test: function() { - _builder.clear(); - for(var i = 0; i < words.length; i++) { - _builder.append(words[i]); - } - return _builder.toString(); - } - }, - { - name: "builderOnce", - test: function() { - var b = new dojox.string.Builder(); - b.appendArray(words); - return b.toString(); - } - }, - { - name: "builderReusedOnce", - test: function() { - _builder.clear(); - _builder.appendArray(words); - return _builder.toString(); - } - }, - { - name: "plusFor", - test: function() { - var s = ""; - for(var i = 0; i < words.length; i++) { - s += words[i]; - } - return s; - } - }, - /* - { - name: "plusForAlias", - test: function() { - var s = "", w = words, l = w.length; - for(var i = 0; i < l; i++) { - s += w[i]; - } - return s; - } - }, - { - name: "plusForEach", - test: function() { - var s = ""; - dojo.forEach(words, function(w) { s += w; }); - return s; - } - },*/ - { - name: "joinOnce", - test: function() { - return words.join(""); - } - }, - { - name: "joinFor", - test: function() { - var a = []; - for(var i = 0; i < words.length; i++) { - a.push(words[i]); - } - return a.join(""); - } - }/*, - { - name: "joinForAlias", - test: function() { - var a = [], w = words, l = w.length; - for(var i = 0; i <l; i++) { - a.push(w[i]); - } - return a.join(""); - } - }, - { - name: "joinForEach", - test: function() { - var a = []; - dojo.forEach(words, function(w) { a.push(w); }); - return a.join(""); - } - } - */ - ], - words: words, - expected: expected, - overhead: function() { - var w = words; - var l = w.length; - for(var i=0; i < l; i++) { - ident(w[i]); - } - } - }; - } - - function buildAndRunSet(words, dict, times) { - runSet(buildTestSet(words, dict), times); - } - - function runSuite() { - var suite = [ - { - words: 2, - times: 10000 - }, - { - words: 4, - times: 10000 - }, - { - words: 8, - times: 10000 - }, - { - words: 16, - times: 10000 - }, - { - words: 32, - times: 10000 - }, - { - words: 64, - times: 10000 - }, - { - words: 128, - times: 1000 - }, - { - words: 256, - times: 1000 - }, - { - words: 512, - times: 1000 - }, - { - words: 1024, - times: 1000 - }, - { - words: 2048, - times: 1000 - }, - { - words: 4096, - times: 100 - }, - { - words: 8192, - times: 100 - } - ]; - - var totalSuite = dojo.map(suite, function(s) { var n = {}; dojo.mixin(n,s); n.dict = lipsum; return n; }); - totalSuite = totalSuite.concat(dojo.map(suite, function(s) { var n = {}; dojo.mixin(n,s); n.dict = lipsumLong; return n; })); - console.log(totalSuite); - - var handle = dojo.subscribe("perf/run/done", _run); - dojo.subscribe("perf/run/done", function(){ console.log("perf run done"); }); - - function _run() { - var t = totalSuite.shift(); - if(t) buildAndRunSet(t.words, t.dict, t.times); - if(totalSuite.length == 0) dojo.unsubscribe(handle); - } - - _run(); - } - - function ident(i) { return i; } - </script> - <style type="text/css"> - html { - font-family: Lucida Grande, Tahoma; - } - div { margin-bottom: 1em; } - #results { - border: 1px solid #999; - border-collapse: collapse; - } - #results caption { - font-size: medium; - font-weight: bold; - } - #results td, #results th { - text-align: right; - width: 10em; - font-size: small; - white-space: nowrap; - } - #wordsCol { background: yellow; } - td.max { color: red; font-weight: bold; } - td.min { color: green; font-weight: bold; } - </style> - </head> - <body> - <table> - <tr><td><label for="numWords">Words</label></td><td><input type="text" id="numWords" value="100"/></td></tr> - <tr><td><label for="numIters">Iterations</label></td><td><input type="text" id="numIters" value="1000"/></td></tr> - <tr><td><label for="dict">Dictionary</label></td><td><input type="text" id="dict" value="lipsum"></td></tr> - <tr><td></td><td><button id="run" disabled>Run Tests!</button></td></tr> - </table> - <div id="mess"></div> - </body> -</html> |