Switch/If/Table Branch

Benchmark created on


Setup

var outVar = 1.0;
    var count = 4096;
    var counter = 0;
    function TestFunc(i) {
      outVar += i;
    }
    
    function Trans(v) {
      return Math.floor(Math.random() * count);
    }
    
    function GetNext() {
      return (counter++) & 511;
    }
    
    var switchFunc = eval((function() {
    var str = "(function(i){switch(i){";
    for(var i = 0; i < count; i++) {
    str += "case " + i + ": TestFunc(" + Trans(i) + "); break; ";
    }
    str += "}})";
    return str;
    })());
    
    var ifFunc = eval((function() {
    var str = "(function(i){";
    for(var i = 0; i < count; i++) {
    str += "if(i == " + i + ") { TestFunc(" + Trans(i) + "); return;} ";
    }
    str += "})";
    return str;
    })());
    
    var arrayMap = [];
    for(var i = 0; i < count; i++) {
      arrayMap.push((function(i) {
        return function() { TestFunc(i); };
      })(Trans(i)));
    }
    
    var dictionaryMap = {};
    for(var i = 0; i < count; i++) {
      dictionaryMap[String(i)] = (function(i) {
        return function() { TestFunc(i); };
      })(Trans(i));
    }

Test runner

Ready to run.

Testing in
TestOps/sec
switch
switchFunc(GetNext());
ready
if
ifFunc(GetNext());
ready
array
arrayMap[GetNext()]();
ready
dictionary
dictionaryMap[GetNext()]();
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.