generator golf test (v2)

Revision 2 of this benchmark created by Everett on


Setup

function test_callable(func){
    
    var f = [func(0), func(0, 1), func(10), func(1, 1), func(1, 1, 4, 4, 6)];
    
    f.forEach(function(func){
        for(var i = 0; i < 15; ++i) func(i);
    });
    
    }

Test runner

Ready to run.

Testing in
TestOps/sec
iterative
function createSequence(){
var defaults = Array.prototype.slice.call(arguments),
        size = defaults.length;

return (function(num){
        if(num < size) return defaults[num];
        
        var def = defaults.slice(),
                i = 0;

        for(var j = size; j <= num; ++j, i = ++i % size)
                def[i] = def.reduce(function(prev, curr){ return prev + curr;});

        return def[i-1<0 ? size-1 : i-1];
})
}

test_callable(createSequence);
ready
iterative minified
function createSequence(){var r=Array.prototype.slice.call(arguments),e=r.length;return function(n){if(e>n)return r[n];for(var t=r.slice(),u=0,c=e;n>=c;++c,u=++u%e)t[u]=t.reduce(function(r,e){return r+e});return t[0>u-1?e-1:u-1]}}

test_callable(createSequence);
ready
recursive 1
function createSequence(){
var base = Array.prototype.slice.call(arguments),
        size = base.length;

return (function seq(num){
        if(num < size) return base[num];
        var sum = 0;
        for(var i = 1; i <= size; ++i)
                sum += seq(num - i);
        return sum;
})
}

test_callable(createSequence);
ready
recursive 1 minified
function createSequence(){var r=Array.prototype.slice.call(arguments),e=r.length;return  function n(t){if(e>t)return r[t];for(var u=0,a=1;e>=a;++a)u+=n(t-a);return u}} test_callable(createSequence);
ready
recursive 2
function createSequence(){
var base = arguments,
        size = Object.keys(base).length;

return (function seq(num){
        if(num < size) return base[num];
        var sum = 0;
        for(var i = 1; i <= size; ++i)
                sum += seq(num - i);
        return sum;
})
}

test_callable(createSequence);
ready
recursive 2 minified
function createSequence(){var r=arguments,n=Object.keys(r).length;return function t(e){if(n>e)return r[e];for(var u=0,f=1;n>=f;++f)u+=t(e-f);return u}}
test_callable(createSequence);
ready

Revisions

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

  • Revision 1: published by Everett on
  • Revision 2: published by Everett on