function foo(a, b, c, d) { var result = a; if (a < 0) throw "what!"; else if (a < 1) { for (var i = b; i < c; ++i) result += d[i]; } else if (a < 2) { for (var i = b + 1; i < c - 1; ++i) result += d[i] * a; } else if (a < 3) { for (var i = b + 2; i < c - 2; ++i) result += d[i] * b; } else if (a < 4) { for (var i = b + 3; i < c - 3; ++i) result += d[i] * c; } else throw "huh?"; return result; } var array = []; for (var i = 0; i < 20; ++i) array.push(i); var limit = 20000; var phases = 4; var result = 0; for (var i = 0; i < limit; ++i) { var phase = (i * phases / limit) | 0; result += foo(i % (phase + 1), ((i % array.length) / 2) | 0, array.length - (((i % array.length) / 2) | 0), array); } if (result != 3072367) throw "Bad result: " + result;